Topic: Поиск дубликатов. Ошибка при поиске
Дабы не засорять тему в FAQ, опишу проблему тут.
Имеет скрипт
function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
s: string;
begin
result := False;
s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sField+' LIKE "' + sValue + '"');
if StrToInt(s) > 0 then result := True;
end;
procedure zapic_na_priem_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
if CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'last_name', zapic_na_priem.Last_Name.Text, zapic_na_priem.Button4.dbGeneralTableId) AND
CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'first_name', zapic_na_priem.First_Name.Text, zapic_na_priem.Button4.dbGeneralTableId) AND
CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'Patronymic', zapic_na_priem.Patronymic.Text, zapic_na_priem.Button4.dbGeneralTableId) AND
CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'Address', zapic_na_priem.Address.Text, zapic_na_priem.Button4.dbGeneralTableId) AND
CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'day', FormatDateTime('yyyy-MM-DD 00:00:00.000', zapic_na_priem.data.Date), zapic_na_priem.Button4.dbGeneralTableId) AND
CheckDublicate(zapic_na_priem.dbAction, 'zapicnapriem', 'id_price', Inttostr(zapic_na_priem.Usluga.dbItemID), zapic_na_priem.Button4.dbGeneralTableId)
then
begin
ShowMessage('Данный прием уже существует.');
Cancel := True;
end;
end;
Трабла в следующем. Если не использовать Combobox (zapic_na_priem.Usluga.dbItemID), то все работает норм, в противном случае срабатывает проверка на дубль вне зависимости от полей 'last_name', 'first_name', 'Patronymic', и 'Address', однако возможно записать на другой день.
Например. Сидорова Ивана Ивановича записываю на прием на 01.04.2015 на "лечение зуба" (id_1). Еще раз его открываю, пытаюсь записать его на "повторный прием" (id_2). Если в таблице 'zapicnapriem' присутствует хоть одна запись, где указано id_2 (вне зависимости от имени, отчества...) то выдается дубль. Может значение Combobox по другому как-то берется?
Update
Проверяю на одном человеке. Действительно, проблема с Combobox. Если в нем не выбираю значения (id_price), то позволяет записать.
Значение id_price меняются, проверял через
zapic_na_priem.Edit1.Text:=Inttostr(zapic_na_priem.Usluga.dbItemID);