Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

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

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

Сделал подключение и считывание. Но у меня следующий косяк. Подключаюсь к примеру только на 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
   {&#209;&#238;&#231;&#228;&#224;&#229;&#236; 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,030
Репутация: 422
По умолчанию

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

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

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

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

Slym, а как сделать чтобы на каждой вкладке были разные label (IP, com и т.д). Эти данные берутся ZTable. Если я заполняю
Код:

ip.Caption:=ZTable1.FieldByName('IP').AsString;

то заполняются разные, но при переходе с одной вкладки на другую данные становятся одинаковыми.
Aleksandr вне форума   Ответить с цитированием
Старый 26.11.2013, 04:59   #30
Slym
Профессионал
 
Регистрация: 07.12.2011
Адрес: Siberia
Сообщений: 1,007
Репутация: 687
По умолчанию

показывается тут
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


23:20.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru