Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Контролировать номера записей

1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
Всем здрасти!!!

Вопрос вот в чём:
Имется база в accesse, обрабатывается с помощью компонентов ADO.
Пользователь должен указывать в программе номера записей в ручную. Как сделать, чтобы не было одинаковых номеров (чтобы программа сама указывала, какой можно поставить номер, а если номер уже имеется в таблице, то "лаского" сообщала об этом)???

P.S. В самой базе поле поставлено уникальным и если записывается одинаковый номер, то она грубо ругается.

Как сделать, чтобы программа перед записью проверяла все имеющиеся номера и предлагала пользователю, те которых ещё в базе нет???

За ранее уже огромнейшее СПАСИБО!!!
1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
И ещё желательно с кодом :)
11
28 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Cool Xacker
Всем здрасти!!!

Вопрос вот в чём:
Имется база в accesse, обрабатывается с помощью компонентов ADO.
Пользователь должен указывать в программе номера записей в ручную. Как сделать, чтобы не было одинаковых номеров (чтобы программа сама указывала, какой можно поставить номер, а если номер уже имеется в таблице, то "лаского" сообщала об этом)???

P.S. В самой базе поле поставлено уникальным и если записывается одинаковый номер, то она грубо ругается.

Как сделать, чтобы программа перед записью проверяла все имеющиеся номера и предлагала пользователю, те которых ещё в базе нет???

За ранее уже огромнейшее СПАСИБО!!!



сделать запрос типа

 
Код:
SELECT COUNT(*) AS Cnt FROM TableName WHERE Id =:NumbRec

Id - уникальное ключевое поле - счетчик
NumbRec - число которое вводит пользователь
Если ADOQuery1.FieldByName("Cnt").AsInteger > 0 тогда вежливоо сообщить юзеру что он не прав
1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
Цитата: oxotnik333
сделать запрос типа
 
Код:
SELECT COUNT(*) AS Cnt FROM TableName WHERE Id =:NumbRec

Id - уникальное ключевое поле - счетчик
NumbRec - число которое вводит пользователь
Если ADOQuery1.FieldByName("Cnt").AsInteger > 0 тогда вежливоо сообщить юзеру что он не прав



Т.е. попробовать сделать запрос с помощью SQL? я так понимаю.

Для ввода этого номера я использую SpinEdit.
А если сделать чтобы программа сама вставляла свободный номер, а пользователь при этом мог его изменять под свои нужды (и тут же программа проверяет номер на свободность)???
Как это можно реализовать и можно ли???

1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
И ещё один момент, это поле не ключевое, но значения в нём должны быть уникальными
11
28 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Cool Xacker
Т.е. попробовать сделать запрос с помощью SQL? я так понимаю.

Для ввода этого номера я использую SpinEdit.
А если сделать чтобы программа сама вставляла свободный номер, а пользователь при этом мог его изменять под свои нужды (и тут же программа проверяет номер на свободность)???
Как это можно реализовать и можно ли???


За правильность паскалевского кода не ручаюсь...
Что то типа програмного автоинкримента, средствами клиента:

 
Код:
ADOQuery1.SQL.Text := "SELECT MAX(Id) AS Mx FROM TableName";
max : Integer;
max := ADOQuery1.FieldByName("mx").AsInteger;
max := max+1;
SpinEdit.Text := max;

а проверять на правильность ввода пользователем, тем запросом который указан выше, заодно и уникальность значения проверится
1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
Спасибо тебе большое!

я сделал по другому, вот код:

 
Код:
PK1.First;
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;


Но твой пример тоже возьму во внимание (во ввсяком случае у него код меньше и удобней)

Ещё раз принимай благодарность ;)
11
28 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Cool Xacker
Спасибо тебе большое!

я сделал по другому, вот код:

 
Код:
PK1.First;
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]

1.9K
28 февраля 2008 года
Cool Xacker
148 / / 06.06.2006
Всем спасибо!!! Тема закрыта.
303
29 февраля 2008 года
makbeth
1.0K / / 25.11.2004
Цитата: oxotnik333
еще в аксессе есть ф-я IDENTITY, го она настолько корявая, что может выдать совсем не то значение...


Это вообще-то стандартное поведение функции IDENTITY и верно для любой СУБД ;)

11
29 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: makbeth
Это вообще-то стандартное поведение функции IDENTITY и верно для любой СУБД ;)



имелось ввиду, корявая в контексте данной задачи...
не коряво ее использовать в теле транзакции сразу после INSERT

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог