Ссылка на столбец в SQL-запросе VBA - PullRequest
0 голосов
/ 25 октября 2019

У меня есть таблица Excel, для которой я пытаюсь выполнить SQL-запросы. Я получаю «значение не указано для одного или нескольких обязательных параметров», поэтому я считаю, что это проблема с моим запросом. Я могу сделать запрос наподобие «SELECT * FROM [Employee $ A2: A4]», но когда я ссылаюсь на определенный столбец, используя имя (например, имя, заголовок ... и т. Д., Или даже используя общую ссылку на столбец, например F1), яget "Не задано значение для одного или нескольких обязательных параметров."

Вот мой код:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT Employee FROM [Employee$] AS e WHERE e.Skill_Title = " & """" & skillTitle & """" & " AND e.Branch = " & """" & branchTitle & """" & " AND e.Skill_Prof = 5"

rs.Open strSQL, cn
MsgBox (rs.GetString)

Есть идеи, что может происходить?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Попробуйте применить следующий пример.

Скажите, если проблема не устранена, и используемые вами данные.

У меня есть это на листе сотрудника:

enter image description here

Создан подпроцесс «MyQuery» следующим образом (как вы можете видеть, это копия вашего кода, с небольшими отличиями):

Sub MyQuery(ByVal skillTitle As String, _
            ByVal branchTitle As String, _
            ByVal skillProf As Integer)

    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset

    strFile = ThisWorkbook.FullName

    strCon = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strFile & ";" & _
        "Extended Properties=""Excel 12.0;" & _
        "HDR=Yes;" & _
        "IMEX=1"";"

    Set Cn = CreateObject("ADODB.Connection")
    Set Rs = CreateObject("ADODB.Recordset")

    Cn.Open strCon

    strSQL = _
        "SELECT Employee " & _
        "FROM [Employee$] AS e " & _
        "WHERE e.Skill_Title = '" & skillTitle & "' AND " & _
               "e.Branch = '" & branchTitle & "' AND " & _
               "e.Skill_Prof = " & CStr(skillProf)

    Rs.Open strSQL, Cn

    MsgBox (Rs.GetString)

    'Do not forget closing your connection'
    Rs.Close
    Cn.Close

End Sub

Сделанобыстрый тест:

Sub test()
    'Try running this'
    Call MyQuery("FOUR", "Y", 5)

End Sub

Результат:

enter image description here

0 голосов
/ 25 октября 2019

Вы назвали столбцы? Из вашего примера кода я не был уверен, назвали ли вы столбцы или предполагали, что заголовка столбца будет достаточно для ссылки. «Именованный» столбец отличается от использования заголовка столбца. Чтобы получить доступ к столбцу по имени, попробуйте сначала присвоить имя столбцу.

От: Как дать имя столбцам в Excel

  • Нажмите на букву столбца, который вы хотите изменить, а затем нажмите «Формулы»вкладка.
  • Нажмите «Определить имя» в группе «Определенные имена» на ленте, чтобы открыть окно «Новое имя».
  • Введите новое имя столбца в текстовом поле «Имя».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...