Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизКак узнать номер следующей записи? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.035 c