Перейти к содержимому

Фотография

Можно ли написать запрос в БД с использованием переменных


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 15 июня 2012 - 06:37

Доброго времени суток, уважаемые!
Возник вопрос: можно ли как-то написать универсальный запрос для проверки наличия в БД какого-либо значения.
Конкретный пример:
У меня выполнение данной функции прерывается ошибкой про неверно заданные параметры на строке "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);
}
Может, я тут что-то намудрила, а может, такое в принципе нельзя сделать и для проверки каждой таблицы придется писать запрос?
Помогите разобраться.
  • 0

#2 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 18 июня 2012 - 07:53

Коллеги, у кого-нибудь есть идеи?
Очень надо с этим вопросом разобраться.
Help me please!!! :cray:
  • 0

#3 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 23 июня 2012 - 12:42

Параметры в своём запросе вы обозначаете двоеточием - ':'. Этот формат поддерживается не всеми БД. Например, его поддерживает Oracle, а если у вас MySQL, то надо использовать знак вопроса (?). В случае SQL Server надо использовать символ at - '@'.
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;

  • 0
С уважением,
Дмитрий

#4 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 25 июня 2012 - 06:28

Да и вообще непонятно зачем вам передавать параметры в этот запрос, если можно просто сформировать нужный запрос в виде строки:

FindQry.SQL = 'Select Count(*) as counter FROM ' + tab + ' WHERE ' + field + ' = ' + variab;

В случае использования данной строки скрипт прерывается с ошибкой "Недопустимое имя столбца "undefined", только пока непонятно, что именно имеется в виду.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных