![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обработат исключение при вводе в DBGride
Делфиец © (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;
Пока такой метод работает без глюков и поднимающихся "крестов"