Member 12799789 Ответов: 1

Как сопоставить столбец из excel и базы данных


у меня есть база данных, в которой один столбец-account no, а также есть столбец account no в листе excel. как сопоставить столбец с помощью запроса vba ?

Что я уже пробовал:

"выберите * из учетной записи, где account_no= sheet1. range("A1")"

он не работает

Suvendu Shekhar Giri

какую ошибку вы получаете?
есть какая-нибудь зацепка в деталях ошибки?

Member 12799789

вот запрос и ошибка VBA для запуска времени погрешность 3021
actitle = "выбрать account_title со счета, где account_no ='" &амп; AccountNo &ампер; "';"

1 Ответов

Рейтинг:
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
извините, вы можете отредактировать этот код ?