Форум: "Начинающим";
Текущий архив: 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.004 c