SQL SP作为带变量的Listbox Rowsource - Server 2008

时间:2013-08-27 18:02:52

标签: sql-server-2008 tsql ms-access stored-procedures

我目前正在将Access后端移动到SQL Server。我遇到了某些列表框的行源问题。我需要一种方法来设置listbox rowsource来查询驻留在服务器上的SP。我还需要传递一个从点击另一个列表框派生的参数。

例如,用户单击listbox1,然后将选定的值作为参数传递给listbox2的rowsource的查询。如何让rowsource查询SQL Server并将参数传递给它。

1 个答案:

答案 0 :(得分:4)

在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代码中,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列表框。