有没有一种方法可以在不使用表的情况下在MS-Access中创建表单?

时间:2020-02-10 14:38:36

标签: vba forms ms-access datatables

我想在ms-Access中显示对Web服务(几行)的调用结果。为此,我创建了一个带有defaultView = 1(=连续表单)的表单。

现在,我想知道是否可以直接在表单中使用来自Web服务的显示结果。这意味着无需创建一个表,然后再使用recordsource-property选择该表。

是否可以在不使用表的情况下在MS-Access中以连续形式显示数据?

我试图这样自己设置记录集:

Private Sub Form_Load()

  Set m_Dataset = CurrentDb.OpenRecordset("Test", RecordsetTypeEnum.dbOpenDynamic)
  Call m_Dataset.AddNew
  m_Dataset("OutOfThinAir") = "Hallo"
  Set Me.Recordset = m_Dataset

End Sub

但是OpenRecordset会引发错误“无效参数”。

我还考虑过在不使用表名的情况下将recordsource设置为select语句(在oracle中,这将是“ Select ... from dual”),但是我没有找到一个有效的语句。 “从双重选择1;”绝对不行。

2 个答案:

答案 0 :(得分:3)

是的,但是您需要使用ADODB记录集,而不是DAO记录集。

例如

Dim m_Dataset As New ADODB.Recordset
m_Dataset.Fields.Append "OutOfThinAir",adVarWChar, 6, adFldUpdatable
m_Dataset.Open
m_Dataset.AddNew 'No call!
m_Dataset("OutOfThinAir") = "Hallo"
Set Me.Recordset = m_Dataset

答案 1 :(得分:1)

在Erik A的帮助下,我找到了一个可行的解决方案:

Private Sub Form_Load()

  Dim rstADO As ADODB.Recordset
  Set rstADO = New ADODB.Recordset
  rstADO.Fields.Append "OutOfThinAir", adVarChar, 100, adFldMayBeNull
  rstADO.LockType = adLockOptimistic
  rstADO.Open

  rstADO.Addnew
  rstADO.Fields("OutOfThinAir") = "Hello"
  rstADO.Update
  rstADO.Addnew
  rstADO.Fields("OutOfThinAir") = "Du"
  rstADO.Update

  Set Me.Recordset = rstADO
End Sub

顺便说一句,我必须添加“ Microsoft ActiveX数据对象6.1库”作为引用,以便使用常量并将“ ADODB.Recordset”用作变量类型。