请问怎样能把MSHFlexGrid控件的内容输出到EXCEL里??还有,要连接局域网里SQL SERVER里的数据库,ADO的连接怎样些?
例如服务器的机器名字叫 DB-SERVER,IP地址为192.168.0.1,其他机器要连接上去ADO连接应该怎样写??谢谢各位大哥啦!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    Public Sub Create_big(flex As MSFlexGrid, cmbDEP As ComboBox, DTP1 As DTPicker, DTP2 As DTPicker)
    On Error GoTo Err
    Dim xlApp As Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Set xlApp = New Excel.Application
    Set xlWorkBook = xlApp.Workbooks.Add(App.Path & "\template\big.xls"))xlApp.Application.Visible = True
    Set xlSheet = xlWorkBook.Sheets(1)
    xlSheet.Cells(1, 1) = cmbDEP.Text & Format(DTP1.Value, "dddddd") & "至" & Format(DTP2.Value, "dddddd") & "出境大表"
    Dim flexCols, flexRows As Integer
    Dim flexCol, flexRow As Integer
    Dim i, j As Integer
    With flex
       flexCols = .cols - 1
       flexRows = .rows - 1
       i = 3
       j = 1
       For flexRow = 1 To flexRows
         For flexCol = 1 To flexCols
          xlSheet.Cells(i, j) = .TextMatrix(flexRow, flexCol)
          j = j + 1
         Next flexCol
         i = i + 1
       Next flexRow
    End With
    Set xlApp = Nothing
    Set xlWorkBook = Nothing
    Set xlSheet = Nothing
    Exit Sub
    Err:
    MsgBox Err.Description, vbCritical, "错误"
    End Sub
      

  2.   

    导入部分上面已经写得横清楚啦!还可以把他做的更通用一些,可以考虑用用Clip 属性,或做成函数,将MSHFlexGrid或Object作为参数进行传递!     Public gO_DBConn as new ADODB.Connection    '构造数据库连接串
        gS_DBPath = "Provider=SQLOLEDB.1;Persist Security Info=True;" _
            & "User ID=" & 数据库登录用户名(例如:sa) & ";Password=" & 数据库登录用户的口令 & ";" _
            & "Initial Catalog=" & 数据库名称 & ";Data Source=" & IP地址或机器名 & ";" _
            & "NetWork Library=DBMSSOCN " 注:网络连接库可以不选,但程序在98下运行可能会出错
        
        '判断数据连接是否已经建立
        If gO_DBConn Is Nothing Then
            Set gO_DBConn = New ADODB.Connection
        ElseIf gO_DBConn.State = adStateOpen Then
            gO_DBConn.Close
        End If
        
        '进行数据库连接
        gO_DBConn.CursorLocation = adUseClient
        gO_DBConn.Open gS_DBPath
      

  3.   

    谢谢上面2位大师傅!
    请受白痴仔一拜!KenWin大哥
    怎样才可以做成函数,将MSHFlexGrid或Object作为参数进行传递???
    能否再教教小弟?
      

  4.   

    哈哈,给你一个:
    SQL Server 连接串如下:Dim Conn  As ADODB.Connection
    Dim ConnStr As String
    Dim ServerAddress As String 
    Dim DBName As String
    Dim UserId As String
    Dim Password As String
    ServerAddress="127.0.0.1"  '这里改成你的 192.168.0.1
    DBName="Medicine"
    UserId="sa"
    Password=""
    ConnStr="PROVIDER=MSDASQL;DRIVER={SQL Server};SERVER=" & serveraddress & ";DATABASE=" & dbname & ";UID=" & userid & ";PWD=" & 写Excel函数如下:
    当然,首先肯定要引用 Excel 的库,Public Sub Write2XL(CaptionList As ListBox, SQLList As ListBox, MSFG As MSHFlexGrid, Optional FieldCount As Integer = 5, Optional ReportCaption As String = "仓库报表")
        If CaptionList.ListCount <> SQLList.ListCount Then
            ErrProc "报表数目与脚本数目不一致!"
            Exit Sub
        End If
        Set XLS = New Excel.Application
        XLS.Workbooks.Add
        XLS.Caption = ReportCaption
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        If CaptionList.ListCount > 3 Then
            For I = 4 To CaptionList.ListCount
                XLS.Worksheets.Add
            Next I
        End If
        
        'frmWritting.Show  '进度条窗体,如果没有,请屏蔽此行
        'frmWritting.lblSum.Caption = CaptionList.ListCount  '进度条窗体,如果没有,请屏蔽此行
        For I = 1 To CaptionList.ListCount
            XLS.Sheets(I).Select
            CaptionList.ListIndex = I - 1
            XLS.ActiveSheet.Name = CaptionList.Text
            SQLList.ListIndex = I - 1
            '在此填入数据
            RefreshMSFG MSFG, SQLList.Text
            ReplaceHeader MSFG
            'frmWritting.lblCur.Caption = I  '进度条窗体,如果没有,请屏蔽此行
            'frmWritting.ProcBar.Min = 0  '进度条窗体,如果没有,请屏蔽此行
            'frmWritting.ProcBar.Max = MSFG.Rows  '进度条窗体,如果没有,请屏蔽此行
            'frmWritting.ProcBar.Value = 0  '进度条窗体,如果没有,请屏蔽此行
            XLS.Cells(1, Int(MSFG.Cols / 2)) = CaptionList.Text
            If MSFG.Cols > 3 Then
                XLS.Cells(2, 1) = "操作员:" & CurUser
                XLS.Cells(2, MSFG.Cols - 1) = Format(Time, "h:mm:ss")
                XLS.Cells(2, MSFG.Cols - 2) = Format(Date, "yyyy-m-d")
            Else
                XLS.Cells(2, MSFG.Cols) = Format(Time, "h:mm:ss")
                XLS.Cells(2, MSFG.Cols + 1) = Format(Date, "yyyy-m-d")
            End If
            For J = 1 To MSFG.Rows
                For K = 1 To MSFG.Cols - 1
                    XLS.Cells(J + 2, K).Value2 = MSFG.TextMatrix(J - 1, K)
                Next K
                'frmWritting.ProcBar.Value = frmWritting.ProcBar.Value + 1 '进度条窗体,如果没有,请屏蔽此行
            Next J
        Next I
        'frmWritting.Hide   '进度条窗体,如果没有,请屏蔽此行
        XLS.Visible = TrueEnd Sub
      

  5.   

    我都忘了,
    写XLS的函数参数中有两个ListBox 分别是 
    CaptionList 和 SQLList
    他们的功能是提供一个列表框,一次性处理多个表的数据,
    也就是说, 把多个表的内容同时写到 Excel 对应的 Sheet 中去。函数中还有一句是
    RefreshMSFG MSFG, SQLList.Text
    这个是用来填充 FlexGrid 用的 如果你可以把它去掉,如果你不需要更改 FlexGrid 的内容,
      

  6.   

    我真的很白痴,写好了这个函数怎样去调用它呢??
    MSHFlexGrid的值是用Recordset供给的!
    那用EXCEL的值也应该由Recordset供给的????例如Command1_Click()立即把MSHFlexGrid输出的EXCEL里,是怎样调用到上面各位大哥教小弟的那个EXCEL函数呢?在一次感谢各位大哥的帮忙!!!!!!!!!!!!!!!!!