Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1406636848
Minsk_Java
2014-07-29 16:27
2015.03.15
Java start


15-1406813199
Борщи
2014-07-31 17:26
2015.03.15
Помогите с формулой


2-1390985770
Novicer
2014-01-29 12:56
2015.03.15
Передача параметров для SQL-запроса


2-1391367628
kos9k
2014-02-02 23:00
2015.03.15
диапазон ip адресов


15-1406645140
RDen
2014-07-29 18:45
2015.03.15
Прошивка BIOS на ноутбуке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский