Доброго времени суток, уважаемые!
Возник вопрос: можно ли как-то написать универсальный запрос для проверки наличия в БД какого-либо значения.
Конкретный пример:
У меня выполнение данной функции прерывается ошибкой про неверно заданные параметры на строке "FindQry.Open();"
function CheckExistence (table, field, variable)
{
var FindQry = ADO.CreateADOQuery();
FindQry.ConnectionString = "DSN=TestBase";// соединение с базой настроено через "Администратор ODBC"; коннект есть, другие запросы выполняются
FindQry.SQL = 'Select Count(*) as counter FROM :tab WHERE :fiel = :variab';
FindQry.Parameters.ParamByName("tab").Value = table;
FindQry.Parameters.ParamByName("fiel").Value = field;
FindQry.Parameters.ParamByName("variab").Value = variable;
FindQry.Open();
FindQry.First();
var RowCount = VarToInt(FindQry.FieldByName("counter").Value);
FindQry.Close();
Log.Message("RowCount = " + RowCount);
if (RowCount > 0)
{ Log.Error("В базе имеется указанное значение");}
else {Log.Message("В базе нет строк с указанным значением");}
}
function test ()
{
var param;
param = GenerateINN(); // функция генерит уникальный ИНН
CheckExistence("CounterAgent","INN", param);
}
Может, я тут что-то намудрила, а может, такое в принципе нельзя сделать и для проверки каждой таблицы придется писать запрос?
Помогите разобраться.
Можно ли написать запрос в БД с использованием переменных
Автор mskffo, 15 июн 2012 06:37
Сообщений в теме: 3
#1
Отправлено 15 июня 2012 - 06:37
#2
Отправлено 18 июня 2012 - 07:53
Коллеги, у кого-нибудь есть идеи?
Очень надо с этим вопросом разобраться.
Help me please!!!
Очень надо с этим вопросом разобраться.
Help me please!!!
#3
Отправлено 23 июня 2012 - 12:42
Параметры в своём запросе вы обозначаете двоеточием - ':'. Этот формат поддерживается не всеми БД. Например, его поддерживает Oracle, а если у вас MySQL, то надо использовать знак вопроса (?). В случае SQL Server надо использовать символ at - '@'.
Далее, судя по коду, параметры tab и field (в коде, кстати, неправильно написано) являются просто названиями, а не значением:
Да и вообще непонятно зачем вам передавать параметры в этот запрос, если можно просто сформировать нужный запрос в виде строки:
FindQry.SQL = 'Select Count(*) as counter FROM @tab WHERE @fiel = @variab';
Далее, судя по коду, параметры tab и field (в коде, кстати, неправильно написано) являются просто названиями, а не значением:
FindQry.SQL = 'Select Count(*) as counter FROM ' + tab + ' WHERE ' + field + ' = @variab';
Да и вообще непонятно зачем вам передавать параметры в этот запрос, если можно просто сформировать нужный запрос в виде строки:
FindQry.SQL = 'Select Count(*) as counter FROM ' + tab + ' WHERE ' + field + ' = ' + variab;
С уважением,
Дмитрий
Дмитрий
#4
Отправлено 25 июня 2012 - 06:28
В случае использования данной строки скрипт прерывается с ошибкой "Недопустимое имя столбца "undefined", только пока непонятно, что именно имеется в виду.Да и вообще непонятно зачем вам передавать параметры в этот запрос, если можно просто сформировать нужный запрос в виде строки:
FindQry.SQL = 'Select Count(*) as counter FROM ' + tab + ' WHERE ' + field + ' = ' + variab;
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных