1

VBAを使用してSQLクエリを使用する必要があります。クエリの入力値は、Excel シートの列からのものです。列にあるすべての値を取得する必要があり、クエリへの入力として sqlserver に渡す必要があります。しかし、私は答えを得ることができませんでした。エラーとしてタイプの不一致が発生しています。誰でも私を助けることができますか?前もって感謝します

たとえば、J列にはJ1 = 25、j2 = 26、....などがあります

stSQL = "SELECT * FROM prod..status where state in"      

stSQL = stSQL & wsSheet.Range("J:J").Value

私の完全なコードは以下です

Sub Add_Results_Of_ADO_Recordset()

     'This was set up using Microsoft ActiveX Data Components version 2.8

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim stSQL As Variant
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    Dim rnStart As Range


    Const stADO As String = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
    "Persist Security Info=False;" & _
    "Initial Catalog=prod;" & _
    "Data Source=777777777V009D\YTR_MAIN4_T"
     'where BI is SQL Database & AURDWDEV01 is SQL Server

    Set wbBook = ActiveWorkbook
    Set wsSheet = wbBook.Worksheets("sheet1")

    With wsSheet
        Set rnStart = .Range("A2")
    End With


     ' My SQL Query       



    stSQL = "SELECT  * FROM prod..status where state in"



stSQL = stSQL + wsSheet.Range("J:J").Value


    Set cnt = New ADODB.Connection

    With cnt
        .CursorLocation = adUseClient
        .Open stADO
        .CommandTimeout = 0
        Set rst = .Execute(stSQL)
    End With

     'Here we add the Recordset to the sheet from A1
    rnStart.CopyFromRecordset rst

     'Cleaning up.
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing

End Sub
4

3 に答える 3

0

stSQL 変数の「in」の後にスペースはありません。したがって、セルに値「TEST」が含まれている場合、stSQL は次のようになります。

SELECT * FROM prod..status where state inTEST
于 2013-11-05T11:42:33.707 に答える
0

への変更

stSQL = stSQL + " ('" + Replace(wsSheet.range("J:J").Value, "'", "") + ")"

しかし、SQL IN ステートメントは通常、このように使用されます

state IN (25,26,28)

しかし、整数値を 1 つだけ使用している場合は、この方法を使用することをお勧めします。

stSQL = "SELECT * FROM prod..status where state = "
stSQL = Val(wsSheet.range("J:J").Value)

ただし、in ステートメントを使用する際に危険なことが 1 つあります。ステートメントの In 部分が非常に長い場合、遅くなり、さらに大きな in ステートメントを使用すると、全体がクラッシュします。

そのような状況の解決策は、in 値を使用して一時テーブルを作成し、(一時テーブル) または一時テーブルに基づく内部結合を行うことです。

于 2013-11-05T11:58:12.577 に答える