使用Sql Server中存储过程的数据填充Access连续表单

时间:2015-03-19 15:47:01

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

我尝试使用 ms sql中存储过程的数据在访问2013 中填写连续表单服务器2014 。数据库连接工作,我可以使用其他访问表单将数据添加到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?

1 个答案:

答案 0 :(得分:3)

使用 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.ControlSource omschrijving 用于txtOmschrijving.ControlSource,依此类推,表单应根据您的意愿加载记录集行。

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

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