![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать аналог автоинкремнтоного поля в dbf [D6, dBase, FoxPro]
Term © (2003-10-16 12:38:00)
Как сделать аналог автоинкремнтоного поля в dbf
Stas (2003-10-16 16:08:00) [1]
Делаешь еще одну таблицу, в которой есть одно поле и будет всего одна запись-значение Автоинкремента.
На событие OnInsert считываешь оттуда значение, добавляешь 1 записываешь в свою таблицу и в ту где хранится это значение.
Владислав (2003-10-16 15:18:00) [2]
Где то читал пример такой. Создается таблица с одним полем и с одной записью (как раз счетчик). Чтобы получить его значение, блокируется таблица, берется значение счетчика, а потом в таблице инкрементируется, дальше разблокируется. (Блокировка необходима для многопользовательской системы).
Anatoly Podgoretsky (2003-10-16 13:47:00) [3]
dBase VII есть автоинкриментные поля
Sandman25 (2003-10-16 13:45:00) [4]
procedure TdmTables.qZakazUpdateError(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
if (UpdateKind = ukInsert) and (Pos("Key violation", E.message) > 0) then
begin
qZakazId.NewValue := GetNewZakazId; // вызов функции для нахождения следующего;
UpdateAction := uaRetry;
end;
end;
function TdmTables.GetNewZakazId: integer;
begin
with qGetNewZakazId do
try
// SQL.Text = select max(id) from zakaz
Open;
Result := Fields[0].AsInteger + 1;
finally
Close;
end;
end;
Term (2003-10-16 13:26:00) [5]
ну ктонить.... посоветуйте как лучше отранизовать
а вот такой вариант
SELECT MAX(id) FROM Table
и потом полученное значение увеличивать на единицу и вставлять в поле, или это всё как то можно сделать по человечески, мне чтото другое в голову не приходит, посоветуйте......
Term (2003-10-16 12:52:00) [6]
a использование GUID, можете дать примерчик
grusty (2003-10-16 12:44:00) [7]
В DBF, наверное, никак. Но можно создать числовое поле и по единице прибавлять при добавлении записи...