Bpl + Thread + Query
Senhores,
Boa Tarde!
Estou com uma duvida e gostaria de saber qual seria a opinião de vocês.
Estou desenvolvendo um software MDI, sendo que cada formulário está em uma BPL até então tudo ok, porém eu tenho um TDataModule com algumas funções gerais e também, nele, o trio (TDatabase, TTransaction e TIBQuery) porém cada vez que for realizar uma consulta ao banco eu crio um thread do TIBQuery em cada módulo BPL e faço a consulta ali mesmo na thread e a amostragem dos dados dados no form eu implemento no Thread.Execute com o método Syncronize...
Porém a duvida, é uma solução viável? pois como estou usando MDI não posso trancar o usuário numa tela de pesquisa usando uma tabela pesada.
Gostaria de saber opniões.
Exemplo de Código:
....
//segue a mostragem dos dados com um While (TModuleGroup.Query01.Eof = False) Do
Atualmente estou usando este modo, porém há um problema que ao exibir (Form.Show) o formulário contido no módulo 2 vezes há um certo problema que, por exemplo... se o usuário abrir uma pesquisa SQL na primeira tela aberta e efetuar uma pesquisa na 2 tela do mesmo módulo esta consulta somente é executada cancelando a primeira consulta do primeiro formulário aberto.
Já tentei adicionar o TIBQuery no formulario e apartir dele abrir as consultas mas persiste o problema...
Gostaria de saber como posso trabalhar de forma independente entre os módulos sendo o form contido no mesmo aberto mais de uma vez...
Já tentei abrir usando threads e não funcionou..continua apresentando a mesma coisa..
Agradeço desde já...
Boa Tarde!
Estou com uma duvida e gostaria de saber qual seria a opinião de vocês.
Estou desenvolvendo um software MDI, sendo que cada formulário está em uma BPL até então tudo ok, porém eu tenho um TDataModule com algumas funções gerais e também, nele, o trio (TDatabase, TTransaction e TIBQuery) porém cada vez que for realizar uma consulta ao banco eu crio um thread do TIBQuery em cada módulo BPL e faço a consulta ali mesmo na thread e a amostragem dos dados dados no form eu implemento no Thread.Execute com o método Syncronize...
Porém a duvida, é uma solução viável? pois como estou usando MDI não posso trancar o usuário numa tela de pesquisa usando uma tabela pesada.
Gostaria de saber opniões.
Exemplo de Código:
Constructor TThreadExecSQL.create(Const SQLText: String); Begin inherited Create(False); TModuleGroup.Query01.Close; TModuleGroup.Query01.SQL.Add(SQLText); TModuleGroup.Transaction.Active:= True; End; Procedure TThreadExecSQL.Execute; Begin Self.Priority := tpNormal; TModuleGroup.Query01.Open; TModuleGroup.Query01.FetchAll;
....
//segue a mostragem dos dados com um While (TModuleGroup.Query01.Eof = False) Do
Atualmente estou usando este modo, porém há um problema que ao exibir (Form.Show) o formulário contido no módulo 2 vezes há um certo problema que, por exemplo... se o usuário abrir uma pesquisa SQL na primeira tela aberta e efetuar uma pesquisa na 2 tela do mesmo módulo esta consulta somente é executada cancelando a primeira consulta do primeiro formulário aberto.
Já tentei adicionar o TIBQuery no formulario e apartir dele abrir as consultas mas persiste o problema...
Gostaria de saber como posso trabalhar de forma independente entre os módulos sendo o form contido no mesmo aberto mais de uma vez...
Já tentei abrir usando threads e não funcionou..continua apresentando a mesma coisa..
Agradeço desde já...
Pablo Mesquita
Curtidas 0