Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизКлючевре поле DB Paradox Найти похожие ветки
← →
gvozdkoff © (2006-10-11 09:33) [0]Всем привет
Такая вот проблемка
База данных по инвентаризации , например компов и оргтехники, на предприятии. В таблице есть такое поле как №_учета, ключевое т.е номер инвентаризации 7 или 9 значный (числовой). Соответственно это значение не может повторятся несолько раз, как написать обработчик, который бы выводил сообщение, что такой номер есть или что то в таком духе, и просил бы заново ввести номер.
А то без этого , иногда по ошибке вводишь уже существующее, а она выдает ошибку ужасную и все !!! закрывается не сохранившись
← →
MsGuns © (2006-10-11 10:49) [1]Способов несколько. Вот навскидку 2:
1. Поле с инвентарным номером (правильное название того, что Вы называете то "№ учета", то "номером инвентаризации") можно сделать уникальным индексом и все запросы на изменение вставку (если Вы из делаете запросами - TQuery) должы выполняться в защищенных блоках (Try .. Except ..) с анализом и индикацией ошибок. Если же коррекция в "гриде", то у датасета есть соотв.события, в т.ч. по ошибке вставки или измененияю В этих событиях и сигеализировать пользователя о конфликте.
2. Перед вставкой-изменением выполнять запрос с поиском введенного пользователем ИН и, если есть, выдавать сообщение и не постить запись в базу.
Обо эти способа имеют недостатки, связанные с "глюкавостью" парадокса в режиме многопользовательского доступа.
← →
Desdechado © (2006-10-11 10:55) [2]зачем дублить?
http://delphimaster.net/view/3-1160549430/
← →
gvozdkoff © (2006-10-11 11:12) [3]Коррекция идет в гриде, многопользовательского доступа нет
MsGuns ©
могли бы вы подробнее рассказать о соответствующих событиях датасет, или указать на нужную информацию
2 способ интересен, вот как это реализовать ?
← →
gvozdkoff © (2006-10-11 11:16) [4]Desdechado
приношу извинения
← →
MsGuns © (2006-10-11 13:35) [5]>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 14:38) [6]MsGuns
многопользовательского доступа небудет
за информацию спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c