在Access 2007中构建未绑定的表单

时间:2010-05-21 18:49:55

标签: sql-server ms-access ms-access-2007

我有一个访问应用程序,其表单允许用户输入案例注释。此表单的主要字段与源表中的SQL Server varchar(MAX)字段相关联。由于用户切换到Access 2007,他们的程序在案例备注表单上时会一直崩溃。作为此问题的可能解决方案,我想尝试取消绑定此表单并将其重新构建为未绑定的表单。

此表单需要能够在我的SQL Server数据库中添加和更新记录。它还需要能够在记录之间浏览。我想我不知道从哪里开始。任何建议/代码片段都表示赞赏。

1 个答案:

答案 0 :(得分:0)

作为起点,请尝试使用Google中的“未绑定表单”。不要被PacMan分心! ;)

无论如何,未绑定表单的基本思想是将数据从记录集加载到未绑定的控件中,然后在编辑完成后将其保存回来。这意味着你需要这些东西:

  1. 控制选择所需的记录,某种查找功能。

  2. 打开记录集并将字段中的数据写入表单上相应控件的代码。

  3. 控件将记录保存回数据库,数据库将使用SQL更新将未绑定控件中的值写回数据库。我不想更新没有更改的字段(因为我做了很多复制的Jet应用程序,多次更新可能会导致不必要的复制冲突)。您可以将未配置控件中的数据与原始记录集中的数据进行比较(如果将其作为快照类型记录集打开,它将不会反映自打开以来的任何更新),并仅为其中的字段编写SQL UPDATE值不匹配。你必须考虑Nulls。

  4. 通常的做法是将控件命名为与它们对应的字段完全相同,这样就可以循环记录集的字段集合并将数据加载到控件中:

      For Each fld In rs.Fields
        Me.Controls(fld.Name) = fld.Value
      Next fld
    

    您也可以同样保存数据并根据原始记录集值检查控制值。

    我不知道这是否适用于SQL Server VarChar()字段,但您也可以尝试我称之为“半绑定”的表单,您可以使用表单的RecordSource属性加载记录集但不要将字段绑定到控件。因此,表单是绑定的,但控件不是。我经常使用完全绑定的形式执行此操作,我将备注字段解除绑定(以避免Jet / ACE后端中备注字段指针损坏的危险)。在这种情况下,使用绑定表单记录集和未绑定文本框进行编辑,您可以这样做:

    1. 在表单的OnCurrent事件中,将未绑定的字段数据加载到相应的未绑定文本框中。

    2. 在未绑定控件的AfterUpdate事件中,将未绑定文本框中的数据写回记录源。

    3. 这两个步骤基本上会是这样的:

        Private Sub Form_Current()
          Me!txtMemo = Me!Memo
        End Sub
      
        Private Sub txtMemo_AfterUpdate()
          Me!Memo = Me!txtMemo
          Me.Dirty = False
        End Sub
      

      使用Jet / ACE后端,您需要在写入备注字段值后立即保存记录,否则您无法避免破坏备注字段指针的危险。使用SQL Server后端,您可能需要也可能不需要这样做,因为问题完全不同。保存将释放写锁定,但您可能不需要避免这种情况。

      另外,我假设可以从表单的底层Recordsource读取VarChar()数据并将其写入文本框。你必须看看它是否有效。