【问题标题】:Access Recordset Yielding NAME?访问记录集产生名称?
【发布时间】:2013-02-04 09:13:36
【问题描述】:

我有一个通过 ADODB 连接到 SQL 数据库的访问数据库。访问表视图的记录集是通过以下方法中的记录集属性设置的。这个方法是从 Form_Load 函数中调用的,用于查看表单。通过主表单上的选项卡访问该表单。

不幸的是,记录集似乎没有在机器之间正确更新。在一台机器(Access 2010)上它可以正常加载。在第二个(Access 2010)上,它仅将第一行加载为 Name?。有时,如果我自己打开表单,然后打开选项卡,我可以让它加载到第二台机器上。

任何帮助将不胜感激。提前致谢!

Function LoadTblEmployeesADOtoForm()

Dim sqlStr As String

 Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim p As ADODB.Property
    Const ConnStr = "PROVIDER=SQLOLEDB;Server=SERVER;Database=DB;User ID=ID;Password=PWD;"
    Set cn = New ADODB.Connection
    cn.Open ConnStr

    Set rs = New ADODB.Recordset
    With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenKeyset
        .LockType = adLockPessimistic

        'SELECT
        sqlStr = "SELECT * FROM tblEmployees ORDER BY NetworkID"

        Debug.Print sqlStr

        .Source = sqlStr

        Set .ActiveConnection = cn
        .Properties("Preserve on Abort") = True
        .Properties("Preserve on Commit") = True
    End With
    'cn.BeginTrans
    rs.Open

    Debug.Print rs.RecordCount
    Dim temp As Integer

     Set Form_frmManagetblEmployees.Recordset = rs


    cn.Close


    Set rs = Nothing


End Function

【问题讨论】:

  • @Remou 这是我正在维护的遗留代码。一旦用户将他们的计算机更新到 Access 2010,问题就出现了。我可以做一个链接表,但如果对预先存在的代码有一个快速修复,我想采取这条路线。
  • @Remou 我尝试使用直通查询并将其设置为记录源,现在它似乎在另一台机器上加载,但不是在第一台机器上。
  • @Remou 在每种情况下都是相同的字段和列。我能看到的唯一不匹配的是访问表在顶部读取 LoggedDateTime,SQL DB 读取 LoggedDate。但是,我似乎找不到在哪里更改该列标题以查看是否是问题所在。
  • @Remou 我将一个传递查询用作显示表格的表单的记录集。
  • 该列的表单标题为“LoggedDateTime”,但 SQL DB 中的实际名称为“LoggedDate”

标签: sql ms-access vba adodb recordset


【解决方案1】:

当表单作为子表单时,不能引用:

 Set Form_frmManagetblEmployees.Recordset = rs

但是,Me 将同时适用于表单和子表单,因此:

 Set Me.Recordset = rs

【讨论】:

  • 轻微调整以将 Me.Subform 传递给外部方法,这非常有效。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多