cntl为网格控件名,sql为查询语句,ipagenum为要取第几页的数据,irecperpage为每页显示记录数。 这是用来显示查询结果到网格的。Public Sub FillBrowseFGrid(cntl As Control, sSQL As String, iPageNum As Integer, iRecPerPage As Integer)
Dim i As Integer Dim j As Integer Dim sFieldName As String Dim pc As Integer On Error GoTo Err_FillFGrid Dim rs As New ADODB.Recordset
rs.PageSize = iRecPerPage rs.AbsolutePage = iPageNum '' Set up the col size of the grid With cntl .Clear .Rows = 2 .Cols = rs.Fields.Count End With ' Caption
For i = 0 To rs.Fields.Count - 1 cntl.TextMatrix(0, i) = rs.Fields(i).Name
Select Case rs(i).Type Case adChar cntl.ColWidth(i) = rs(i).DefinedSize * 120 If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adInteger cntl.ColWidth(i) = rs(i).DefinedSize * 120 If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adDBTimeStamp cntl.ColWidth(i) = rs(i).DefinedSize * 80 If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adVarChar cntl.ColWidth(i) = 3000
Case adLongVarChar cntl.ColWidth(i) = 3000
Case Else If IsNumeric(rs.Fields(i)) Then cntl.ColWidth(i) = Val(rs.Fields(i)) * 120 If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120 Else cntl.ColWidth(i) = 1000 If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120 End If
End Select Next
j = 1 For pc = 1 To iRecPerPage cntl.Rows = j + 1 cntl.Row = j For i = 0 To rs.Fields.Count - 1 With cntl .Col = i If Not IsNull(rs(i)) Then
If rs(i).Type = adChar Or rs(i).Type = adVarChar Or rs(i).Type = adLongVarChar Then .Text = " " & Trim(rs(i)) Else .Text = rs(i) Else .Text = "" End If End With Next j = j + 1 ' Get next row rs.MoveNext If rs.EOF Then Exit For Next pc rs.Close
srt=GrdM.TextMatrix(.row, .col)
这是用来显示查询结果到网格的。Public Sub FillBrowseFGrid(cntl As Control, sSQL As String, iPageNum As Integer, iRecPerPage As Integer)
Dim i As Integer
Dim j As Integer
Dim sFieldName As String
Dim pc As Integer
On Error GoTo Err_FillFGrid
Dim rs As New ADODB.Recordset
cnn.CursorLocation = adUseClient
Set rs = New ADODB.Recordset
rs.CacheSize = iRecPerPage * iPageNum
rs.MaxRecords = iRecPerPage * iPageNum
rs.CursorLocation = adUseClient
rs.Open sSQL, cnn, adOpenStatic, adLockReadOnly
rs.PageSize = iRecPerPage
rs.AbsolutePage = iPageNum '' Set up the col size of the grid
With cntl
.Clear
.Rows = 2
.Cols = rs.Fields.Count
End With
' Caption
For i = 0 To rs.Fields.Count - 1
cntl.TextMatrix(0, i) = rs.Fields(i).Name
Select Case rs(i).Type
Case adChar
cntl.ColWidth(i) = rs(i).DefinedSize * 120
If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adInteger
cntl.ColWidth(i) = rs(i).DefinedSize * 120
If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adDBTimeStamp
cntl.ColWidth(i) = rs(i).DefinedSize * 80
If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Case adVarChar
cntl.ColWidth(i) = 3000
Case adLongVarChar
cntl.ColWidth(i) = 3000
Case Else
If IsNumeric(rs.Fields(i)) Then
cntl.ColWidth(i) = Val(rs.Fields(i)) * 120
If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
Else
cntl.ColWidth(i) = 1000
If Len(rs.Fields(i).Name) > rs(i).DefinedSize Then cntl.ColWidth(i) = Len(rs.Fields(i).Name) * 120
End If
End Select
Next
j = 1
For pc = 1 To iRecPerPage
cntl.Rows = j + 1
cntl.Row = j
For i = 0 To rs.Fields.Count - 1
With cntl
.Col = i
If Not IsNull(rs(i)) Then
If rs(i).Type = adChar Or rs(i).Type = adVarChar Or rs(i).Type = adLongVarChar Then .Text = " " & Trim(rs(i)) Else .Text = rs(i)
Else
.Text = ""
End If
End With
Next
j = j + 1
' Get next row
rs.MoveNext
If rs.EOF Then Exit For Next pc
rs.Close
Exit_FillFGrid:
Exit SubErr_FillFGrid:
MsgBox Err.Description, "Fill Browse Grid Error: "
Resume Exit_FillFGrid
End Sub取的每一格的值的方法就是
cntl.TextMatrix(0, i) = rs.Fields(i).Name
str=mshflexgrid1.textmatrix(x,y), x是行数,Y是列数```