Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Ключевре поле 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
15-1159418720
Тульский
2006-09-28 08:45
2006.10.29
Понятие NULL


2-1160752903
Merry
2006-10-13 19:21
2006.10.29
TIBTable и TDataSource


1-1158529404
Dublicator
2006-09-18 01:43
2006.10.29
Balloon Tips


4-1150313195
Rules
2006-06-14 23:26
2006.10.29
Определение запуска приложения


11-1137157074
-=Mike=-
2006-01-13 15:57
2006.10.29
Вопрос по отображению окна