Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2013, 17:21   #21
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

А кокой поток лучше использовать класса TThread или Indy.
Подключение делать в потоке или только считывание и запись делать в потоке?

Последний раз редактировалось Aleksandr; 21.11.2013 в 20:27.
Aleksandr вне форума Ответить с цитированием
Старый 21.11.2013, 20:37   #22
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

TThread
все делай в потоке. но блин в разных процедурах самому проще будет, парсинг в одном месте, бд в другом

кстати умора будет, если в бою будет больше 20 приборов
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 21.11.2013 в 20:52.
Slym вне форума Ответить с цитированием
Старый 21.11.2013, 22:37   #23
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Делаю два TThread. Один на считывание с весов. Другой на запись в базу.
Или лучше сделать один TThread, а считывание и запись сделать в разных процедурах?
Aleksandr вне форума Ответить с цитированием
Старый 22.11.2013, 09:18   #24
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Сделал подключение и считывание. Но у меня следующий косяк. Подключаюсь к примеру только на 1-й вкладке. Все нормально считывание идет, но если я перехожу на вторую вкладку то данные записываются на компонентах второй вкладки. Как это исправить.
Код:
 type
   TMyThread1 = class(TThread)
   private
     { Private declarations }
   protected
     procedure DoSocet;                 //подключение к сокету
     procedure DoBase;                 //создание Query
     procedure SocetText;             //получение данных
     procedure Execute; override;
   end;
var
  Form1: TForm1;
  Ed : TEdit;
  Client:TIdTCPClient ;
  ZQ:TZQuery;
 Led0 : TShape;
  z : integer;
  Edit0 : TEdit;
  Memo0: TMemo;
  edtNotes0: TRzRichEdit;
  LabelIP0, LabelPort0,LabelBaudRate0,LabelLocation0,LabelNote0,
  LabelModel0,LabelEquopment0,LabelOrganization0,LabelLinkey0,LabelList0: TLabel;

  T1   : TMyThread1;

implementation

{$R *.dfm}

 procedure TMyThread1.Execute;
 begin
 Synchronize(DoSocet);
if not Client.Connected then
       exit;
    repeat
      Synchronize(SocetText);
     until not Client.Connected;
 end;


 procedure TMyThread1.DoSocet;
 begin
 {Ñîçäàåì IdTCPClient è ïîäêëþ÷àåìñÿ}
Client:=TIdTCPClient.Create(Form1);
client.Port:= StrToInt(LabelPort0.caption);
client.Host:=LabelIP0.Caption;
try
client.Connect(500);
except
end;
end;
procedure TMyThread1.SocetText;
  var str: String;
  S1: String;
  i1,i2: Integer;
  r,m : double;
  i:integer;
  buf:string;
  v:integer;
begin
Memo0.Enabled := True;Memo0.Color := clWindow;
   Led0.Brush.Color := clBlue;
           sleep(5);
          str:='';
          str:=client.Readln();
         if str<>'' then
         begin
         Memo0.Lines.Add(str);
         buf:='';
for v:=1 to length(str) do
  if str[v] in ['0'..'9', '.', ','] then buf:=buf+str[v];
s1:=buf;
 s1:=StringReplace(s1, '.',',' , [rfReplaceAll]);
 i1:=Pos(',',s1);
  if i1>0 then begin
    i2:=PosEx(',',s1,i1+1);
    if i2>0 then s1:=Copy(s1,1,i2-1)+Copy(s1,i2+1,Length(s1)-i2);
  end;
  r:=RoundTo(StrToFloatDef(s1,0),-2);
   Edit0.Text:=Floattostr(r);
   end;
 end;

  procedure TMyThread1.DoBase;
 begin
   {Ñîçäàåì Query}
ZQ:=TZQuery.Create(Form1);
ZQ.Connection:=Form1.ZConnection1;
Form1.DataSource3.DataSet:=zq;
zq.Active:=false;
Form1.dbgrid2.DataSource:=Form1.DataSource3;
zq.SQL.Text := 'select linkey from base' +' where linkey='+LabelLinkey0.Caption;
zq.Open;
zq.Last;
end;

