Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.03.15;
Скачать: CL | DM;

Вниз

Передача параметров для SQL-запроса   Найти похожие ветки 

 
Novicer   (2014-01-29 12:56) [0]

Здравствуйте! Как правильно передать параметры запросу?
Для чисел:ParamByName("Col1").AsInteger  :=5 или
ParamByName("Col1").Value :=5 или
ParamByName("Col1").Value :="5" ?
Для строк: ParamByName("Col2").AsString:="stroka" или
ParamByName("Col2").Value :="stroka"  
Параметры нужно задавать после описания запроса?


 
RWolf ©   (2014-01-29 13:15) [1]

AsInteger.
После (до заполнения SQL их не существует, и ParamByName вызывать бессмысленно).


 
clickmaker ©   (2014-01-29 13:21) [2]

> AsInteger  :=5 или
> ParamByName("Col1").Value

чтобы почувствовать разницу, рекомендую заглянуть в исходник VCL.
Там вообще много чего интересного можно подсмотреть


 
Novicer   (2014-01-29 15:43) [3]

Cделал хранимку в базе для внесения/изменения данных. При выполнении получаю ошибку validation error fo column COL1, value "*** null ***"
Тип данных для колонки в базе VARCHAR(200,NotNull). Выполняю так:
IBQuery1.SQL.Text := "execute procedure PROCMAINLIST(-1,:Name_param1);
IBQuery1.Params.Clear;
IBQuery1.Params.CreateParam(ftString,"Name_param1",ptInput);
IBQuery1.ParamByName("Name_param1").AsString :="значение";
Transaction.StartTransaction;
ExecSQL;{тут вылетает ошибка}
Почему дает ошибку непонятно :(


 
Novicer   (2014-01-29 15:55) [4]

Для первичного ключа использую триггер с генератором


 
Novicer   (2014-01-29 16:24) [5]

Хранимка:
begin
 if (:fin_id < 0) then
 begin
   insert into MAINLIST(COL1)
   values (:FIN_COL1);
 end
 else
 begin
   update
     MAINLIST
   set
     COL1=:FIN_COL1
   where
     id = :fin_id;
 end
end


 
Inovet ©   (2014-01-29 19:09) [6]

> [3] Novicer   (29.01.14 15:43)
> IBQuery1.Params.Clear;
> IBQuery1.Params.CreateParam(ftString,"Name_param1",ptInput);

Это лишнее
> [5] Novicer   (29.01.14 16:24)
> Хранимка:

Где заголовок?
И заодно триггер бы посмотреть.


 
Novicer   (2014-01-29 19:30) [7]

Будет работать без очистки и указания типов параметра?
Заголовок хранимки: PROCMAINLIST
Триггер(перед вставкой):
as
begin
 if (new.id is null) then
   new.id = gen_id(gen_mainlist_id,1);
end
Пока указывал явно значение в запросе,все работало. Переделал под параметры,начались ошибки... :(


 
Novicer   (2014-01-29 19:34) [8]

В базе две колонки(поля): ID и COL1, Integer(PrimaryKey,NotNull) и VarChar(200,NotNull) соответственно. Внес пару строк для примера в IbExpert. Пробую программно добавить еще пару, не выходит :(


 
clickmaker ©   (2014-01-29 19:34) [9]

а почему не IBStoredProc?


 
Novicer   (2014-01-29 19:40) [10]

Тригер создал IbExpert


 
Novicer   (2014-01-29 19:41) [11]

Должен быть обязательно IbStoredProc?


 
clickmaker ©   (2014-01-29 19:43) [12]

ну если запрос сводится к вызову хранимки, то почему бы не воспользоваться специально обученным компонентом?


 
Inovet ©   (2014-01-29 19:46) [13]

> [7] Novicer   (29.01.14 19:30)
> Заголовок хранимки: PROCMAINLIST

Я отстал от новых веяний?
Где
create procedure
?


 
Inovet ©   (2014-01-29 19:48) [14]

> [9] clickmaker ©   (29.01.14 19:34)
> а почему не IBStoredProc?

Помнится, с ним проблемы были раньше. Или я путаю что-то?


 
Novicer   (2014-01-29 19:52) [15]

>clickmaker Каким компонентом?
>Inovet Где должно быть create procedure? Проверил все созданные IbExpert-ом триггеры, код одинаковый. Для записей которые NotNull, не указаны значения по дефолту. Это обязательно?


 
Inovet ©   (2014-01-29 20:10) [16]

> [15] Novicer   (29.01.14 19:52)
> >Inovet Где должно быть create procedure? Проверил все созданные
> IbExpert-ом

Так в ИБЭксперте создавал? Тогда им же сгенерировать скрипт создания. Параметры интересно посмотреть, а то какое-то несоответсвие наблюдается.


 
Novicer   (2014-01-29 20:21) [17]

Скрипт:
SET SQL DIALECT 3;

CREATE GENERATOR GEN_BRAND_ID;

SET TERM ^ ;

CREATE OR ALTER TRIGGER BRAND_BI FOR BRAND
ACTIVE BEFORE INSERT POSITION 0
as
begin
 if (new.id is null) then
   new.id = gen_id(gen_brand_id,1);
end
^

SET TERM ; ^

Неправильный код триггера,что и приводит к ошибкам вставки записи с помощью запроса с параметрами? Какой должен быть правильный триггер? Почему IbExpert создает его неверно?


 
RWolf ©   (2014-01-29 20:47) [18]

верно создаёт.
просто ни IbStoredProc, ни IBQuery не умеют выполнять скрипты.


 
Inovet ©   (2014-01-29 20:51) [19]

> [17] Novicer   (29.01.14 20:21)
> CREATE OR ALTER TRIGGER


> [15] Novicer   (29.01.14 19:52)
> Где должно быть create procedure?


 
Inovet ©   (2014-01-29 20:52) [20]

> [7] Novicer   (29.01.14 19:30)
> PROCMAINLIST


 
Inovet ©   (2014-01-29 20:53) [21]

> [18] RWolf ©   (29.01.14 20:47)

Да не про скрипты речь. С параметрами процедуры определиться бы надо.


 
Novicer   (2014-01-29 21:22) [22]

>RWolf IBQuery использую лишь для выполнения запросов. Скрипты не трогаю :)


 
Novicer   (2014-01-29 21:25) [23]

Так я и не понял как побороть ошибку :( Если не сложно воссоздайте плиз код и базу у себя, будет работать с хранимкой? Может у меня чего с средой или базой не так? :/


 
Novicer   (2014-01-29 21:25) [24]

Для профи думаю это на пару минут работы... ;)


 
Novicer   (2014-01-29 21:29) [25]

Дельфи 2010, огнептиц 2.5 и IbExpert 2013.12.27.1 для творчества... :)


 
Novicer   (2014-01-29 23:40) [26]

Разобрался сам, напутал с IbQuery :) теперь все пашет как надо! ;)


 
Novicer   (2014-01-30 01:29) [27]

