1 (edited by inter1292 2016-01-27 15:35:20)

Topic: Проверка на дубликаты

Добрый вечер! Подскажите как можно сделать проверку на дубликаты? Чтобы если такая запись уже есть в БД то ее нельзя было  повторно добавить?
Добавил такой код:

function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
   s: string;
   sIdSQL: string;

   arrFields: array of string;
   arrValues: array of string;

   sWhere: string;
   i,c: integer;
begin
    result := False;
    arrFields := SplitString(sField, ';');
    arrValues := SplitString(sValue, ';');
    if Length(arrFields) <> Length(arrFields) then exit;

    sWhere := '';
    c := Length(arrFields)-1;
    for i := 0 to c do
    begin
        if arrValues[i] <> 'NULL' then
            sWhere := sWhere + arrFields[i]+' LIKE ' + arrValues[i] + ' AND '
        else sWhere := sWhere + arrFields[i]+' IS NULL AND '
    end;

    if sWhere<>'' then SetLength(sWhere, Length(sWhere)-4);

    if Action = 'NewRecord' then
    begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sWhere);
          if StrToInt(s) > 0 then result := True;
    end;

    if Action = 'ShowRecord' then
    begin
          if id <> -1 then sIdSQL := ' AND (id <> '+ IntToStr(id) +')';
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE ('+ sWhere +') ' + sIdSQL);
          if StrToInt(s) > 0 then result := True;
    end;
end;

procedure frmRegDoruchenia_Button4_OnClick (Sender: string; var Cancel: boolean);
var
   sFields, sValues: string;
begin
    sFields := 'NumberDoruchenia;DataDoruchenia';
    sValues := frmRegDoruchenia.Edit1.sqlValue+';'+frmRegDoruchenia.DateTimePicker1.sqlDate;

   if CheckDublicate(frmRegDoruchenia.dbAction, 'Doruchenia', sFields, sValues, frmRegDoruchenia.Button4.dbGeneralTableId) then
   begin
        ShowMessage('Доручення з таким номером вже зареєстровано!');
        Cancel := True;
   end;
end;

но он у меня не работает. База данных на MySQL

2 (edited by fleshkyru 2016-01-27 16:55:22)

Re: Проверка на дубликаты

Действия кнопки добавления на форме

 procedure AddFromUser_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
               if if (SQLExecute('SELECT COUNT(*) FROM user WHERE name LIKE "'+AddFromUser.Edit1.text+'"')>0)  then
      begin
      ShowMessage('Пользователь именем '+AddFromUser.Edit1.text+' уже существует! Добавление не возможно!');
      Cancel := True;
      end;
end;

Re: Проверка на дубликаты

inter1292
Приложите пожалуйста ваш проект к сообщению (zip файл  без exe и dll)

Dmitry.

Re: Проверка на дубликаты

inter1292 wrote:
DriveSoft wrote:

inter1292
Приложите пожалуйста ваш проект к сообщению (zip файл  без exe и dll)

К сожалению не смогу вам помочь, т.к. вы используете пиратскую версию программы.

Dmitry.

Re: Проверка на дубликаты

Здравствуйте, У меня программа не пиратская) Но вопрос схожен. Я добавляю запись в БД по полям формы используя кнопку с ф-ями СОХРАНИТЬ. Как мне до сохранения проверить, что запись с таким номером аукциона уже есть и ее не надо записывать. Спасибо.

Re: Проверка на дубликаты

abgroup-artur wrote:

Здравствуйте, У меня программа не пиратская) Но вопрос схожен. Я добавляю запись в БД по полям формы используя кнопку с ф-ями СОХРАНИТЬ. Как мне до сохранения проверить, что запись с таким номером аукциона уже есть и ее не надо записывать. Спасибо.

Приветствую.


Здесь найдете пример проверки на дубликат,
http://myvisualdatabase.com/forum/viewtopic.php?id=1062


если не получиться самостоятельно реализовать, приложите ваш проект, постараюсь помочь

Dmitry.

Re: Проверка на дубликаты

он довольно громоздкий и еще сыроват. Доведу до ума и обязательно выложу.