Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Внизобработка ошибок в базе данных Найти похожие ветки
← →
intel © (2005-10-08 06:54) [0]Помогите пожилуйста. у меня в базе данных есть 2 поля,которые не должны повторяться, в базе я сделал их клычевыми.Мне надо сделать так, чтобы при вводе повторяющихся значений программа не вылетала, а будавала сообщение.
← →
Anatoly Podgoretsky © (2005-10-08 13:05) [1]Это невозможно, в таблице может быть только один первичный ключ
← →
intel © (2005-10-08 17:02) [2]нет мне надо чтобы программа не добавляла эти данные в базу, а бывела сообщение(не завершая работу программы)
← →
Германн © (2005-10-09 02:40) [3]А как ты их добавляешь?
В процедуре добавления проверяй ошибки и реагируй соответственно. Сообщай юзеру об ошибке и отменяй запись в базу.
← →
intel © (2005-10-09 08:23) [4]я добавляю в базу с помощю процедуры Table1.InsertRecord
я не знаю как проверять охибки
← →
Anatoly Podgoretsky © (2005-10-09 13:34) [5]Сделай сначала первичный ключ (ОДИН)
← →
intel © (2005-10-09 19:17) [6]я сделал один первичный ключ, как теперь мне проверять его правильность?
← →
Fay © (2005-10-09 19:20) [7]2 Anatoly Podgoretsky © (09.10.05 13:34) [5]
Мне почему-то кажется, что речь идёт о естественном ключе из двух полей...
P.S.
...об ОДНОМ 8)
← →
Anatoly Podgoretsky © (2005-10-09 19:20) [8]В блоке try except
← →
Anatoly Podgoretsky © (2005-10-09 19:21) [9]Fay © (09.10.05 19:20) [7]
А я по твоему про что?
← →
Fay © (2005-10-09 20:09) [10]2 Anatoly Podgoretsky © (09.10.05 19:21) [9]
Дык, по всему выходит, что автор уже позаботился о создании такого крюча, презрев тот очевидный факт, что "Это невозможно"
← →
intel © (2005-10-09 20:38) [11]я в базе через DataBase Desktop поставил 2 звездочки около нужных строк в поле "key"
← →
Германн © (2005-10-10 02:47) [12]Ты всё сделал правильно.
Только не сказал, какой движок баз данных ты используешь :(
Имхо, это - Парадокс.
Тогда смотри [8]
← →
intel © (2005-10-10 06:23) [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")
← →
syte_ser78 © (2005-10-10 17:05) [14]Только не нужно говорить что в этом виноват Архангельский
← →
msguns © (2005-10-10 17:41) [15]>syte_ser78 © (10.10.05 17:05) [14]
>Только не нужно говорить что в этом виноват Архангельский
Я думаю, что, возможно, Фаронов. Именно у него во всех примерах нет ни одной проверки на корректность данных в эдитах !
Кроме того, нет даже упоминания о предваряющем поиске в таблице записей с добавляемыми ключами (индексами). Видимо, подразумевается, что Ttable (компонент, которому посвящено больше всего места в книге по работе с БД в Дельфи) сам все сделает как надо ;))
← →
intel © (2005-10-10 18:08) [16]а причем тут Фаронов и Архангельский?
Объясните мне пожалуйста как мне проверить наличие ошибки.
← →
icWasya © (2005-10-10 18:21) [17]ну если по синтаксису то
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;
← →
Anatoly Podgoretsky © (2005-10-10 19:29) [18]Не знаю кто, но использовать InsertRecord как то не кошерно. А обрабатывать все равно в try except
← →
intel © (2005-10-11 06:23) [19]
> Не знаю кто, но использовать InsertRecord как то не кошерно.
я просто при добавлении записей в БД не хотел мучиться с BDEditами
← →
intel © (2005-10-12 06:17) [20]Удалено модератором
Примечание: Создание пустых сообщений
← →
intel © (2005-10-23 17:08) [21]Удалено модератором
Примечание: Создание пустых сообщений
← →
msguns © (2005-10-23 18:17) [22]У 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
← →
msguns © (2005-10-23 18:21) [23]Блин, поправка:
Вместо result использовать переменную типа бул
В конце после with..end добавить:
if <bool-переменная> then
begin
ShowMessage("Уже есть в БД");
abort;
end;
Кстати, такой обработчик не убережет тебя от граблей в многопользовательскои режиме.
← →
Anatoly Podgoretsky © (2005-10-23 19:59) [24]msguns © (23.10.05 18:17) [22]
Это хорошо для однопользовалького варианта и неверно для многооднопользовалького.
← →
msguns © (2005-10-23 20:08) [25]>Anatoly Podgoretsky © (23.10.05 19:59) [24]
>Это хорошо для однопользовалького варианта и неверно для многооднопользовалького
А перечитать концовку [23] ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c