В базу Firebird фотки можно как-то добавлять или нет?


 
Inovet ©   (2014-01-30 17:59) [28]

> [27] Novicer   (30.01.14 01:29)

Можно.


 
Novicer   (2014-01-30 19:39) [29]

Класс!!!


 
Юрий Зотов ©   (2014-01-31 14:21) [30]

> Novicer   (30.01.14 01:29) [27]

Фотки хранятся в полях типа BLOB. Значит, их можно добавлять в любую БД, которая поддерживает такие поля.


 
Novicer   (2014-01-31 22:48) [31]

Спасибо Юрий!


 
Palladin ©   (2014-01-31 23:14) [32]

И на будущее, видюшки тоже как фотки.



Страницы: 1 вся ветка

Текущий архив: 2015.03.15;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.006 c
15-1406296878
SergP
2014-07-25 18:01
2015.03.15
VPN-клиент в WinXP


15-1406385976
Yell5
2014-07-26 18:46
2015.03.15
Кто-нибудь разбирается в видеокартах?


15-1406872807
JohnKorsh
2014-08-01 10:00
2015.03.15
Поиск компонента или исходников ZIP


15-1406803086
Ламот
2014-07-31 14:38
2015.03.15
Был нет бук, вин7 стартовая и желание поставить убунту...


15-1406579402
Юрий
2014-07-29 00:30
2015.03.15
С днем рождения ! 29 июля 2014 вторник