![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ключевре поле DB Paradox
gvozdkoff © (2006-10-11 09:33:00)Всем привет
Такая вот проблемка
База данных по инвентаризации , например компов и оргтехники, на предприятии. В таблице есть такое поле как №_учета, ключевое т.е номер инвентаризации 7 или 9 значный (числовой). Соответственно это значение не может повторятся несолько раз, как написать обработчик, который бы выводил сообщение, что такой номер есть или что то в таком духе, и просил бы заново ввести номер.
А то без этого , иногда по ошибке вводишь уже существующее, а она выдает ошибку ужасную и все !!! закрывается не сохранившись
gvozdkoff (2006-10-11 14:38:00) [1]MsGuns
многопользовательского доступа небудет
за информацию спасибо
MsGuns (2006-10-11 13:35:00) [2]>gvozdkoff © (11.10.06 11:12) [3]
>Коррекция идет в гриде, многопользовательского доступа нет
И не будет ?
>могли бы вы подробнее рассказать о соответствующих событиях датасет, или указать на нужную информацию
TDataSet.OnPostError (EDataBaseError)+F1
В событии выдавать сообщение об ошибке.
>2 способ интересен, вот как это реализовать ?
В обработчике события TDataSet.BeforePost написать что-то вроде такого:
var
exist: boolean;
begin
exist : = false;
With TQuery.Create(nil) do
try
DataBase := <Ваш квери>.DataBase;
SQL.Text := 'Select Count (*) from <Ваша таблица> '+
'Where <имя поля ИН>='+QuotedStr(<Ваш квери>.FieldByName('<имя поля ИН>').AsString);
Open;
If Fields[0].AsInteger>0 then exist := true;
Close;
finally
Free;
end;
if exist then
begin
ShowMessage('Есть такой ИН');
Abort; // Выход без постинга
end;
end;
gvozdkoff (2006-10-11 11:16:00) [3]Desdechado
приношу извинения
gvozdkoff (2006-10-11 11:12:00) [4]Коррекция идет в гриде, многопользовательского доступа нет
MsGuns ©
могли бы вы подробнее рассказать о соответствующих событиях датасет, или указать на нужную информацию
2 способ интересен, вот как это реализовать ?
Desdechado (2006-10-11 10:55:00) [5]зачем дублить?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1160549430&n=1
MsGuns (2006-10-11 10:49:00) [6]Способов несколько. Вот навскидку 2:
1. Поле с инвентарным номером (правильное название того, что Вы называете то "№ учета", то "номером инвентаризации") можно сделать уникальным индексом и все запросы на изменение вставку (если Вы из делаете запросами - TQuery) должы выполняться в защищенных блоках (Try .. Except ..) с анализом и индикацией ошибок. Если же коррекция в "гриде", то у датасета есть соотв.события, в т.ч. по ошибке вставки или измененияю В этих событиях и сигеализировать пользователя о конфликте.
2. Перед вставкой-изменением выполнять запрос с поиском введенного пользователем ИН и, если есть, выдавать сообщение и не постить запись в базу.
Обо эти способа имеют недостатки, связанные с "глюкавостью" парадокса в режиме многопользовательского доступа.