Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Как узнать номер следующей записи?   Найти похожие ветки 

 
GIL ©   (2004-04-28 15:11) [0]

Есть запрос:
"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"шник следующей записи?


 
Vlad ©   (2004-04-28 15:13) [1]


> или может можно вызвать gen_id отдельно и получить у него
> сгенерированный id"шник следующей записи?

не "может", а точно можно.


 
Anatoly Podgoretsky ©   (2004-04-28 15:14) [2]

Не выйдет ты так сможешь получить только ИД, но не номер следующей записи, у следующей будет как минимум на единицу больше, поскольку ты этот похитил.


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

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


 
Vlad ©   (2004-04-28 15:22) [4]


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


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

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


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

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


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

TIBCustomDataSet.GeneratorField


 
GIL ©   (2004-04-28 15:25) [7]

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


 
GIL ©   (2004-04-28 15:28) [8]

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


 
Vlad ©   (2004-04-28 15:31) [9]

Или воспользуйся советом Соловьев ©   (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:34) [10]

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


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


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

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


 
GIL ©   (2004-04-28 15:35) [12]

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


 
GIL ©   (2004-04-28 15:37) [13]

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


 
Vlad ©   (2004-04-28 15:37) [14]


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


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

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


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


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

IBDataSet !!!


 
GIL ©   (2004-04-28 15:40) [16]

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


 
GIL ©   (2004-04-28 15:41) [17]

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


 
Vlad ©   (2004-04-28 15:42) [18]


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

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


 
GIL ©   (2004-04-28 15:45) [19]

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


 
Vlad ©   (2004-04-28 15:48) [20]


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

А Help открыть ?


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


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

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


 
Mim1 ©   (2004-04-28 16:25) [22]

Вот например

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;



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.045 c
14-1083087967
ИМХО
2004-04-27 21:46
2004.05.23
Выход в Инет через мобильник


3-1083290855
pulp
2004-04-30 06:07
2004.05.23
Проблема при организации MDI+MIDAS.


11-1070682903
Igit
2003-12-06 06:55
2004.05.23
Удалить PBitmap


1-1083998908
Аноним
2004-05-08 10:48
2004.05.23
Шахматное поле рекурсией


7-1080630837
AS_dm
2004-03-30 11:13
2004.05.23
работа с веб-камерой через usb