![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по Locate
igel888 © (2015-08-17 18:42:00)С помощью:
if ADOQuery1.Locate('client_id', Variant(ADOQuery2.FieldbyName('c_id').AsInteger), [loCaseInsensitive]) Then
Showmessage('Дубликат')
else
begin
ADOQuery1.insert;
ADOQuery1.FieldByName('client').AsString:=ADOQuery2.FieldByName('client');
ADOQuery1.Post;
end;
У меня происходит сначала проверка записи на дубликат, потом вставка записи.
Все работает, только проблема если я выбераю не одну а несколько записей, вставка все равно происходит не смотря на то что в некоторых из выбранных записей дубликат присутствует. Как это исправить, пожалуйста помогите очень надо (если можно без sql запроса)
P.S. я в этом совсем новичок
igel888 (2015-08-18 09:45:00) [1]мне нужно чтобы локейт проверял на наличие дубликатов, и поэтому я использовал вариант для сравнения id двух таблиц. А вообще вставка то происходит, но не происходит проверка несколько записей на дубликат. Тут я думаю нужен цикл, но так как у меня отсутствует знания в этом, я уже часами мучаюсь, не знаю как его правильно сделать.
sniknik (2015-08-18 08:16:00) [2]зачем приведение типа к Variant? и параметр нечуствительности к регистру для числа лишний... просто
Locate('client_id', ADOQuery2.FieldbyName('c_id').AsInteger, loCaseInsensitive)
+ раз проверяешь то полю то почему игнорируешь его при добавлении?
FieldByName('client_id').AsInteger:= FieldByName('c_id').AsInteger;
> Все работает
не может быть, тут явная ошибка, несовпадение типа -
ADOQuery1.FieldByName('client').AsString:=ADOQuery2.FieldByName('client');
p.s. не используй ADOQuery, используй ADODataSet. + insert в ADO не работает... в основном, есть исключение, но и оно такое, что лучше избавляться. работает Append (insert при не возможности вставки тоже добавляет, но команды не равнозначны по логике, и если ожидаешь вставку... ошибка это в общем, логическая)