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