Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Исключение пропусков в колонке таблицы MySQL (http://forum.oszone.net/showthread.php?t=308431)

Satir4ik 25-11-2015 20:37 2578867

Исключение пропусков в колонке таблицы MySQL
 
Здравствуйте! У меня есть простое приложение для хранения заказов на предприятии. Сделано на делфи с использованием ADO. Состоит из 4 форм: 1 - основная, 2 - добавить запись, 3 - редактировать запись, 4 - подтверждение удаления записи. Работать должно с 1-4 пользователями. Решил не разделять по пользователях, а сделать доступ из под 1 пользователя MySQL. Суть вопроса - когда пользователи (2 или 3) одновременно хотят добавить запись приложение для каждого при нажатии на кнопку создает запись в которую потом удаляет и заменяет по нажатию кнопки добавления уже на другой форме, но в случае когда один или несколько пользователей отменяют добавление записи в нумерации заказов получается пропуск по цифрах. Вопрос - как сделать, чтобы приложение само узнавало максимальное значение в колонке БД и добавляло к нему 1?

Как я вижу решение проблемы. При переходе на вторую форму (клик по bitbtn) приложение делает
Код:

Form1.ADOQuery1.Last;
x:=Form1.ADOQuery1.FieldValues['nomer']; //x:integer
Edit1.Text:=IntToStr(x);

после чего когда пользователь ввёл нужные данные, кроме номера заказа соответственно, нажимает на кнопку добавления. Затем приложение должно делать что-то подобное
Код:

Form1.ADOQuery1.Prior;
y:=Form1.ADOQuery1.FieldValues['nomer']; //y:integer
Form1.ADOQuery1.Last;
//далее делает проверку значений
if x<>y then begin
Form1.ADOQuery1.Delete;
Form1.ADOQuery1.Insert;
Form1.ADOQuery1.FieldByName('nomer').AsInteger:=y;
//добавление значений всех полей
Form1.ADOQuery1.Post;
end else begin
Form1.ADOQuery1.Delete;
Form1.ADOQuery1.Insert;
Form1.ADOQuery1.FieldByName('nomer').AsInteger:=x;
//добавление значений всех полей
Form1.ADOQuery1.Post;
end;

Но почему-то так не получается. Возможно, нужно добавить что-то типа обновления ADOQuery, для получения последнего состояния данных в таблице? Подскажите как прописать это правильно?


Время: 06:37.

Время: 06:37.
© OSzone.net 2001-