SQL-запрос VBA (AUTOCAD) для хранения строковых значений - PullRequest
0 голосов
/ 27 апреля 2018

У меня небольшая проблема, я пытаюсь написать макрос для Autocad в VBA. Я пытаюсь прочитать определенное значение столбца, отправив собственный запрос SQL, который подключается к серверу базы данных.
Проблема в том, что моя строковая переменная descToReturn, которая будет содержать значение этого столбца, возвращает ноль. Я не могу понять, где я не прав. Так что, если кто-то может посоветовать, было бы здорово.

Вот код ниже:

Private Sub btnDuplicate_Click()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim ConnectionString As String
    Dim StrQuery As String
    Dim BOMLineToCheck As AcadBlockReference
    Dim BOMAttributes As Variant
    Dim partNoToCheck As String
    Dim i As Integer
    Dim descToReturn As String


    ConnectionString = "Provider=SQLxxxxx.1;Password=xxxx;Persist Security Info=True;User ID=xxxx;Data Source=xx\xx;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=xxx_xxx"

    Set cnn = New ADODB.Connection
    cnn.ConnectionString = ConnectionString
    cnn.Open
    'cnn.CommandTimeout = 900
    Set rst = New ADODB.Recordset
    StrQuery = "SELECT * FROM [My Table Name] WHERE [My Column]='partNoToCheck'"

    For Each BOMLineToCheck In ThisDrawing.ModelSpace
        If BOMLineToCheck.Name = "BOM3LINE_old" Then
            BOMAttributes = BOMLineToCheck.GetAttributes()
            For i = 0 To UBound(BOMAttributes)
                If BOMAttributes(i).TagString = "PART#" Then
                    partNoToCheck = BOMAttributes(i).TextString
                End If
            Next i
        End If

        rst.Open StrQuery, cnn, adOpenDynamic
        With rst
            If Not .EOF Then
                descToReturn = rst![My Coulmn]                   
            End If
        End With
        rst.Close

        MsgBox descToReturn
    Next

End Sub

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Итак, я нашел ответ, поскольку я привожу SQL в среду VBA, синтаксис был неправильным, а его странный синтаксис:

правильный синтаксис для запроса SQL:

StrQuery = "SELECT * FROM [My Table] WHERE [My Column]= '" & partNoToCheck & "'"
0 голосов
/ 27 апреля 2018

Присмотритесь к опечатке:

descToReturn = rst![My Coulmn]

Вы, вероятно, имеете в виду:

descToReturn = rst![My Column]

Видишь разницу?

...