Sql 以用户输入作为筛选条件的直通查询-MS Access

Sql 以用户输入作为筛选条件的直通查询-MS Access,sql,sql-server-2008,ms-access,vba,pass-through,Sql,Sql Server 2008,Ms Access,Vba,Pass Through,我目前在Access中有一个用户界面(表单),其中有两个组合框,表示一个季度的特定日期。表单值是从SQL SERVER 2008的传递查询中查询进来的 是否有任何方法可以编写一个传递查询,该查询将使用where条件中的表单值 例如: 插入TBL.ABC 从TBL.DEF中选择*其中[Date]=Formvalue 在所有的研究之后,我甚至浏览了Stackoverflow上发布的几个问题,但都找不到答案。这可能吗 这样做的主要动机是基于“FormValue”形式的输入将数据分离到两个不同的表中,然

我目前在Access中有一个用户界面(表单),其中有两个组合框,表示一个季度的特定日期。表单值是从SQL SERVER 2008的传递查询中查询进来的

是否有任何方法可以编写一个传递查询,该查询将使用where条件中的表单值

例如: 插入TBL.ABC 从TBL.DEF中选择*其中[Date]=Formvalue

在所有的研究之后,我甚至浏览了Stackoverflow上发布的几个问题,但都找不到答案。这可能吗

这样做的主要动机是基于“FormValue”形式的输入将数据分离到两个不同的表中,然后根据日期执行不同的操作

如果你需要进一步的信息,请告诉我。非常感谢您的帮助

Private Sub Command13_Click()
Dim St001, St002 As String
Dim conn As ADODB.Connection
Dim strPath As String
Dim strDate As String
Set conn = CurrentProject.Connection

strPath = "ServerName"
'conn.Open = "ODBC;DRIVER=SQL Server;SERVER=" & strpath & ";
'             DATABASE=DB;UID=ABC;PWD=DEF;Trusted_Connection=No;"

'DoCmd.OpenQuery "003a Drop Curr_Qtr"
strDate = curQtr & ""
StrDate2 = prevQtr & ""

       ' If combo box is empty?
If strDate = "" Then
        MsgBox "The Curr Qtr Date value is Empty, Please select the date"
ElseIf StrDate2 = "" Then
        MsgBox "The Date Prev Qtr Date value is Empty, Please select the date"
Else
    ' Append values

DoCmd.OpenQuery "003a Drop Curr_Qtr"

'On Error Resume Next
St002 = "SELECT COLUMNS into TblB from TblA where ColA='" & strDate & "'
DoCmd.RunSQL St002
作为scuh,我在代码中引用的所有表都是链接表。我尝试使用其中一个表单中建议的代码的以下格式,但始终会弹出相同的错误:

    Dim St001, St002 As String
    Dim conn As ADODB.Connection
    Dim strPath As String
    Dim strDate As String
    Set conn = CurrentProject.Connection

    strPath = "ServerName"
    'conn.Open = "ODBC;DRIVER=SQL Server;SERVER=" & strpath & ";DATABASE=DBName;
    '       UID=Username;PWD=password;Trusted_Connection=No;"

    'DoCmd.OpenQuery "003a Drop table"
    strDate = curQtr & ""
    StrDate2 = prevQtr & ""


       ' If combo box is empty?
    If strDate = "" Then
            MsgBox "The Curr Date value is Empty, Please select the date"
    ElseIf StrDate2 = "" Then
            MsgBox "The Prev  Date value is Empty, Please select the date"
    Else
        ' Append values

    DoCmd.OpenQuery "003a truncate table"

    'conn.Open = "ODBC;DRIVER=SQL Server;SERVER=" & strPath & ";DATABASE=009;
    '       UID=GM_SA;PWD=gmsa;Trusted_Connection=No;"

    'On Error Resume Next

 St002 = "Insert Into [Tabl B] ([Tabl B].[ColA]" & _
 "Select [Tabl A].[Col A] from [tabl A].[Col A] where [Tabl A].[Col z]='" & strDate & "'"

 strCon = "ODBC;DRIVER=SQL Server;SERVER=" & strPath & ";DATABASE=DBName;UID=UserName;" _
    & "PWD=Password;Trusted_Connection=No"
    Set wksp = DBEngine(0)
    Set dabs = wksp.opendatabase("", False, False, strCon)
    dabs.Execute St002, dbSQLpassThrough

    End If
    End Sub

在确保有对Microsoft ActiveX Data Objects 2.8库的引用后,请尝试以下操作

Dim adoConn As ADODB.Connection
...
St002 = "Insert Into [Tabl B] ([ColA]) Select [Tabl A].[Col A] from [tabl A].[Col A] where [Tabl A].[Col z]='" & FORMAT(strDate,"yyyy-mm-dd") & "'"
strCon = "ODBC;DRIVER=SQL Server;SERVER=" & strPath  & ";DATABASE=DBName;UID=UserName;PWD=Password;Trusted_Connection=No"
adoConn.Open(strCon)
adoConn.Execute St002
当直接向服务器传递查询时,使用ADO而不是DAO通常是一个更好的选择,它应该完全避免出现类似“运行时错误3024-找不到文件“H:\TableName.Mdb”的错误


此外,如果需要组合列(而不是绑定列)中的值,请使用
Me.DateCombo.column(1)
或类似工具。Access使用基于0的索引,因此
Me.DateCombo.Column(1)
引用第二列。

这是否适用于传递查询??当我尝试使用建议的查询时,vba无法识别数据库(我的假设),因为返回错误“运行时错误3024-找不到文件'H:\TableName.Mdb”。我不确定原因,请张贴您正在使用的代码。似乎您打算使用传递查询,但Access认为您正在尝试查询它,而不是SQL Server。是的,同意Monty Wild的说法,需要更多信息。建议您编辑上面的帖子,以包含一个有效的查询版本。然后,我们可以根据用户的输入来建议生成代码的方法。请按照建议查找所附的代码!我一直在尝试各种方法来解决这个问题,但似乎没有任何效果。我也上传了我在论坛上遇到的错误代码,但它似乎也不起作用@MontyWild:我对代码中上传延迟的解释