1 (edited by Hram 2015-04-13 10:13:08)

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);

Re: Поиск дубликатов. Ошибка при поиске

Как я понял- проблема имеется с поиском по ключевым полям. Уважаемый DriveSoft, не подскажете как можно решить данную проблему?

Re: Поиск дубликатов. Ошибка при поиске

Сложно дать точный ответ не видя проект.
Пришлите пожалуйста ваш проект на support@drive-software.com

Dmitry.

Re: Поиск дубликатов. Ошибка при поиске

Отправил на support@drive-software.com