Article ID: 143034
Article Last Modified on 11/3/2003
142534 : How to Create Programs in Visual Basic that Use Remote OLE
Property Value ------------------------------------ Instancing 2 - Creatable MultiUse Name rdoClass Public True
Option Explicit
Private en As rdoEnvironment
Private cn As rdoConnection
Private rs As rdoResultset
Private Sub Class_Initialize()
'when an instance of the rdoserver class gets created in the client
'this code is executed
Set en = rdoEngine.rdoEnvironments(0)
en.CursorDriver = rdUseIfNeeded
Dim strConn As String
strConn = "driver={SQL Server}; Server=myserver; Database=pubs; " & _
"UID=myuid;PWD=mypwd;"
Set cn = en.OpenConnection(dsname:="", Prompt:=rdDriverNoPrompt, _
Connect:=strConn)
End Sub
Public Function QueryResultset(strSQL As String)
Set rs = cn.OpenResultset(Name:=strSQL, Type:=rdOpenStatic)
End Function
Public Function GetResultset() As rdoResultset
Set GetResultset = rs
End Function
Public Function RowCount() As Integer
RowCount = rs.RowCount
End Function
Public Function GetColHeaders()
Dim intColumnCount As Integer
Dim intCurrentColumn As Integer
Dim varColHeaders()
intColumnCount = rs.rdoColumns.Count
ReDim varColHeaders(intColumnCount)
For intCurrentColumn = 0 To intColumnCount - 1
varColHeaders(intCurrentColumn) = _
rs.rdoColumns(intCurrentColumn).Name
Next intCurrentColumn
GetColHeaders = varColHeaders
End Function
Public Function GetAllRows()
Dim rsTemp As rdoResultset 'used to get rowcount
Set rsTemp = cn.OpenResultset(Name:="SELECT Count(*) from authors", _
Type:=rdOpenForwardOnly)
GetAllRows = rs.GetRows(CLng(rsTemp(0)))
rsTemp.Close
Set rsTemp = Nothing
End Function
Public Function GetSomeRows(intHowMany As Integer)
GetSomeRows = rs.GetRows(intHowMany)
End Function
Public Function EOF()
EOF = rs.EOF
End Function
Public Sub MoveFirst()
rs.MoveFirst
End Sub
Public Sub MovePrevious()
rs.MovePrevious
End Sub
Public Sub MoveNext()
rs.MoveNext
End Sub
Public Sub MoveLast()
rs.MoveLast
End Sub
Private Sub Class_Terminate()
rs.Close
cn.Close
End Sub
Option Explicit
Private rdoObject As rdoServer.rdoClass 'must be referenced in project
Private Sub Form_Load()
Set rdoObject = New rdoServer.rdoClass
End Sub
Private Sub Command1_Click()
Dim en As rdoEnvironment
Dim cn As rdoConnection
Dim rsLocal As rdoResultset
Set en = rdoEngine.rdoEnvironments(0)
en.CursorDriver = rdUseIfNeeded 'Server Side cursors if available
Dim strConn As String
strConn = "driver={SQL Server}; Server=myserver; Database=pubs; " & _
"UID=myuid;PWD=mypwd;"
Set cn = en.OpenConnection(dsname:="", Prompt:=rdDriverNoPrompt, _
Connect:=strConn)
Set rsLocal = cn.OpenResultset(Name:="SELECT * from authors", _
Type:=rdOpenStatic)
Call FillGridFromRS(rsLocal) 'call procedure to fill grid
rsLocal.Close
cn.Close
en.Close
End Sub
Private Sub Command2_Click()
Dim rsPointer As rdoResultset 'pointer to rdoResultset
rdoObject.QueryResultset ("SELECT * from authors")
Set rsPointer = rdoObject.GetResultset()
Call FillGridFromRS(rsPointer)
End Sub
Sub FillGridFromRS(rdoRS As rdoResultset)
Grid1.Cols = rdoRS.rdoColumns.Count
Dim intCurrentRow As Integer
Dim intCurrentColumn As Integer
Dim intColumnCount As Integer
intColumnCount = rdoRS.rdoColumns.Count
For intCurrentColumn = 0 To intColumnCount - 1
Grid1.Row = 0
Grid1.Col = intCurrentColumn
Grid1.ColWidth(intCurrentColumn) = 1250
Grid1.Text = rdoRS.rdoColumns(intCurrentColumn).Name
Next intCurrentColumn
intCurrentRow = 1
Grid1.Rows = intCurrentRow + 1
While Not rdoRS.EOF
Grid1.Rows = intCurrentRow + 1
For intCurrentColumn = 0 To intColumnCount - 1
Grid1.Row = intCurrentRow
Grid1.Col = intCurrentColumn
Grid1.Text = rdoRS.rdoColumns(intCurrentColumn).Value & ""
Next intCurrentColumn
rdoRS.MoveNext
intCurrentRow = intCurrentRow + 1
Wend
End Sub
Private Sub Command3_Click()
Dim HeaderData
Dim RowData
Dim intCurrentRow As Integer
Dim intCurrentColumn As Integer
Dim intRowCount As Integer
Dim intColumnCount As Integer
Dim intLastRow As Integer
rdoObject.QueryResultset ("SELECT * from authors")
HeaderData = rdoObject.GetColHeaders
intColumnCount = UBound(HeaderData, 1)
Grid1.Rows = 1
Grid1.Cols = intColumnCount
Grid1.Row = 0
For intCurrentColumn = 0 To intColumnCount - 1
Grid1.Col = intCurrentColumn
Grid1.ColWidth(intCurrentColumn) = 1250
Grid1.Text = HeaderData(intCurrentColumn)
Next intCurrentColumn
rdoObject.MoveFirst
While Not rdoObject.EOF
'experiment with using the GetSomeRows method to limit the
'amount of data transferred at one time
RowData = rdoObject.GetAllRows ' retrieves all rows at once
'RowData = rdoObject.GetSomeRows(10) ' retrieves n rows at a time
intRowCount = UBound(RowData, 2) + 1
intColumnCount = UBound(RowData, 1) + 1
intLastRow = Grid1.Row
For intCurrentRow = 1 To intRowCount
Grid1.Rows = intLastRow + intCurrentRow + 1
Grid1.Row = intLastRow + intCurrentRow
For intCurrentColumn = 0 To intColumnCount - 1
Grid1.Col = intCurrentColumn
Grid1.Text = RowData(intCurrentColumn, intCurrentRow - 1) & ""
Next intCurrentColumn
Next intCurrentRow
Wend
End Sub
Additional query words: 4.00 vb4win vb432
Keywords: kbdatabase KB143034