Не видит параметров SQL запроса

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
DevilDevil
Сообщения: 1
Зарегистрирован: 17 апр 2006, 01:57

Не видит параметров SQL запроса

Сообщение DevilDevil » 17 апр 2006, 02:01

Необходимо вставить новую запись. Заполняю InsertSQL:

INSERT INTO Licenses (Company, MachineID, History)
VALUES (:Company, 1234567, :History)

Проблема с параметрами. Т.е. я создаю и настраиваю параметры Company, MachineID, ...

Однако эти параметры не заносятся в таблицу, заносятся только явно указанные. В этом примере - MachineID. Делаю так:

with Query do begin
//Prepare;
ParamByName('Company').AsString := Company;
//ParamByName('MachineID').AsInteger := MachineID;
ParamByName('History').Assign(History);
Insert;
Post;
Close;
ExecSQL;// обновляю данные в гриде
end;

Почему?

P.S. Я использую компоненты IB Objects

Dmitry Beloshistov
Сообщения: 41
Зарегистрирован: 27 окт 2004, 11:06

Re: Не видит параметров SQL запроса

Сообщение Dmitry Beloshistov » 17 апр 2006, 10:38

DevilDevil писал(а):Необходимо вставить новую запись. Заполняю InsertSQL:

INSERT INTO Licenses (Company, MachineID, History)
VALUES (:Company, 1234567, :History)

Проблема с параметрами. Т.е. я создаю и настраиваю параметры Company, MachineID, ...

[skip]

P.S. Я использую компоненты IB Objects
Проблема в неправильном использовании IBQuery. InsertSQL предназначен для работы с наборами данных, полученных из сложных запросов (обращений к нескольким таблицам). Достаточно заполнить (сгенерировать) правильно InsertSQL - остальное IBO сделает сам. Нет необходимости в прямом вызове InsertSQL. Если хочешь делать вставку сам - запускай новую транзакцию, заполняй параметры для отдельной Query и выполняй ее. После этого передергиваешь основную Query и все.
Передернуть можно так:

Код: Выделить всё

 // заносим изменения в отдельной транзакции
 UpdateTransaction.StartTransaction;
 MyUpdateQuery.Prepare;
 MyUpdateQuery.ParamValues['MyParam']:=12345;
 MyUpdateQuery.Execute;
 MyUpdateQuery.Close;
 UpdateTransation.Commit;
 // передергиваем для отображения изменений
 MainTransaction.Refresh(True);
 MainQuery.Refresh;

Ответить