【问题标题】:Using data from a stored procedure in Sql Server to fill an Access continuous form使用 Sql Server 中存储过程中的数据填充 Access 连续表单
【发布时间】:2015-05-22 20:00:43
【问题描述】:

我正在尝试使用 ms sql server 2014 中的 存储过程 中的数据在 access 2013 中填写 连续表单 。数据库连接正常,我可以使用其他访问形式将数据添加到 ms sql server 数据库。所以这不是问题。 这是我的存储过程:

CREATE PROCEDURE spArtikelen AS
BEGIN
SELECT a.artikelnr, omschrijving, v.voorraad, p.prijs, a.leverancier
FROM artikel AS a, artikelprijs AS p, artikelvoorraad AS v
WHERE a.artikelnr = p.artikelnr 
AND a.artikelnr = v.artikelnr 
AND CAST(GETDATE() AS DATE) BETWEEN p.begindatum AND p.einddatum
END

这是我的 vba 代码(我将 vba 代码放在表单的 LOAD 事件上):

Private Sub Form_Load()
    Dim rs As ADODB.Recordset

    Set rs = DbConn.Execute("EXEC spArtikelen")
        Do Until rs.EOF
            Me.txtArtikelnr.Value = rs!artikelnr
            Me.txtOmschrijving.Value = rs!omschrijving
            Me.txtVoorraad.Value = rs!voorraad
            Me.txtPrijs.Value = rs!prijs
            Me.txtLeverancier.Value = rs!leverancier
            Debug.Print rs!artikelnr, rs!omschrijving, rs!voorraad, rs!prijs, rs!leverancier
            rs.MoveNext
        Loop
End Sub!

the continuous form..

我该如何解决这个问题?我一直试图让它工作一整天..没有成功.. 每次运行表单,只能得到一条记录,而且无法点击记录!

Here's the data from the stored procedure I'm trying to put into the form. Possible solution?

【问题讨论】:

  • 另一种选择可能是在 Access 中创建传递查询以运行存储过程,然后将表单绑定到传递查询。 (但是,记录集仍然是只读的。)
  • @GordThompson 我认为您的建议应该更加突出,因此将其添加到我的答案中。如果您希望将其作为单独的答案提交,我很乐意将其删除。问候。
  • @HansUp 不用担心,您的回答对我来说很好。

标签: sql-server ms-access stored-procedures vba continuous-forms


【解决方案1】:

使用 adUseClient 为它的CursorLocation 属性打开您的记录集。然后将表单的 Recordset 属性设置为您的 ADO 记录集。

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "EXEC spArtikelen", DbConn
Set Me.Recordset = rs

然后用 artikelnr 表示txtArtikelnr.ControlSourceomschrijving 表示txtOmschrijving.ControlSource,依此类推,表单应该根据需要加载记录集行。

请注意,表单中显示的数据将是只读的。希望这不是一个不受欢迎的惊喜。

另外,我建议使用这种方法是因为您已经有了合适的 ADO 记录集。但是,我认为 Gord 的 suggestion 使用 pass-through query 作为表单的 RecordSource 更简单。

【讨论】:

  • 您好,谢谢您的回复!不过,我不熟悉属性 ControlSource。应该是这样的吗? (我会用图片编辑帖子)称为“可能的解决方案”。
  • 没有一种简单的直接方法可以编辑从该存储过程返回的数据。您可以为存储过程中涉及的 3 个表中的每一个创建和执行 UPDATE 语句。如果你想走那条路,请将其作为一个新问题来解决。
猜你喜欢
  • 2013-02-27
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多