Показать сообщение отдельно
  #15  
Старый 07.07.2013, 19:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

В общем вот вам эмулятор работы датчиков с записью их работы в БД:
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TSensor = class(TThread)
   ID: Integer;
   function ReadSensor: Boolean;
   procedure Execute; override;
  end;

  TForm3 = class(TForm)
    AppDB: TADOConnection;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    Sensors: Array of TSensor;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
Var
  i: Integer;
  Q: TAdoQuery;
begin
 if Button1.Caption = 'Start'
 then begin
      Button1.Caption := 'Finish';
      SetLength(Sensors, 0);
      Q := TAdoQuery.Create(nil);
      Q.Connection := Form3.AppDB;
      Q.SQL.Text := 'select * from Датчики';
      Q.Open;
      while not Q.Eof
      do begin
         SetLength(Sensors, Length(Sensors)+1);
         Sensors[High(Sensors)] := TSensor.Create(True);
         Sensors[High(Sensors)].ID := Q.FieldValues['Код'];
         Sensors[High(Sensors)].Resume;
         Q.Next;
         end;
      Q.Free;
      end
 else begin
      Button1.Caption := 'Start';
      for i := 0 to Length(Sensors) - 1
      do Sensors[i].Terminate;
      end;
end;

procedure TSensor.Execute;
Var
  Q: TAdoQuery;
begin
 inherited;
 while not Terminated
 do begin
    Sleep(10);
    if ReadSensor
    then begin
         Q := TAdoQuery.Create(nil);
         Q.Connection := Form3.AppDB;
         Q.SQL.Text := 'insert into Журнал (КодДатчика,Регистрация) Values(:КодДатчика,:Регистрация)';
         Q.Parameters.ParamValues['КодДатчика'] := ID;
         Q.Parameters.ParamValues['Регистрация'] := Now;
         Q.ExecSQL;
         Q.Free;
         end;
    end;
end;

function TSensor.ReadSensor: Boolean;
begin
 Result := Random(2) = 1;
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием