Рейтинг:
1
OriginalGriff
Вы не можете просто поместить ссылочный текст ячейки Excel в команду SQL SELECT - все, что он делает, это передает текст в SQL, и поскольку он понятия не имеет, что такое лист Excel, а тем более на какой из них вы хотите ссылаться, он вызывает синтаксическую ошибку, потому что у него нет объекта под названием "лист1".
Вместо этого вам нужно передать значение из этой ячейки (предпочтительно в виде параметризованного запроса, чтобы предотвратить проблемы с внедрением SQL) в SQL, получив его в вашем коде VBA.
Member 12799789
да я понял вот запрос и ошибка VBA для запуска времени погрешность 3021
actitle = "выбрать account_title со счета, где account_no ='" &амп; AccountNo &ампер; "';"
OriginalGriff
Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Member 12799789
вот полный код VBA
Подпрограмма Обработчика Button1_click()
Дим Конн как новый объект adodb.Подключение
Dim iRowNo как целое число
Dim запрос в виде строки
Dim ABC как строка
Dim AccountNo, сумма, код в виде строки
Дим Строк Как Целое
Dim rs как новый набор записей ADODB.Recordset
Тусклый вальс как струна
Dim codeval как логическое значение
codeval = истина
вальс = приложение.InputBox (Подсказка:= "Введите Код", Тип:=2)
Количество строк = 1
С Листами ("Лист1")
Коннектикут.Provider = " sqloledb"
- Конн.Свойства ("подсказка") = adPromptAlways
Коннектикут.Откройте "источник данных=10.10.1.137;начальный каталог=золотая жила;идентификатор пользователя=местный;пароль="
query = " выберите код из info2 "
'query = conn.Execute " select code from info"
rs. открытый запрос, conn
'Лист1.Диапазон ("E1"). CopyFromRecordset rs
ABC = rs. Fields(0)
РС.Рядом
Лист 1.Спектр (Е1) = АВС
Тусклый actitle как строка
actitle = "выбрать account_title со счета, где account_no ='" &амп; AccountNo &ампер; "';"
rs. Open actitle, conn
Dim def как строка
def = rs. Fields(0)
РС.Рядом
Лист 1.Диапазон ("G1") = def
Если не вальс = "" тогда
Дим Кус Как Строку
Кус = "выбрать количество(*) из клиенты где code = '" &амп; вальс &ампер; "'; "
РС.Откройте кус, штат Коннектикут
Дим Рет Как Струна
Ret = rs. Fields(0)
Если Ret = "0", То
MsgBox " Неверный Код"
codeval = ложь
Ещё
Dim Qu2 Как Строка
Qu2 = "удалить из клиентов, где код = '" & amp; valls & "'; "
Коннектикут.Выполнение QU2 По
MsgBox " Запись Удалена......"
Конец, Если
Конец, Если
''''''' команда INSERT
Если codeval = True, то
iRowNo = 2
Делай Пока .Ячейки (iRowNo, 1) = ""
AccountNo =. Cells(iRowNo, 1)
Количество=. Cells(iRowNo, 2)
. Ячейки (iRowNo, 3) = " ОК"
. Ячейки (1, 4) = Количество Строк
. Ячейки (iRowNo, 5) = код
'. Cells(iRowNo, 6) = actitle
Дим Ку Как Струна
Qu = " вставить в dbo.Клиентов (AccountNo,сумму,код) значения ('" &амп; AccountNo &ампер; "', '" &усилителя; размер &ампер; "',(" &амп; Азбука &амп; "))"
Коннектикут.Выполнить Qu
iRowNo = iRowNo + 1
Rowcount = Rowcount + 1
Функция doevents
Петля
Конец, Если
Коннектикут.Закрывать
Set conn = ничего
Конец С
Конец Подводной Лодки
Member 12799789
в строке № 29 отображается ошибка времени выполнения 3021
OriginalGriff
А что, по-вашему, находится в учете? Учитывая, что вы ничего не делаете с ним, как только вы его объявили?
А какую часть фразы "Никогда не объединяйте строки для построения SQL ..." вы не поняли?
Member 12799789
я думаю, что в AccountNo есть номер, который находится в столбце листа excel AccountNo
извините, вы можете отредактировать этот код ?