Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Вниз

Как обработат исключение при вводе в DBGride   Найти похожие ветки 

 
Делфиец   (2009-12-24 13:20) [0]

В таблице БД стоит ограничение на ввод: нелзя повторяющиеся записи, нельзя  пустые поля.. Когда в вводиш в таблицу повторяющуюся запись или пустую возникают исключения, получается что такую же запись ввести нельзя, а пустую запись оставить невозможно,  все-таки что то нужно ввести. Как  обработать эту ситуацию, что ничего не вводить а просто отменить ввод?


 
Медвежонок Пятачок ©   (2009-12-24 13:23) [1]

ескейп нажать


 
Делфиец   (2009-12-24 13:43) [2]


> Медвежонок Пятачок ©   (24.12.09 13:23) [1]
> ескейп нажать


ак обработат исключение при вводе в DBGride? Мнебы перехватить исключение, и сделать ситуацию управляемой, что бы эти кресты пегающие не выскакивали.


 
Медвежонок Пятачок ©   (2009-12-24 13:50) [3]

обработка исключений делается с помощью try/except.
но у тебя не тот случай.

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


 
Медвежонок Пятачок ©   (2009-12-24 13:53) [4]

так как вызов едит/пост идет изнутри кода грида, то тебе его не обернуть траем ексептом.

зато есть TDataSet.OnPostError


 
Anatoly Podgoretsky ©   (2009-12-24 14:13) [5]

> Делфиец  (24.12.2009 13:20:00)  [0]

Спросил бы пользователей, они бы тебе про клавишу Esc расказали.


 
Делфиец   (2009-12-24 14:35) [6]


> Anatoly Podgoretsky ©   (24.12.09 14:13) [5]
> > Делфиец  (24.12.2009 13:20:00)  [0]Спросил бы пользователей,
>  они бы тебе про клавишу Esc расказали.


Дело не в [Esc] в его использовании нет проблем, а есть проблемы в выскакивающий сообщениях с крестами - они пугают.


 
Sergey13 ©   (2009-12-24 14:44) [7]

> [6] Делфиец   (24.12.09 14:35)
> есть проблемы в выскакивающий сообщениях с крестами - они пугают.
Крест или пользователи не православные?

Может ты не понял Медвежонка, но данных в гриде нет, они есть в датасете, на который смотрит грид. У датасета есть события в которых можно проанализировать данные и/или перехватить сообщение об ошибке.


 
Медвежонок Пятачок ©   (2009-12-24 14:47) [8]

а есть проблемы в выскакивающий сообщениях с крестами - они пугают.

это проблемы дизайна приложения.
"не хочу программировать ввод, но хочу контролировать процесс ввода."

то есть если уж ты решил возложить работу по вводу на грид, то надо на него и полагаться.

они пугают.
а что они должны делать? успокаивать и веселить? типа не бойся юзер, я все исправлю?


 
Делфиец   (2009-12-24 19:48) [9]

Я поразмыслил и набросал свой метод.
Для большинства справочников в БД с одинаковыми полями и не сложными таблицами думаю подойдет.
Сделал отделное окно ввода для редактирования. Подумал о том как процесс сделать более универсальным, и вот что надумал:

- Создал небольшую структурку со всем чем нужно для ввода
- Затем эта структура заполняется в соответствующем месте и передается методу формы "ввода"

Type TFirstEdit = (TYE_ADD,TYE_EDIT);

 TFirstEditRec = Record
   TypeEdit   : TFirstEdit;  // указываю тип для ввода или редактируем поле лил воодим новое значение
   LblCaption : String[100]; // для лайбл на форме воода
   ValueID    : Integer;     // Название ключевого поля записи по которому нужно будет найти уникальную запись в таблице
   FieldID    : String[20];  // Значение ключа
   TableName  : String[20];  // Название таблицы
   DataField  : String[20];  // Название редактируемого поля
   FieldLink  : String[20];  // название поля для связи с другой таблицей (необязательное так на всякий случай)
   ValueLink  : Integer;     // значение в поля для связи с др. таблицей
   EditText   : String[255]; // сам текст который будет редактироваться

var EdRec : TFirstEditRec;


{---------- здесь показано как заполняется структура и вызывается форма для редактирования }