procedure TForm1.ListePostesChange(Sender: TObject);
begin
 z:= ListePostes.TabIndex + 1;
 Led0 := TShape(FindComponent('Led'+IntToStr(z)));
 Edit0 := TEdit(FindComponent('Edit'+IntToStr(z)));
 Memo0 := TMemo(FindComponent('Memo'+IntToStr(z)));
 edtNotes0 := TRzRichEdit(FindComponent('edtNotes'+IntToStr(z)));
 LabelIP0 := TLabel(FindComponent('LabelIP'+IntToStr(z)));
 LabelPort0 := TLabel(FindComponent('LabelPort'+IntToStr(z)));
 LabelBaudRate0 := TLabel(FindComponent('LabelBaudRate'+IntToStr(z)));
 LabelLocation0 := TLabel(FindComponent('LabelLocation'+IntToStr(z)));
 LabelNote0 := TLabel(FindComponent('LabelNote'+IntToStr(z)));
 LabelModel0 := TLabel(FindComponent('LabelModel'+IntToStr(z)));
 LabelEquopment0 := TLabel(FindComponent('LabelEquopment'+IntToStr(z)));
 LabelOrganization0 := TLabel(FindComponent('LabelOrganization'+IntToStr(z)));
 LabelLinkey0 := TLabel(FindComponent('LabelLinkey'+IntToStr(z)));
 LabelList0 := TLabel(FindComponent('LabelList'+IntToStr(z)));
 end;

procedure TForm1.Button5Click(Sender: TObject);
begin
LabelIP0.Caption := ZTable1.FieldByName('IP').AsString;
LabelPort0.Caption :=ZTable1.FieldByName('Com').AsString;
LabelBaudRate0.Caption := ZTable1.FieldByName('BaudRate').AsString;
LabelLocation0.Caption :=ZTable1.FieldByName('Location').AsString;
LabelNote0.Caption := ZTable1.FieldByName('Note').AsString;
LabelModel0.Caption :=ZTable1.FieldByName('Model').AsString;
LabelEquopment0.Caption := ZTable1.FieldByName('Equopment').AsString;
LabelOrganization0.Caption :=ZTable1.FieldByName('Organization').AsString;
LabelLinkey0.Caption :=ZTable1.FieldByName('Linkey').AsString;
LabelList0.Caption :=IntToStr(z);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListePostesChange(sender);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   T1 := TMyThread1.Create(False);
   T1.Priority := tpIdle;
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    T1.Terminate;
    client.Disconnect;
    client.Destroy;
end;

end.
Aleksandr вне форума Ответить с цитированием
Старый 22.11.2013, 12:59   #25
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

выбросить код
eval вне форума Ответить с цитированием
Старый 22.11.2013, 15:45   #26
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Ну а как тогда? У меня уже голова кипит от этих потоков. Сделал при открытии формы вкладки с компанентами создаются динамически. А как теперь считывать данные каждый в свою.
Вложения
Тип файла: zip Новая папка (4).zip (20.8 Кб, 5 просмотров)
Aleksandr вне форума Ответить с цитированием
Старый 25.11.2013, 19:58   #27
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию Типа както так

Типа както так
Вложения
Тип файла: zip Новая папка (4).zip (3.8 Кб, 6 просмотров)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.11.2013, 20:24   #28
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Slym спасибо огромное. Просто супер. Сижу разбираюсь в коде.
Aleksandr вне форума Ответить с цитированием
Старый 25.11.2013, 21:24   #29
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Slym, а как сделать чтобы на каждой вкладке были разные label (IP, com и т.д). Эти данные берутся ZTable. Если я заполняю
Код:
ip.Caption:=ZTable1.FieldByName('IP').AsString;
то заполняются разные, но при переходе с одной вкладки на другую данные становятся одинаковыми.
Aleksandr вне форума Ответить с цитированием
Старый 26.11.2013, 04:59   #30
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

показывается тут
Код:
procedure TForm1.ListPostChange(Sender: TObject);
var TabData:TTabData;
begin
  if not GetActiveTabData(TabData) then exit;
  Disconnect.Enabled:=assigned(TabData.Thread);
  Connect.Enabled:=not Disconnect.Enabled;
  NMemo.Lines.Assign(TabData.Log);
  NRichEdit.Lines.Assign(TabData.Data);

  ip.Caption:=TabData.ip;
  com.Caption:=TabData.com;
   и так далее
end;
заполнять как то так
Код:
procedure TForm1.FormCreate(Sender: TObject);
var TabData:TTabData;
begin
  while not  ZTable1.eof do
  begin
    TabData:=TTabData.Create;
    TabData.ip:=ZTable1.FieldByName('IP').AsString;
    ListPost.Tabs.AddObject('new tab',TabData);
    и так далее
    ZTable1.Next;
  end;

end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 26.11.2013 в 05:03.
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транзакция V_a_d БД в Delphi 14 12.11.2012 17:00
write-транзакция в MyDAC 3D Hunter БД в Delphi 7 05.03.2012 14:45