Article ID: 150716
Article Last Modified on 3/14/2005
149055 : Jet Doesn't Support QueryDefs on a Non-Attached ODBC Table
Dim db As Database
Dim cn As String
Private Sub Form_Load()
cn = "odbc;driver={SQL Server};server=myserver;" & _
"database=pubs;uid=myuid;pwd=mypwd"
If Dir("mydb.mdb") <> "" Then
' database exists, so just open it.
Set db = OpenDatabase(Name:="mydb", Exclusive:=False, _
ReadOnly:=False, Connect:="")
Else
'database does not exist, create it and attach authors table.
Set db = CreateDatabase(Name:="mydb", Connect:=dbLangGeneral, _
Option:=dbVersion30)
Dim td As TableDef
Set td = db.CreateTableDef()
td.Name = "Authors"
td.SourceTableName = "Authors"
td.Connect = cn
End If
End Sub
Private Sub Command1_Click()
Dim qd As QueryDef
On Error Resume Next
Set qd = db.QueryDefs("abc") ' test for existence of querydef.
If Error > 0 Then
Set qd = db.CreateQueryDef(Name:="abc")
qd.Connect = cn
qd.SQL = "Select @@Version" 'native SQL Server
End If
Set qd = db.QueryDefs("xyz") ' test for existence of querydef.
If Error > 0 Then
Set qd = db.CreateQueryDef(Name:="xyz")
qd.Connect = cn
qd.SQL = "Select * from titles" ' generic SQL.
End If
On Error GoTo 0
End Sub
Private Sub Command2_Click()
Dim rs As Recordset
Dim qd As QueryDef
Set qd = db.QueryDefs("abc")
Set rs = qd.OpenRecordset()
Call displayResults(rs)
End Sub
Private Sub Command3_Click()
Dim rs As Recordset
Dim qd As QueryDef
Set qd = db.QueryDefs("xyz")
Set rs = qd.OpenRecordset()
Call displayResults(rs)
End Sub
Sub displayResults(rs As Recordset)
Dim f As Field, s As String, i As Integer
For Each f In rs.Fields
s = s & f.Name
Next f
Debug.Print s ' print column headers.
While Not rs.EOF And i < 5
s = ""
For Each f In rs.Fields
s = s & f.Value
Next f
Debug.Print s ' print first 5 rows.
rs.MoveNext
i = i + 1
Wend
End Sub
Keywords: kbhowto KB150716