Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

Делфиец ©   (2009-12-24 13:20:00) 

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


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


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

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

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


12   (2009-12-26 10:40:00) [2]

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


12   (2009-12-26 10:39:00) [3]

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

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


KilkennyCat   (2009-12-26 05:54:00) [4]


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

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


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


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

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


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

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

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


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


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


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


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


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


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


Anatoly Podgoretsky   (2009-12-25 21:19:00) [9]

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

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


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


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


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

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


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


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


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


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


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


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

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

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

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

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


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


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


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


Anatoly Podgoretsky   (2009-12-25 19:24:00) [14]

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


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


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


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


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


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


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


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


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


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


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


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


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

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


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


>  if Not (RecordCount = 0) then


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


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

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

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

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;


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо