![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBNavigator. [D6, Win95/98]
Liavik © (2003-11-04 12:41:00)
Добрый день. Как при нажатии на кнопку навигатора, например, (nbInsert) инициировать следующий код
Var k:variant;
begin
DataModule1.Table2.Last;
k:=DataModule1.Table2IDDogovor.Value;
DataModule1.Table2.Insert;
DataModule1.Table2IDDogovor.Value:=k+1;
end;
Sandman25 (2003-11-05 18:23:00) [1]
[12] Vlad © (05.11.03 18:13)
Конечно, при наличии serial либо спец. триггеров нужно их использовать, но я посчитал, что у автора БД типа DBF.
>почему бы ему не сделать его обычным полем + добавить НЕ ключевое поле (фиктивное) - счетчик, откуда и брать новые значения.
Так у него же именно так сейчас. Или нет?
Vlad (2003-11-05 18:13:00) [2]
Объяснять не буду, потому как и такой вариант тоже не лучший, имхо.
Однозначно - на кнопку навигатора лучше это не делать.
Если уж автор так не хочет делать первичный ключ счетчиком, почему бы ему не сделать его обычным полем + добавить НЕ ключевое поле (фиктивное) - счетчик, откуда и брать новые значения.
Опять же, мое мнение, что в таких вопросах лучше использовать возможности сервера, а не выдумывать что-то самому.
Sandman25 (2003-11-05 18:00:00) [3]
[10] Vlad © (05.11.03 17:56)
Если хочешь, можешь ему объяснить, что лучше запускать select max(id) from table, а в случае Key Violation в OnUpdateError устанавливать новое значение NewValue в полученное еще раз через select max(id) from table и UpdateAction := uaRetry :)
Vlad (2003-11-05 17:56:00) [4]
> Sandman25 © (05.11.03 17:52) [9]
>
> Можно не мучиться, я уже написал решение в [1] :)
Хорошая концовка, у твоего решения :)
>Но в любом случае будет коряво
Sandman25 (2003-11-05 17:52:00) [5]
[8] Liavik © (05.11.03 17:34)
Можно не мучиться, я уже написал решение в [1] :)
Liavik (2003-11-05 17:34:00) [6]
Sandman25. Постараюсь не спрашивать, и обязательно попробую сделать сам, результат скажу поже:)
Sandman25 (2003-11-05 17:25:00) [7]
[6] Liavik © (05.11.03 17:11)
Надеюсь, потом Вы не будете спрашивать, как сделать то же самое, если запись добавляется не дбнавигатором, а нажатием стрелки вниз на последней строке дбгрида :)
Liavik (2003-11-05 17:11:00) [8]
Спасибо bon, прёт! Насколько просто!
bon (2003-11-04 16:35:00) [9]
procedure TDataForm.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
if button=nbInsert then
begin
.....
.....
.....
end;
end;
Liavik (2003-11-04 13:07:00) [10]
Проблема в том, что по условию задания, в БД Access ключевые поля должны быть не счетчиками (ведение БД Delphi6). Нужно чтобы при нажатии на добавление записи в навигаторе программно добавлялось +1 ключевое поле таблицы. При запуске кода с buttona код работает верно.Как запустить его с помощью навигатора?
Liavik (2003-11-04 12:57:00) [11]
Да -TDBNavigator.OnClick
Sandman25 (2003-11-04 12:54:00) [12]
1. BeforeInsert
DataModule1.Table2.Last;
k:=DataModule1.Table2IDDogovor.Value;
2. AfterInsert
DataModule1.Table2IDDogovor.Value:=k+1;
Но в любом случае будет коряво.
Какая СУБД?
Skier (2003-11-04 12:54:00) [13]
TDBNavigator.OnClick ?