Jump to content
Fórum Script Brasil
  • 0

Query e Thread, como?


Frega
 Share

Question

Boa tarde, estou começando a usar threads, porem não estou conseguindo criar uma query e carregar os dados no DBGrid a partir de um Thread, procurei na net mas há poucos exemplos e dicas de como usar thread com query....

se tivesse como fazer em um unico thread também queria adicionar um progressBar baseado no RecordCount da query...

Se alguém tiver exemplos ou algo que possa ajudar seria de grande ajuda, porque eu não sai do chão até agora...

Obrigado pela ajuda

edit..

no DBGrid esta funcionando, o problema é no cxGrid (QuantumGrid da devexpress), carregando os dados nele é que ocorre os erros

Edited by Frega
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Amigo, faz assim declara uma procedure:

procedure ProcessoGeral;
em seguida faca a seguinte procedure abaixo:
procedure ProcessoGeral;
var
i:integer;
begin
i := seuform.clientdataset. 
seuform.gauge1.progress := 0;
seuform.gauge1.maxvalue := seuform.clientdataset.recordcount;
while not seuform.clientdataset.eof do
begin
i := seuform.clientdataset.recno;
//coloque o codigo que voce usava antes de fazer a thread, lembrando de colocar SeuForm.componente antes de cada componente, faca tudo que quiser aki eheheh
//recomendo voce o usar o Gauge que fica na paleta sample ao invés de progressbar, em seguida faca assim nessa mesma procedure:
Gauge1.Progress := i; 
seuform.clientdataset.next;
end;
end;
abaixo do local escrito implementation voce escreve assim:
uses
//aqui voce coloca o nome do arquivo.pas do form que voce esta usando e depois um ponto e virgula ehehehe
em seguida na procedure suathread.execute voce escreve o seguinte:
synchronize(ProcessoGeral);

acho que é isso..... admito que de gauge e progress bar eu sou nub, huahuahua faco esses trambiques, tipo esse pc aqui ta sem delphi e eu levei meia hora pra escreve isso tudo, hehehehe o que estiver errado me corrijam....

abracos!!!

Link to comment
Share on other sites

  • 0

Obrigado pela ajuda, até a parte de criar a query dentro do thread e carregar no dbgrid já tinha conseguido, a minha duvida era como fazer o gauge/progressbar do jeito certo...

agora consegui fazer tudo, mas restou uma duvida...

Na hora de dar Refresh ou editar um registro da tabela, emfim, qualquer coisa que envolva a query, como acesso ela?

tendo em vista que o nome do thread é QryThread e o nome da query é MQ, posso simpismente do form acessar, QryThread.MQ.refresh? como devo fazer?

meu teste c/ progressbar:

nas variaveis publicas do thread:

procedure syncQry;
    var MC:TMyConnection;
    MQ:TMyQuery;
no Execute do Thread:
MC:=TMyConnection.Create(nil);  //Cria a conexão, cada query deve ter sua conexão usando Thread
  MC.Password:='xxxxxx';
  MC.Username:='yyyyyy';
  MC.Port:=3306;
  MC.Server:='...';
  MC.Database:='...';
  MC.Open;

  MQ:=TMyQuery.Create(nil);   //cria a query
  MQ.Connection:=MC;
  MQ.SQL.Text:='select * from r_clientes';
  MQ.ReadOnly:=true;
  MQ.Open;
  Synchronize(syncQry);
o evento da procedure SyncQry:
cxProgressBar1.Properties.Max:=MQ.RecordCount;
  while not MQ.Eof do begin
     cxProgressBar1.Position:=MQ.RecNo;
     Application.ProcessMessages;
     MQ.Next;
   end;
cxProgressBar1.Visible:=false;
MQ.First; //retorna para o primeiro registro, para não ficar no fim do dbgrid
Form1.Datasource.dataset:=mq;

(Clientes é o nome do Form, o dbGrid já esta ligado ao DataSource, por fim, eu só uso esse comando para ligar o datasource a query, então os dados são carregados)

esta correto desse jeito? como melhorar/ aumentar o desempenho?

Abraço

Edited by Jonathan Queiroz
Adcionar tag's (Jonathan)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.5k
    • Total Posts
      646.1k
×
×
  • Create New...