Страница 1 из 1
IBDataSet и InsertSQL
Добавлено: 20 июл 2006, 20:43
londinium
День добрый, Господа!
Имеется таблица
Код: Выделить всё
CREATE TABLE REFWORKERS (
ID INTEGER NOT NULL,
SURNAME VARCHAR(50)
);
Пытаюсь с помощью IBX вставить туда новую запись и пишу так:
Код: Выделить всё
IBDataSet2->Close();
IBDataSet2->InsertSQL->Clear();
IBDataSet2->InsertSQL->Add("insert into refworkers(id,surname) values((select gen_id(gen_refworkers_id,1)from rdb$database),:surname");
IBDataSet2->ParamByName("surname")->AsString="Мельник";//тут
IBDataSet2->Open();
в строке //тут получаю по морде "Empty SQL statement"
Модифицирую извечный русский вопрос:
--где я накрутил и как правильно вставить запись в таблицу
С уважением, Londinium
Добавлено: 20 июл 2006, 20:58
Merlin
Параметры TIBDataSet - это параметры его SelectSQL. Все остальные ...SQL про них ничо не знают и оперируют с полями SelectSQL. Которые надобно заполнить и сделать Post. При этом и сработает тот SQL, который подразумевается TIBDataSet.State. А вообще-то букварь по IBX на этом сайте имеется, kdv раз сто бесплатную прямую ссылочку давал.
Добавлено: 20 июл 2006, 21:45
kdv
Пытаюсь с помощью IBX вставить туда новую запись и пишу так:
для этого надо использовать IBQuery, а не IBDataSet.
(select gen_id(gen_refworkers_id,1) from rdb$database
вот как напишут такую ... что хоть на стенку вешай.

прямо кунсткамеру пора открывать.
и чего вам дался этот rdb$database. в
www.ibase.ru/devinfo/generator.htm человеческим же языком написано, как и что делать.
insert into refworkers(id,surname)
values(gen_id(gen_refworkers_id,1) ,:surname;
и ведь черта с два поспоришь - смотрю вот на свою статью, и вижу, что да - в запросах надо сяк, а в процедурах и триггерах - эдак. Пойду допишу статью упомянутым примером, а также подкорректирую, чтобы уж больше никто не подкопался...
Это, к слову, что приспичило gen_id в insert вызывать, хотя так обычно не делают. То есть, нет 100%-ой гарантии, что через месяц ты или другой человек в другом месте не влупит такой же insert только уже без gen_id.

Добавлено: 20 июл 2006, 22:24
londinium
и чего вам дался этот rdb$database. в
www.ibase.ru/devinfo/generator.htm человеческим же языком написано, как и что делать.
insert into refworkers(id,surname)
values(gen_id(gen_refworkers_id,1) ,:surname;
и ведь черта с два поспоришь - смотрю вот на свою статью, и вижу, что да - в запросах надо сяк, а в процедурах и триггерах - эдак. Пойду допишу статью упомянутым примером, а также подкорректирую, чтобы уж больше никто не подкопался...
Просьба дописать, а тот этот код бегает из книги в книгу.
Добавлено: 21 июл 2006, 00:03
kdv
Просьба дописать, а тот этот код бегает из книги в книгу.
позвольте. я все-таки рискну напомнить, что gen_id - это функция. И никто ее к rdb$database или тем более к select не привязывал.
И в статье про генераторы объяснено, почему запрос идет к rdb$database.
Точно так же можно написать
select gen_id(mygen) from mytable. И почему бы тогда в инсерте так же не написать?
Может быть покажусь грубым, но все-таки надо думать, а не переписывать из книжек и статей слово в слово, да еще и не из тех мест.
Примерно 80% эту самую злосчастную статью про генераторы (и остальные статьи тоже) читают по диагонали.
А в статье есть пример:
"А если новое значение генератора не требуется использовать дальше по ходу процедуры, то можно и еще проще
begin
INSERT INTO TBL VALUES (GEN_ID(X, 1), ...
...
end"
Добавлено: 21 июл 2006, 08:00
Dimitry Sibiryakov
Собственно, мы не одиноки... Я видел как ораклоиды вычисляют 2*2 через SELECT from DUAL.
Добавлено: 21 июл 2006, 10:43
londinium
День добрый!
Спасибо, что потыкали
Может быть покажусь грубым, но все-таки надо думать, а не переписывать из книжек и статей слово в слово, да еще и не из тех мест.
Я, собственно, без наездов. Этот код я видел в книжке Холлинворта и т.д. "Borland C++ Builder. Руководство разработчика".
Если не жалко, все-таки расскажите, как с помощью TIBDataSet вставить запись в таблицу.
С уважением, Londinium
Добавлено: 21 июл 2006, 11:15
kdv
Этот код я видел в книжке Холлинворта
чего нам буржуи какие-то. у нас свой сайт есть
Если не жалко, все-таки расскажите, как с помощью TIBDataSet вставить запись в таблицу.
всегда пожалуйста:
www.ibase.ru/devinfo/ibx.htm#ibdataset