procedure TFrmDirectyEdit.PA_CommEditClick(Sender: TObject); // обработчик PopupBAR
begin
 FrmFirstEdit.ClearRecord;
 EdRec.TypeEdit   := TYE_EDIT;
 EdRec.LblCaption := "Редактирование записи";

 with TblDirEdit do begin

   EdRec.TableName := TableName;  
  if LowerCase(TableName) = LowerCase("SubSection") then begin
     EdRec.FieldID   := "SectionID";
     EdRec.ValueID   := FieldByName("SectionID").AsInteger;
     EdRec.DataField := "SectionName";
     EdRec.EditText  := FieldByName("SectionName").AsString;
   end;
 
  //..........
 
 end;

  // переписанный метод для открытия формы редактирования - сюда передается структура с параметрами
 FrmFirstEdit.ShowModalFirstEdit(EdRec);
 // после ввода вызвается метод, который обновляет справочник  
 UpdateTable;
end;

{------------ Обработчик кнопки Apply на форме Быстрого Ввода ---------}
procedure TFrmFirstEdit.BtnApplyClick(Sender: TObject);
var
 SqlStr: String;
begin
 
 if FirstEdit.Text = "" then begin
   exit; // если поле пустое, то выход без лишнего шума.
 end;
 
 // здесь проверяется если подобные записи, если есть, то проверяется является ли записль помеченой как удаленная
 // если запись при добавлении записи оказалась помеченной как удаленная - предлагается ее восстановить через диалог
 with DM.Query do begin
   SqlStr:="SELECT * FROM "+EdRec.TableName+" WHERE "+EdRec.DataField+" LIKE ""+FirstEdit.Text+""";
   DM.SQLExecLife(SqlStr);
   if Not (RecordCount = 0) then
     if EdRec.TypeEdit = TYE_ADD then begin
       if FieldByName("Delete").AsBoolean then begin
         if FrmMain.MessageDialogARM(MSG_DLG_RecoveryExistsRecord,
                                   MB_YESNO or MB_ICONWARNING) then
          begin
            edit;
            FieldByName("Delete").AsBoolean:=false;
            post;
          end
        else Exit;
     end else begin
       FrmMain.MessageARM(MSG_ErrExistsRecord,MB_ICONWARNING);
       Exit;
     end;
   end;
 end;
 
 // когда вводимый текст ройдет проверку, тогда или добавляется новая запись или редактируется существующая
 Case EdRec.TypeEdit of
   TYE_ADD: SqlStr:="INSERT INTO Mechanics ("+EdRec.DataField +") VALUES ("""+FirstEdit.Text+""")";

   TYE_EDIT: SqlStr := "UPDATE "+EdRec.TableName
                       +" SET "+EdRec.DataField+"="""+FirstEdit.Text+""""
                       +" WHERE "+EdRec.FieldID+"="+IntToStr(EdRec.ValueID);
 End;

 DM.SQLExec(SqlStr);

 Close;
end;


Пока такой метод работает без глюков и поднимающихся "крестов"


 
Игорь Шевченко ©   (2009-12-24 20:32) [10]


>  if Not (RecordCount = 0) then


убивать без права помилования
либо if RecordCount <> 0
либо not IsEmpty


 
Делфиец   (2009-12-24 20:41) [11]


> Игорь Шевченко ©   (24.12.09 20:32) [10]
> >  if Not (RecordCount = 0) then


О, и сразу убивать, что в там страшного было?

if (Not (RecordCount = 0)) <> (RecordCount <> 0) then ???


 
Сергей М. ©   (2009-12-24 21:23) [12]


> Делфиец   (24.12.09 20:41) [11]


Тебе ж  не просто так говорят про невозможность помилования)
Таких валенков тут на неделю по семеро ходят, и чуть ли не каждый с пеной у рта доказывает, что RecordCount есть панацея ото всех бед)


 
Делфиец   (2009-12-25 18:19) [13]


> Сергей М. ©   (24.12.09 21:23) [12]
> RecordCount


это самое простое, что в голову влетело, когда узнаю более буделать лучще


 
Делфиец   (2009-12-25 18:40) [14]


> Сергей М. ©   (24.12.09 21:23) [12]


Согласитесь, ведь и вы же были в таком же положении, когда не все знали. Неужели от рождения были гениями? Или вам все-таки кто то помогал? Коллеги по работе наверняка,
Мне не повезло мои коллеги ничем помочь мне не могут, потому как сами «ах спаси аллах!!!»   Есть SQL команда EXISTS, которая помогает выяснить существование того или иного значения, но вот как ее применить я не понимаю, да еще в данном случая тем более, если разъясните то будет гуд


 
Anatoly Podgoretsky ©   (2009-12-25 19:24) [15]

Чего и справка не помогает?


 
Делфиец   (2009-12-25 19:42) [16]


> Anatoly Podgoretsky ©   (25.12.09 19:24) [15]
> Чего и справка не помогает?


Справка чего? Справка в чем? И с чего взяли, что там обо всем написано?
Читал справки разные и примеры смотрел, так и не понял, как в моем случае применить :(


 
Плохиш ©   (2009-12-25 20:32) [17]


> Делфиец   (25.12.09 18:40) [14]
>
>
> > Сергей М. ©   (24.12.09 21:23) [12]
>
>
> Согласитесь, ведь и вы же были в таком же положении, когда
> не все знали. Неужели от рождения были гениями?

Расплакался...

> Делфиец   (25.12.09 19:42) [16]

> Читал справки разные и примеры смотрел, так и не понял,
> как в моем случае применить :(

Может профессию сменить, пока не поздно?


 
Делфиец   (2009-12-25 21:03) [18]


> Плохиш ©   (25.12.09 20:32) [17]


> Может профессию сменить, пока не поздно?


А почему я должен ее менять, другим же не мешает быть даунами и занимать соответствующие места. Я по крайней мере еще на что то способен и стремлюсь чего то там познать, а вот дамы в моем отделе, ну что с них взять? - они просто привлекательные и болше ничего, и им же не мешает быть "ПРОГРАМЫСТКАМЫ".


 
Сергей М. ©   (2009-12-25 21:06) [19]


> Делфиец   (25.12.09 18:40) [14]
> Согласитесь, ведь и вы же были в таком же положении, когда
> не все знали


Не соглашусь.
В таком положении я при всем желании быть не мог, ибо тогда ни RecordCount не было ни Интернета.

Но были книжки.


 
Anatoly Podgoretsky ©   (2009-12-25 21:19) [20]

> Делфиец  (25.12.2009 21:03:18)  [18]

Так и ты тоже можешь быть дауном и даже занимать соответствующее место.


 
Делфиец   (2009-12-25 23:19) [21]


> Anatoly Podgoretsky ©   (25.12.09 21:19) [20]
> > Делфиец  (25.12.2009 21:03:18)  [18]Так и ты тоже можешь
> быть дауном и даже занимать соответствующее место.


Согласен, но тогда я даун с плюсом.


 
Делфиец   (2009-12-25 23:24) [22]


> Сергей М. ©   (25.12.09 21:06) [19]
> > Делфиец   (25.12.09 18:40) [14]> Согласитесь, ведь и вы
> же были в таком же положении, когда > не все зналиНе соглашусь.
> В таком положении я при всем желании быть не мог, ибо тогда
> ни RecordCount не было ни Интернета.Но были книжки.


А где гарантия, что книги написаны не даунами?


 
Anatoly Podgoretsky ©   (2009-12-25 23:55) [23]

> Делфиец  (25.12.2009 23:19:21)  [21]

Про плюсы мы не договаривались.


 
Германн ©   (2009-12-26 02:20) [24]


> Таких валенков тут на неделю по семеро ходят, и чуть ли
> не каждый с пеной у рта доказывает, что RecordCount есть
> панацея ото всех бед

И будут продолжать ходить и доказывать. Но тут не столько виноваты сами валенки. Тут виноват и Борланд.


 
KilkennyCat ©   (2009-12-26 05:54) [25]


> Делфиец   (25.12.09 21:03) [18]

Хороший ответ, полностью с тобой согласен, зря только дам привлек - не стоит равнятся с ними, ибо те, которые программистки, действительно крутые, а те, которым просто дома скучно - они же все таки дамы...


 
12 ©   (2009-12-26 10:39) [26]

1
в гриде нет данных
1.0 - 1.x
небылоникогда
небудетникогда
ниразунезастрялоппцдосталитупыеюзеры
2
делай что хош И ОБРАБАТЫВАЙ ИСКЛЮЧЕНИЯ

3
грид для пользователя
Ваш пользователь различает sin от..?


 
12 ©   (2009-12-26 10:40) [27]

тогда рад
дайте их мне


 
Германн ©   (2009-12-27 02:00) [28]


> А где гарантия, что книги написаны не даунами?

Хороший вопрос.
Гарантий нет. Но есть и другая сторона медали. "Абсолютно вредных" книг нет. Но после прочтения любой книги возможно обсудить конкретные детали на примере. Приводя доводы из книги и слушая доводы собеседников.

P.S. А самая лучшая книга - это хэлп!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.005 c
15-1260807632
Kostafey
2009-12-14 19:20
2010.02.28
Шрифты в редакторе формул Word-а


15-1260999021
Юрий
2009-12-17 00:30
2010.02.28
С днем рождения ! 17 декабря 2009 четверг


1-1237789977
Riply
2009-03-23 09:32
2010.02.28
Получение EnvironmentStrings среды.


13-1124537487
jenbond
2005-08-20 15:31
2010.02.28
Передача параметра из UserControl


13-1124615958
Darklight
2005-08-21 13:19
2010.02.28
Экземпляр класса ещё не создан как проверить его на null referenc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский