Контролировать номера записей
Вопрос вот в чём:
Имется база в accesse, обрабатывается с помощью компонентов ADO.
Пользователь должен указывать в программе номера записей в ручную. Как сделать, чтобы не было одинаковых номеров (чтобы программа сама указывала, какой можно поставить номер, а если номер уже имеется в таблице, то "лаского" сообщала об этом)???
P.S. В самой базе поле поставлено уникальным и если записывается одинаковый номер, то она грубо ругается.
Как сделать, чтобы программа перед записью проверяла все имеющиеся номера и предлагала пользователю, те которых ещё в базе нет???
За ранее уже огромнейшее СПАСИБО!!!
Вопрос вот в чём:
Имется база в accesse, обрабатывается с помощью компонентов ADO.
Пользователь должен указывать в программе номера записей в ручную. Как сделать, чтобы не было одинаковых номеров (чтобы программа сама указывала, какой можно поставить номер, а если номер уже имеется в таблице, то "лаского" сообщала об этом)???
P.S. В самой базе поле поставлено уникальным и если записывается одинаковый номер, то она грубо ругается.
Как сделать, чтобы программа перед записью проверяла все имеющиеся номера и предлагала пользователю, те которых ещё в базе нет???
За ранее уже огромнейшее СПАСИБО!!!
сделать запрос типа
Id - уникальное ключевое поле - счетчик
NumbRec - число которое вводит пользователь
Если ADOQuery1.FieldByName("Cnt").AsInteger > 0 тогда вежливоо сообщить юзеру что он не прав
Id - уникальное ключевое поле - счетчик
NumbRec - число которое вводит пользователь
Если ADOQuery1.FieldByName("Cnt").AsInteger > 0 тогда вежливоо сообщить юзеру что он не прав
Т.е. попробовать сделать запрос с помощью SQL? я так понимаю.
Для ввода этого номера я использую SpinEdit.
А если сделать чтобы программа сама вставляла свободный номер, а пользователь при этом мог его изменять под свои нужды (и тут же программа проверяет номер на свободность)???
Как это можно реализовать и можно ли???
Для ввода этого номера я использую SpinEdit.
А если сделать чтобы программа сама вставляла свободный номер, а пользователь при этом мог его изменять под свои нужды (и тут же программа проверяет номер на свободность)???
Как это можно реализовать и можно ли???
За правильность паскалевского кода не ручаюсь...
Что то типа програмного автоинкримента, средствами клиента:
max : Integer;
max := ADOQuery1.FieldByName("mx").AsInteger;
max := max+1;
SpinEdit.Text := max;
а проверять на правильность ввода пользователем, тем запросом который указан выше, заодно и уникальность значения проверится
я сделал по другому, вот код:
for i:=0 to PK1.RecordCount-1 do
begin
if Edit47.text=inttostr(PK1.FieldByName('Номер ПК').AsInteger) then
begin
ShowMessage('Данный номер: '+ SpinEdit1.Text +'занят!'+#13+'Укажите другой.');
SpinEdit1.Value:=SpinEdit1.Value+1;
end;
PK1.Next;
end;
Но твой пример тоже возьму во внимание (во ввсяком случае у него код меньше и удобней)
Ещё раз принимай благодарность ;)
я сделал по другому, вот код:
for i:=0 to PK1.RecordCount-1 do
begin
if Edit47.text=inttostr(PK1.FieldByName('Номер ПК').AsInteger) then
begin
ShowMessage('Данный номер: '+ SpinEdit1.Text +'занят!'+#13+'Укажите другой.');
SpinEdit1.Value:=SpinEdit1.Value+1;
end;
PK1.Next;
end;
Но твой пример тоже возьму во внимание (во ввсяком случае у него код меньше и удобней)
Ещё раз принимай благодарность ;)
еще в аксессе есть ф-я IDENTITY, го она настолько корявая, что может выдать совсем не то значение:
[quote=Access Help]
Чтобы найти последнее значение, использованное для столбца с автоматическим шагом, можно воспользоваться инструкцией SELECT IDENTITY. Название таблицы задать нельзя. Будет получено значение из последней обновленной таблицы, содержащей столбец с автоматическим шагом.
[/quote]
Это вообще-то стандартное поведение функции IDENTITY и верно для любой СУБД ;)
имелось ввиду, корявая в контексте данной задачи...
не коряво ее использовать в теле транзакции сразу после INSERT