Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать номер следующей записи? [D6, IB7.1]


Страницы:   1 2

GIL ©   (2004-04-28 15:11:00) 

Есть запрос:
'insert into contacts (Id,Fio,Dolzhnost,Phones,E_mails) values(GEN_ID(GEN_CONTACTS_ID,1),'''+FIO.Text+''','''+Dolzhnost.Text+''',:Phones,:E_mails)');
можно ли как-нибудь узнать id'шник вновь добавляемой записи, или может можно вызвать gen_id отдельно и получить у него сгенерированный id'шник следующей записи?


Mim1   (2004-04-28 16:25:00) [1]

Вот например

procedure TFrameFirm.DocFrame1tbSaveAsClick(Sender: TObject);
var newid:integer;
begin
 try
   with TIBQuery.Create(nil) do
     try
       Database := DM.IBDatabase;
       Transaction := IBTransaction1;
       Transaction.StartTransaction;
       try
         sql.Text := 'SELECT GEN_ID(gfirm, 1) as ID FROM RDB$DATABASE';
         Open;
         newid := FieldByName('ID').AsInteger;
         Close;

         with SQL do
           begin
             Clear;
             add('insert into firm (ID,NAME,INN)');
             add('values (');
             add(':ID,');
             add(':NAME,');
             add(':INN');
             add(');');
           end;
         Params.ParamByName('id').AsInteger := newid;
         Params.ParamByName('name').AsString := LabeledEdit1.Text;
         Params.ParamByName('inn').AsString := LabeledEdit2.Text;
         ExecSQL;
         Transaction.Commit;
       except
         Transaction.Rollback;
         raise;
       end;
       DocFrame1.DocID := newid;
       DocFrame1.tbRefresh.Click;
     finally
       free;
     end;
   DocFrame1.DocStatus := dsSaved;
   DocFrame1.Modyfyd := false;
 except
   DocFrame1.tbNew.Click;
   raise;
 end;
end;


Соловьев   (2004-04-28 15:49:00) [2]


> GIL ©   (28.04.04 15:41) [17]

получаешь через IBQuery.
IBSQL - не возвращает набор данных


Vlad   (2004-04-28 15:48:00) [3]


> GIL ©   (28.04.04 15:45) [19]

А Help открыть ?


GIL   (2004-04-28 15:45:00) [4]

Vlad ©, а с IBSQL получится или как? твоим способом?


Vlad   (2004-04-28 15:42:00) [5]


> GIL ©   (28.04.04 15:40) [16]
> сорри, но все равно, как мне потом узнать что он сгенерил?

Прочитать значение поля в датасете.
Или не знаешь как это делается ?


GIL   (2004-04-28 15:41:00) [6]

и потом у меня там несколько полей нуждается в генераторах


GIL   (2004-04-28 15:40:00) [7]

сорри, но все равно, как мне потом узнать что он сгенерил?


Соловьев   (2004-04-28 15:38:00) [8]


> дело в том, что у меня все запросы через IBSQL

IBDataSet !!!


Vlad   (2004-04-28 15:37:00) [9]


> GIL ©   (28.04.04 15:34) [10]


> а как после этого работать с IBQ1?
> надо что-нибудь обнулять?

Ну если хочешь, обнули что нибудь.... Только такое, не очень важное


GIL   (2004-04-28 15:37:00) [10]

дело в том, что у меня все запросы через IBSQL, а во всех IBQ, сложные запросы, и при попытке занести в их свойство что-нибудь дельфя очень долго и упорно ругается


GIL   (2004-04-28 15:35:00) [11]

и еще, а с IBSQL так получится?


Соловьев   (2004-04-28 15:35:00) [12]


> Соловьев - не пойдет слишком много кода дописывать,

ни одной строчки :)


GIL   (2004-04-28 15:34:00) [13]

а как после этого работать с IBQ1?
надо что-нибудь обнулять? или делать что-нибудь подобное, чтобы после этого вставлять запросы? А так, как предлагает Соловьев - не пойдет слишком много кода дописывать, а на обычный IBQ с запросом селекта из многих таблиц он вообще не полезет


Vlad   (2004-04-28 15:31:00) [14]

Или воспользуйся советом Соловьев ©   (28.04.04 15:23) [6]
или так:
IBQ1.SQL.Text:='select GEN_ID(xxx,1) from rdb$database';
IBQ1.Open;
x:=IBQ1.Fields[0].AsInteger


GIL   (2004-04-28 15:28:00) [15]

мне нужно, чтобы у меня в переменную х пеместился айдишник добавляемой записи, запрос можно перестроить, если айдишник получать до добавления записи, я почему все это спрашиваю - после этого идет добавление в родительскую таблицу, и чтобы не использовать локате, лучше сразу узнать айдишник


GIL   (2004-04-28 15:25:00) [16]

т.е.  -
IBQ1.SQL.Add('GEN_ID(xxx,1)');
IBQ1.ExecQuery;
---
так?
а как посмотреть, что он вернул?


Соловьев   (2004-04-28 15:23:00) [17]

TIBCustomDataSet.GeneratorField


Кщд   (2004-04-28 15:23:00) [18]

GIL ©   (28.04.04 15:20) [3]
чем смущает запрос?


Vlad   (2004-04-28 15:22:00) [19]


> GIL ©   (28.04.04 15:20) [3]


> ну допустим я вызвал ген_ид(ччч,0)

Вот этого делать не стоит, иначе можешь напороться на неприятности.
Получать номер следующей записи следует gen_id(generator,1) или больше еденицы.
На клиенте можно это сделать с помощью SQL запроса (IBQuery например)


GIL   (2004-04-28 15:20:00) [20]

не, ну допустим я вызвал ген_ид(ччч,0) соответственно следующий номер не теряется, но я не знаю как вызвать ген_ид вне запроса


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо