Форум: "Начинающим";
Текущий архив: 2015.03.15;
Скачать: [xml.tar.bz2];
ВнизПередача параметров для 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.004 c