Добрый день!
Есть некоторая БД с 2 таблицами USERS (Сотрудники), MAIN (Учет рабочего времени сотрудников)
В общем суть программы заключается в том, что сотрудник отмечается rfid-картой через считыватель подключенным к COM-порту, при этом программа должна добавлять запись в БД с полями: дата прихода, время прихода, время ухода, примечание (опоздание, норма и т.д.)
Процедуру организовал через таймер, добавил условие на сравнение текущей даты с уже имеющимися датами прихода в БД сотрудника. Но условие срабатывает неправильно, запись с текущей датой должна добавиться 1 раз,а в моем случае добавляется множественное кол-во раз.
условие
Код HTML:
if prd <> DatetoStr(Date) then
Помогите разобраться, как правильно организовать этот код, чтобы условие правильно срабатывало
Код HTML:
//процедура организована через таймер
//некоторый код: получение данных с COM-порта (к COM порту подключен считыватель RFID-карт)
//переменная card (тип string) в режиме ожидания получает данные с COM-порта
if card <> '' then //если код карты имеет значение
begin
QSverka.SQL.Clear;
QSverka.Active := false;
QSverka.SQL.Text:='SELECT users.id,users.us_name,users.us_k_code,users.otd_name,main.pr_date,main.pr_t,main.uh_t,main.us_id '+
'FROM users,main '+
'WHERE (users.id=main.us_id) and (users.us_k_code=:us_k)'; //запрос на идентификацию карты сотрудника
QSverka.Parameters.ParamByname('us_k').value:=card; //код карты передаётся в запрос в виде параметра
QSverka.Open;
prd:=QSverka.FieldByName('pr_date').asstring;
if prd <> DatetoStr(Date) then //определение текущей даты у сотрудни ка в БД
begin //если её нет в БД, то
TZapis.Active:=true;
TZapis.Insert; //добавялем запись в таблицу MAIN
TZapis.FieldByName('us_id').Asstring:=QSverka.FieldByName('id').Asstring; //присваиваем id сотрудника
TZapis.FieldByName('pr_date').Asstring:=DatetoStr(Date); //присваиваеим текущую дату
TZapis.FieldByName('pr_t').Asstring:=TimetoStr(Time); //время прихода устанавливаем как текущее
TZapis.FieldByName('uh_t').Asstring:='0'; //время ухода устанавливаем в ноль
TZapis.Post; //публикуем запись
MsgPrihod.Show; //показываем на мгновение форму с текстом: ПРИХОД
Application.ProcessMessages;
Sleep(1000);
MsgPrihod.Close;
end
else
ShowMessage ('Сотрудник сегодня уже отметился, попробуйте завтра');
end;