我目前正在将 Access 后端移动到 SQL Server。我遇到了某些列表框的行源的问题。我需要一种方法来设置列表框行源来查询驻留在服务器上的 SP。我还需要传递一个源自单击另一个列表框的参数。
例如,listbox1 被用户单击,然后选择的值作为参数传递给 listbox2 的行源的查询。如何让行源查询 SQL Server 并将参数传递给它。
我目前正在将 Access 后端移动到 SQL Server。我遇到了某些列表框的行源的问题。我需要一种方法来设置列表框行源来查询驻留在服务器上的 SP。我还需要传递一个源自单击另一个列表框的参数。
例如,listbox1 被用户单击,然后选择的值作为参数传递给 listbox2 的行源的查询。如何让行源查询 SQL Server 并将参数传递给它。
在 SQL Server 中,我有一个名为 [Guitars] 的表,其中包含
Model Make
------------ ------
Les Paul Gibson
SG Gibson
Stratocaster Fender
Telecaster Fender
和一个名为 [GetModels] 的存储过程定义为
CREATE PROCEDURE [dbo].[GetModels]
@Make nvarchar(50) = ''
AS
BEGIN
SET NOCOUNT ON;
SELECT Model FROM Guitars WHERE Make = @Make
END
在 Access 中,我有一个名为 [ptqGetModels] 的传递查询和一个包含两个列表框的表单:
名称: lbxMake
行源: “Fender”;“Gibson”
行源类型:值列表
名称: lbxModel
行来源: SELECT * FROM ptqGetModels;
行源类型:表/查询
在表单后面的 VBA 代码中After Update
,列表框有以下事件lbxMake
:
Private Sub lbxMake_AfterUpdate()
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("ptqGetModels")
qdf.SQL = "EXEC GetModels '" & Me.lbxMake.Value & "'"
Set qdf = Nothing
Me.lbxModel.Requery
End Sub
当我在列表框中选择一个新值时,它会通过重新编写传递查询然后重新运行存储过程lbxMake
来自动更新列表框。lbxModel