Admin |
Отправлено: 23.10.2006, 14:28 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
А где DataSet->Cancel();
по идее должно быть перед Abort();
|
|
Лена |
Отправлено: 23.10.2006, 14:38 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Что-то на сервер форума зайти сегодня трудновато.
ShowMessage появляется для всех полей в гриде если туда вводить дублированные записи. Мне хочется ограничить проверку на дублирование только для первой колонки грида, а в остальные колокни грида пусть пользователь вводит что хочет.
Отредактировано Лена — 23.10.2006, 15:42 |
|
Лена |
Отправлено: 23.10.2006, 15:23 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Вроде нашла, что надо. Свойство SelectedIndex:
CODE |
ADOQueryKey->Open();
Variant Rez = ADOQueryKey->Lookup("code", Form1->DBGrid1->Fields[0]->AsString, "code");
if(!Rez.IsNull() && Form1->DBGrid1->SelectedIndex == 0)
{
ShowMessage("Дублирование запрещено");
DataSet->Cancel();
Abort();
}
ADOQueryKey->Close();
|
И еще придумала:
CODE |
AnsiString Params = DataModule2->ClientDataSetKey->FieldByName("code")->AsString;
TADOQuery * ADOQuery1 = new TADOQuery(this);
ADOQuery1->Connection = DataModule2->ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Text = "select * from keys where code ='" + Params + "'";
ADOQuery1->Open();
ADOQuery1->First();
AnsiString Found;
for (int i = 0; i<ADOQuery1->RecordCount; i ++)
{
Found = ADOQuery1->FieldByName("code")->AsString;
if (Found == Params && Form1->DBGrid1->SelectedIndex == 0)
{
ShowMessage("Дублирование запрещено");
DataSet->Cancel();
ADOQuery1->Close();
delete ADOQuery1;
Abort();
}
ADOQuery1->Next();
}
ADOQuery1->Close();
delete ADOQuery1;
|
Первый вариант вроде лучше?
Отредактировано Лена — 23.10.2006, 17:05 |
|
Admin |
Отправлено: 23.10.2006, 16:57 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Какой лучше сами решайте.
В первом тогда уж тоже вставить
ADOQueryKey->Close(); перед Abort();
Во втором:
А зачем цикл по i если возвращаемое значение только одно ?
и тогда ADOQuery1->First(); тоже лишнее и ADOQuery1->Close();
сразу после создания
И зачем Select * если нужно только одно поле code ?
|
|
beginner |
Отправлено: 23.10.2006, 19:43 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 44
|
QUOTE (Лена @ 23.10.2006, 16:23) | Вроде нашла, что надо. Свойство SelectedIndex:
CODE |
ADOQueryKey->Open();
Variant Rez = ADOQueryKey->Lookup("code", Form1->DBGrid1->Fields[0]->AsString, "code");
if(!Rez.IsNull() && Form1->DBGrid1->SelectedIndex == 0)
{
ShowMessage("Дублирование запрещено");
DataSet->Cancel();
Abort();
}
ADOQueryKey->Close();
|
|
Если нет записей, то скорей всего
Rez.IsEmpty() == true;
Rez.IsNull() == false.
Отредактировано beginner — 23.10.2006, 20:43 |
|
Лена |
Отправлено: 24.10.2006, 09:47 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Спасибо за замечания.
Буду вносить изменения.
|
|
beginner |
Отправлено: 24.10.2006, 11:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 44
|
Может имеет смысл перенести Lookup в событие OnValidate поля code? |
|
nawok78 |
Отправлено: 12.02.2007, 10:36 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 115
|
Тоже столкнулся с проблеммой первичного ключа в криво спроектированной БД.
ухудшает ситуацию еще и то, что пока точно не знаю ск-ко программ работает с конкретной таблицей.
несколько программ, каждую ведет отдельный человек....
а то бы перекроил часть...
слов нет — одни эмоциии....
но собственно ближе к вопросу -
Есть ADOQuery к одной таблице.
вызываю метод Insert
но в AfterInsert не указываю ключевое поле (NotNull) — ну и естественно ругань и т.д.
неужто придется писать запрос к БД и вставлять туда какое-то значение? (да еще уникальное).
компоненты ADO... как-то корректно работают с Автоинкрементом?
|
|
nawok78 |
Отправлено: 12.02.2007, 10:49 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 115
|
вроде гемор прошел — откорректировал таблицу — поставил indentify=true для ключевого поля...
как задолбала такая БД! кто ее так проектировал?....
да там нередкость когда Id — строчка а потом по ней еще и ссылаются. ладно хоть не редактируют... ой блин.. да еще седня понедельник.... |
|