Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизКак поймать момент дублирования индекса? Найти похожие ветки
← →
Janbolat © (2004-08-24 09:10) [0]У меня есть база в котором есть поле kod, я сделал это поле уникальным. Как сделать чтобы при вводе уже существующего значения выходило сообщение "Такой код уже существует"
Заранее благодарен!!!
← →
Сергей Бастрыгин © (2004-08-24 09:37) [1]сделай поиск твоего значения по этому полю, если найдешь то и выдашь сообщение "Такой код уже существует"
← →
Sergey13 © (2004-08-24 09:40) [2]Не делай поиска. 8-) Сделай перехват ошибки на Post.
← →
сергей1 (2004-08-24 09:50) [3]>Не делай поиска. 8-) Сделай перехват ошибки на Post.
событие называется onPostError, там параметр E содержит всю инфу об ошибке, для отмены действия пользуйся abort
← →
Janbolat © (2004-08-24 09:51) [4]Как сделать перехват?
← →
Sergey13 © (2004-08-24 09:54) [5]Истребителем перехватчиком. 8-)
← →
Janbolat © (2004-08-24 09:59) [6]А подробнее можно пожалуйста
← →
сергей1 (2004-08-24 10:07) [7]вот почти один в один из моей программы
procedure TForm1.ADOQuery1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if strpos(pchar(e.Message),pchar("PRIMARY"))<>nil then
begin
showmessage("Нарушение первичного ключа !");
abort;
end;
if strpos(pchar(e.Message),pchar("FOREIGN"))<>nil then
begin
showmessage("Нарушение внешнего ключа !");
abort;
end;
end;
← →
Janbolat © (2004-08-24 10:26) [8]хм.....
А сообщение-то не выходит?
Если такая запись существует она просто скрывает
← →
сергей1 (2004-08-24 10:40) [9]что куда не выходит ?
Это вариант для MSSQL, компоненты соответственно из вкладки ADO,
чем ты пользуешься ?
← →
Janbolat © (2004-08-24 10:47) [10]Я ползуюсь dbase овской таблицей, компонентами table, дбгрид
я пробовал написать вместо primary слово название своего индекса
← →
vovchik (2004-08-24 10:53) [11]Используй Query и SQL запросы и тогда у тебя и проверки и ошибки и всё что хочешь смогёшь отловить, и при вставке записей в базу данных сможешь сделать любую проверку. Вставка данных и проверка будет умещаться в 4 строчки
← →
сергей1 (2004-08-24 11:00) [12]bde что-ли ?
там-же есть компонент query, пользуйся им.
Кстати, забыл сказать, что onPostError канает только при перемещении по результирующему сету query, если надо обработать что-то типа
form1.ADOQuery1.SQL.Text:="insert into Table1 values 3, "+quotedstr("dfs")+")";
form1.ADOQuery1.ExecSQL;
надо обрабатывать так
try
form1.ADOQuery1.ExecSQL;
except on E:exception do
begin
if strpos(pchar(e.Message),pchar("PRIMARY"))<>nil then
begin
showmessage("Нарушение первичного ключа!");
end;
end;
← →
s999 (2004-08-24 11:09) [13]Ключевое слово в вопросе - dBase. Поэтому никаких ошибок первичного ключа обработать, конечно, не удастся. Правильный путь указан в [1]. Если приложение сетевое, то не забудь на время поиска блокирнуть таблицу.
← →
Janbolat © (2004-08-24 11:26) [14]А что тип СУБД (т.е. Dbase) не поддерживает?
← →
s999 (2004-08-24 11:34) [15]
> А что тип СУБД (т.е. Dbase) не поддерживает?
В Dbase в принципе нет понятия первичного или другого ключа. Вроде, только в поздних версиях Fox-а существует какая-то эмуляция на эту тему. Если индекс уникальный, то записи просто в этот индекс не попадают, попадая при этом в таблицу.
← →
Anatoly Podgoretsky © (2004-08-24 11:52) [16]s999 (24.08.04 11:34) [15]
В Dbase в принципе есть понятие первичного ключа и есть уникальные индексы двух типов.
← →
s999 (2004-08-24 12:21) [17]
> В Dbase в принципе есть понятие первичного ключа и есть
> уникальные индексы двух типов.
Dbase-совместимое семейство - понятие весьма обширное, что именно Вы имеете в виду?
← →
s999 (2004-08-24 13:02) [18]В любом случае, инициатор топика работает с BDE. В хелпе читаем:
dBASE tables only support primary indexes and true unique indexes when the table level is 7 or higher (concurrent with Visual dBASE 7).
Таким образом, еще раз повторю. В DBase-семействе, понятие первичного ключа присутствует только в НЕКОТОРЫХ конкретных реализациях.
P.S. Что-то мне подсказывает, что инициатор топика работает с DBase-форматом, отличном от DBase7.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c