Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1094321582
Чайник
2004-09-04 22:13
2004.09.19
TPopupMenu - цвет, фонт т.д


4-1091568359
Ded Moroz
2004-08-04 01:25
2004.09.19
Режим заставки в NT


6-1089545483
AlexeyM
2004-07-11 15:31
2004.09.19
как сформировать и послать сообщение к PHP на сайте


3-1092924198
surkis
2004-08-19 18:03
2004.09.19
Дата в SQL


4-1091483639
CAMCOH
2004-08-03 01:53
2004.09.19
Timer в Service Application





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский