1

私は現在、四半期の特定の日付を参照する 2 つのコンボ ボックスを持つユーザー インターフェイス (フォーム) を Access に持っています。フォーム値は、SQL SERVER 2008 からのパススルー クエリからクエリされます。

where 条件でフォームの値を使用するパススルー クエリを作成する方法はありますか。

例: INSERT INTO TBL.ABC SELECT * FROM TBL.DEF where [Date]=Formvalue

すべての調査の後、Stackoverflow に投稿されたいくつかの質問を調べましたが、答えが見つかりませんでした。これも可能ですか??

これを行う主な目的は、「FormValue」の形式としての入力に基づいてデータを 2 つの異なるテーブルに分離し、日付に基づいて異なる操作を実行することです。

さらに情報が必要な場合はお知らせください。どんな助けでも大歓迎です!!

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

コードで参照しているすべてのテーブルは、リンクされたテーブルです。フォームの1つで提案されているように、以下の形式のコードを使用してみましたが、常にポップアップするのと同じエラーです:

    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
4

1 に答える 1

1

への参照があることを確認した後、次のことを試してください。Microsoft ActiveX Data Objects 2.8 Library

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

クエリをサーバーに直接渡す場合、DAO の代わりに ADO を使用する方がよい場合が多く、「RUNTIME ERROR 3024 - Could not find file 'H:\TableName.Mdb」のようなエラーの可能性を完全に回避する必要があります。

また、バインドされた列以外のコンボ列からの値が必要な場合は、Me.DateCombo.Column(1)または類似のものを使用します。Access は 0 から始まるインデックスを使用するためMe.DateCombo.Column(1)、2 番目の列を参照します。

于 2014-03-18T01:31:35.833 に答える