Ir para conteúdo
Fórum Script Brasil
  • 0

Query e Thread, como?


Frega

Pergunta

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

Editado por Frega
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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

Editado por Jonathan Queiroz
Adcionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...