![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка ошибок в базе данных [D6, XP]
intel © (2005-10-08 06:54:00)Помогите пожилуйста. у меня в базе данных есть 2 поля,которые не должны повторяться, в базе я сделал их клычевыми.Мне надо сделать так, чтобы при вводе повторяющихся значений программа не вылетала, а будавала сообщение.
msguns (2005-10-23 20:08:00) [1]>Anatoly Podgoretsky © (23.10.05 19:59) [24]
>Это хорошо для однопользовалького варианта и неверно для многооднопользовалького
А перечитать концовку [23] ?
Anatoly Podgoretsky (2005-10-23 19:59:00) [2]msguns © (23.10.05 18:17) [22]
Это хорошо для однопользовалького варианта и неверно для многооднопользовалького.
msguns (2005-10-23 18:21:00) [3]Блин, поправка:
Вместо result использовать переменную типа бул
В конце после with..end добавить:
if <bool-переменная> then
begin
ShowMessage('Уже есть в БД');
abort;
end;
Кстати, такой обработчик не убережет тебя от граблей в многопользовательскои режиме.
msguns (2005-10-23 18:17:00) [4]У TDataSet (деда TTable) есть события, одно из которых называется BeforeInsert. В обработчике его надо послать запрос, ищущий в таблице записи с введенными юзером ключами:
Что-то типа
result := true;
With TQuery.Create(nil) do
try
DataBase := Table1.DataBase;
SQL.Text := 'SELECT * FROM '+Table1.TableName+' WHERE ('+Table1.Fields[0].FieldName+'=:par1) AND ('+Table1.Fields[1].FieldName+'=:par2)';
ParamByName('par1').AsString=Edit1.Text; // Ключ- поле1
ParamByName('par1').AsString=Edit2.Text; // Ключ- поле2
Open;
if RecordCount=0 then result := false;
Close;
finally
Free;
end;
Хотя у тебя есть уже 2 глобальные ошибки:
1. Использование в качестве праймари нативных объектов
2. Использование TTable
intel (2005-10-23 17:08:00) [5]Удалено модератором
Примечание: Создание пустых сообщений
intel (2005-10-12 06:17:00) [6]Удалено модератором
Примечание: Создание пустых сообщений
intel (2005-10-11 06:23:00) [7]
> Не знаю кто, но использовать InsertRecord как то не кошерно.
я просто при добавлении записей в БД не хотел мучиться с BDEditами
Anatoly Podgoretsky (2005-10-10 19:29:00) [8]Не знаю кто, но использовать InsertRecord как то не кошерно. А обрабатывать все равно в try except
icWasya (2005-10-10 18:21:00) [9]ну если по синтаксису то
try
FORM2.Table1.InsertRecord([Edit8.text,
Edit9.text,
a,//Edit7.text,
form2.ComboBox1.text,
form2.ComboBox2.text,// Edit11.text,
Edit2.text,
form2.ComboBox3.text,
Edit3.text,
Edit4.text,
form2.ComboBox4.text,//Edit13.text,
Edit5.text,
form2.Memo1.Lines,
form2.ComboBox3.text,
b]);
except on E:EDatabaseError do
showmessage('bla bla bla')
end;
intel (2005-10-10 18:08:00) [10]а причем тут Фаронов и Архангельский?
Объясните мне пожалуйста как мне проверить наличие ошибки.
msguns (2005-10-10 17:41:00) [11]>syte_ser78 © (10.10.05 17:05) [14]
>Только не нужно говорить что в этом виноват Архангельский
Я думаю, что, возможно, Фаронов. Именно у него во всех примерах нет ни одной проверки на корректность данных в эдитах !
Кроме того, нет даже упоминания о предваряющем поиске в таблице записей с добавляемыми ключами (индексами). Видимо, подразумевается, что Ttable (компонент, которому посвящено больше всего места в книге по работе с БД в Дельфи) сам все сделает как надо ;))
syte_ser78 (2005-10-10 17:05:00) [12]Только не нужно говорить что в этом виноват Архангельский
intel (2005-10-10 06:23:00) [13]я написал вот так, но что у меня не правильно?
try
FORM2.Table1.InsertRecord([Edit8.text,
Edit9.text,
a,//Edit7.text,
form2.ComboBox1.text,
form2.ComboBox2.text,// Edit11.text,
Edit2.text,
form2.ComboBox3.text,
Edit3.text,
Edit4.text,
form2.ComboBox4.text,//Edit13.text,
Edit5.text,
form2.Memo1.Lines,
form2.ComboBox3.text,
b]);
except EDatabaseError do
showmessage('bla bla bla')
Германн (2005-10-10 02:47:00) [14]Ты всё сделал правильно.
Только не сказал, какой движок баз данных ты используешь :(
Имхо, это - Парадокс.
Тогда смотри [8]
intel (2005-10-09 20:38:00) [15]я в базе через DataBase Desktop поставил 2 звездочки около нужных строк в поле 'key'
Fay (2005-10-09 20:09:00) [16]2 Anatoly Podgoretsky © (09.10.05 19:21) [9]
Дык, по всему выходит, что автор уже позаботился о создании такого крюча, презрев тот очевидный факт, что "Это невозможно"
Anatoly Podgoretsky (2005-10-09 19:21:00) [17]Fay © (09.10.05 19:20) [7]
А я по твоему про что?
Anatoly Podgoretsky (2005-10-09 19:20:00) [18]В блоке try except
Fay (2005-10-09 19:20:00) [19]2 Anatoly Podgoretsky © (09.10.05 13:34) [5]
Мне почему-то кажется, что речь идёт о естественном ключе из двух полей...
P.S.
...об ОДНОМ 8)
intel (2005-10-09 19:17:00) [20]я сделал один первичный ключ, как теперь мне проверять его правильность?