Показать сообщение отдельно
  #1  
Старый 11.01.2012, 12:58
fen fen вне форума
Прохожий
 
Регистрация: 23.01.2008
Сообщения: 7
Репутация: 10
По умолчанию Таймер. Запрос в БД. Не срабатывает условие

Добрый день!
Есть некоторая БД с 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;
Ответить с цитированием