3

这是一个超级基本的问题,但我正在尝试通过一些表单值针对表单所在的 MS Access 数据库执行一个查询。我认为我不需要正式通过 ADO,但也许我做。

无论如何,我们将不胜感激。对不起,我是一个 n00b。;)

4

4 回答 4

3

您可以使用以下 DAO 代码查询 Access DB:

Dim rs As DAO.Recordset
Dim db As Database

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Attendance WHERE ClassID = " & ClassID)

do while not rs.EOF
  'do stuff
  rs.movenext
loop

rs.Close
Set rs = Nothing

在我的例子中,ClassID 是表单上的一个文本框。

于 2008-09-25T16:24:12.737 回答
0

这里以防万一您想要 ADO 版本:

Dim cn as new ADODB.Connection, rs as new ADODB.RecordSet
Dim sql as String

set cn = CurrentProject.Connection
sql = "my dynamic sql string"

rs.Open sql, cn ', Other options for the type of recordset to open, adoOpenStatic, etc.

While Not rs.EOF
  'do things with recordset
  rs.MoveNext   ' Can't tell you how many times I have forgotten the MoveNext. silly.
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

DAO 和 ADO 在用法上非常接近。您可以使用 DAO 获得更多控制权,使用 ADO 获得更好的性能。在我遇到的大多数访问数据库应用程序中,它确实没有什么区别。当我看到链接表有很大的不同时。ADO 通常表现更好。

于 2008-09-30T01:21:23.357 回答
0

您得到的答案以及您似乎正在接受通过 DAO 记录集的循环。这通常是完成文本的一种非常低效的方法。例如,这个:

  Set db = CurrentDB()
  Set rs = db.OpenRecordset("[sql]")
  If rs.RecordCount > 0
     rs.MoveFirst
     Do While Not rs.EOF
       rs.Edit
       rs!Field = "New Data"
       rs.Update
       rs.MoveNext
     Loop 
  End If
  rs.Close
  Set rs = Nothing
  Set db = Nothing

效率将远低于:

  UPDATE MyTable SET Field = "New Data"

可以运行:

  CurrentDb.Execute "UPDATE MyTable SET Field = 'New Data'"

需要遍历记录集的情况很少见,并且在大多数情况下,SQL 更新速度会快几个数量级(并且会导致在数据页上保持更短的读/写锁)。

于 2008-09-26T19:45:49.397 回答
0

这就是我最终想出的真正有效的方法。

Dim rs As DAO.Recordset
Dim db As Database

Set db = CurrentDB
Set rs = db.OpenRecordset(SQL Statement)

While Not rs.EOF
    'do stuff
Wend

rs.Close
于 2008-09-25T19:03:12.527 回答