Страница 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