|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Повторная запись в БД MS SQL
Доброго времени суток! Ребят, если не сложно, подскажите пожалуйста... По срабатыванию датчика в БД должно писаться время, все бы ничего, но 1-я проблема - почему-то записи иногда дублируются (в первой таблице). А вторая - не всегда срабатывает условие i=1, причем только в процедуре DSR, CTS отрабатывается на ура.
Код:
procedure TForm1.FormCreate(Sender: TObject); begin ComPort1.Open; i:=0; q:=0; Sleep(15000); ADOConnection1.Connected:=true; end; procedure TForm1.ComPort1DSRChange(Sender: TObject; OnOff: Boolean); begin if OnOff=true then begin Edit1.Text:='on'; Timer1.Enabled:=false; if i=1 then begin try ADOQuery1.Close; ADOQuery1.Open; ADOQuery1.Edit; ADOQuery1.FieldByName('Stop').AsDateTime:=now(); ADOQuery1.Post; except ADOConnection1.Close; end; try ADOQuery3.Close; ADOQuery3.Open; ADOQuery3.Insert; ADOQuery3.FieldByName('Time').AsDateTime:=now(); ADOQuery3.FieldByName('Shop').AsInteger:=1; ADOQuery3.FieldByName('Unit').AsInteger:=1; ADOQuery3.FieldByName('Shift').AsInteger:=1; ADOQuery3.FieldByName('Brigade').AsInteger:=1; ADOQuery3.Post; except ADOConnection1.Close; end; end; if i=0 then begin try ADOQuery3.Close; ADOQuery3.Open; ADOQuery3.Insert; ADOQuery3.FieldByName('Time').AsDateTime:=now(); ADOQuery3.FieldByName('Shop').AsInteger:=1; ADOQuery3.FieldByName('Unit').AsInteger:=1; ADOQuery3.FieldByName('Shift').AsInteger:=1; ADOQuery3.FieldByName('Brigade').AsInteger:=1; ADOQuery3.Post; except ADOConnection1.Close; end; end; end else begin Edit1.Text:='off'; Timer1.Enabled:=true; i:=0; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin try ADOQuery2.Close; ADOQuery2.Open; ADOQuery2.Insert; ADOQuery2.FieldByName('Start').AsDateTime:=now()-5/24/60; //5min- ADOQuery2.FieldByName('Shop').AsInteger:=1; ADOQuery2.FieldByName('Unit').AsInteger:=1; ADOQuery2.Post; //интервал таймера, длительность, означающая начало простоя. except ADOConnection1.Close; end; i:=1; Timer1.Enabled:=false; end; procedure TForm1.FormDestroy(Sender: TObject); begin ComPort1.Close; ADOConnection1.Close; end; procedure TForm1.ComPort1CTSChange(Sender: TObject; OnOff: Boolean); begin if OnOff=true then begin Edit2.Text:='on'; Timer2.Enabled:=false; if q=1 then begin try ADOQuery4.Close; ADOQuery4.Open; ADOQuery4.Edit; ADOQuery4.FieldByName('Stop').AsDateTime:=now(); ADOQuery4.Post; except ADOConnection1.Close; end; ADOQuery3.SQL.Add('SELECT * from Ready'); try ADOQuery3.Close; ADOQuery3.Open; ADOQuery3.Insert; ADOQuery3.FieldByName('Time').AsDateTime:=now(); ADOQuery3.FieldByName('Shop').AsInteger:=1; ADOQuery3.FieldByName('Unit').AsInteger:=2; ADOQuery3.FieldByName('Shift').AsInteger:=1; ADOQuery3.FieldByName('Brigade').AsInteger:=1; ADOQuery3.Post; except ADOConnection1.Close; end; end; if q=0 then begin try ADOQuery3.Close; ADOQuery3.Open; ADOQuery3.Insert; ADOQuery3.FieldByName('Time').AsDateTime:=now(); ADOQuery3.FieldByName('Shop').AsInteger:=1; ADOQuery3.FieldByName('Unit').AsInteger:=2; ADOQuery3.FieldByName('Shift').AsInteger:=1; ADOQuery3.FieldByName('Brigade').AsInteger:=1; ADOQuery3.Post; except ADOConnection1.Close; end; end; end else begin Edit2.Text:='off'; Timer2.Enabled:=true; q:=0; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin try ADOQuery2.Close; ADOQuery2.Open; ADOQuery2.Insert; ADOQuery2.FieldByName('Start').AsDateTime:=now()-5/24/60; //5 min-интервал ADOQuery2.FieldByName('Shop').AsInteger:=1; ADOQuery2.FieldByName('Unit').AsInteger:=2; ADOQuery2.Post; // таймера, длительность, означающая начало простоя. except ADOConnection1.Close; end; q:=1; Timer2.Enabled:=false; end; procedure TForm1.Timer3Timer(Sender: TObject); begin if TimeToStr(now) = '19:00:00' then begin if i=0 then begin try ADOQuery1.Close; ADOQuery1.Open; ADOQuery1.Edit; ADOQuery1.FieldByName('Stop').AsDateTime:=now(); ADOQuery1.Post; except ADOConnection1.Close; end; Timer1.Enabled:=true; end; if q=0 then begin try ADOQuery4.Close; ADOQuery4.Open; ADOQuery4.Edit; ADOQuery4.FieldByName('Stop').AsDateTime:=now(); ADOQuery4.Post; except ADOConnection1.Close; end; Timer1.Enabled:=true; end; end; end; end. |
#2
|
||||
|
||||
Цитата:
Цитата:
|
#3
|
|||
|
|||
Нет, прошу прощения, что не разъяснил. Запись в первую таблицу (готовые изделия) - это все, что связано с
Код:
ADOQuery3.FieldByName('Time').AsDateTime:=now(); ADOQuery3.FieldByName('Shop').AsInteger:=1; ADOQuery3.FieldByName('Unit').AsInteger:=1; ADOQuery3.FieldByName('Shift').AsInteger:=1; ADOQuery3.FieldByName('Brigade').AsInteger:=1; Все, что связано с Код:
ADOQuery1.Close; ADOQuery1.Open; ADOQuery1.Edit; ADOQuery1.FieldByName('Stop').AsDateTime:=now(); ADOQuery1.Post; |
#4
|
||||
|
||||
Давайте ка структуру таблиц в студию. И какой запрос к какой из них обращается.
Есть у меня стойкое подозрение, что для таблиц просто не созданы главные ключи. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |