我目前正在将Access后端移动到SQL Server。我遇到了某些列表框的行源的问题。我需要一种方法来设置列表框行源以查询驻留在服务器上的SP。我还需要传递一个从单击另一个列表框中派生的参数。
例如,用户单击listbox1,然后将所选值作为参数传递给listbox2的行源的查询。如何让rowsource从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
行来源:"挡泥板";"吉布森"
行源类型:值列表
名称:lbxModel
行源:SELECT*FROM ptqGetModels
行源类型:表/查询
在表单后面的VBA代码中,我有以下lbxMake
列表框的After Update
事件:
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
列表框,方法是重新编写传递查询,然后重新运行存储过程。