Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Как поймать момент дублирования индекса?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.062 c
4-1091618610
Jolik
2004-08-04 15:23
2004.09.19
Аналог KeyPressed() в Console Application...


1-1094209746
shc
2004-09-03 15:09
2004.09.19
Проблемы при работе с интерфейсами


6-1089949637
Гость778
2004-07-16 07:47
2004.09.19
Подскажите где скачать компонент TWebBrowser


1-1094119475
happyandry
2004-09-02 14:04
2004.09.19
как правильно называется компонент (индикация по часовой стрелке)


10-1039631715
frodo
2002-12-11 21:35
2004.09.19
В статье Создание CORBA-сервера для досту к данным &#xA0;Delphi4