![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать номер следующей записи? [D6, IB7.1]
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) соответственно следующий номер не теряется, но я не знаю как вызвать ген_ид вне запроса