• igel888 © (17.08.15 18:42) [0]
    С помощью:


    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. я в этом совсем новичок
  • sniknik © (18.08.15 08:16) [1]
    зачем приведение типа к 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 при не возможности вставки тоже добавляет, но команды не равнозначны по логике, и если ожидаешь вставку... ошибка это в общем, логическая)
  • igel888 © (18.08.15 09:45) [2]
    мне нужно чтобы локейт проверял на наличие дубликатов, и поэтому я использовал вариант для сравнения id двух таблиц. А вообще вставка то происходит, но не происходит проверка несколько записей на дубликат. Тут я думаю нужен цикл, но так как у меня отсутствует знания в этом, я уже часами мучаюсь, не знаю как его правильно сделать.
Есть новые Нет новых   [134427   +37][b:0][p:0.001]