-
С помощью:
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. я в этом совсем новичок
-
зачем приведение типа к 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 при не возможности вставки тоже добавляет, но команды не равнозначны по логике, и если ожидаешь вставку... ошибка это в общем, логическая)
-
мне нужно чтобы локейт проверял на наличие дубликатов, и поэтому я использовал вариант для сравнения id двух таблиц. А вообще вставка то происходит, но не происходит проверка несколько записей на дубликат. Тут я думаю нужен цикл, но так как у меня отсутствует знания в этом, я уже часами мучаюсь, не знаю как его правильно сделать.
|