Array
(
)

Clone de um IB_Query. Como q eu faco isso?

_chiappone_
   - 26 ago 2004

Ae,

To precisando do seguinte.
Tenho uma query em um form, e todos os outros forms da aplicacao usam essa query.
O problema eh q a minha aplicacao eh MDI, e quando abro mais de um form numa unica vez, qq scroll que eu der em um DataSource (ds.DataSet.next, por exemplo) ele vai mexer em tds os forms abertos.

E EU NÃO QUERO COLOCAR A MSMA QUERY EM KDA FORM!!!
pq senaum a manutencao fica impossivel.

Minha primeira ideia pra se fazer isso foi o seguinte:
Crio uma variavel do tipo TIB_Query.
Digo que essa variaval vai ser IDENTICA à query q eu uso.
Digo que o dataset dos meus datasources vai ser essa query.

Ateh ai td bem.

Mas... como eu faco isso? Jah tentei de varias maneiras.
(assimindo q a variavel chama-se q)

q := IB_Query1.Create(Self);
---
q := TIB_Query.Create(IB_Query1;
---
q := IB_Query1;
---

Mas de todas essas formas, da no mesmo problema... eu do scroll em uma tela, e altera todas.

Eu quero apenas clonar... soh isso.. essa variavel vai ser apenas igual ao IB_Query1... e naum a propria IB_Query1!!!


Valeuzz!


Thomaz_prg
   - 26 ago 2004

Bom, primeiro crie uma variavel do tipo TIBQuery.

Supondo que form1 seja o form principal onde está a sua ibquery principal e q uma variavel criada com o tipo citado acima.
Então, no OnShow do Form (Não do principal), coloque :

#Código

q:=TIBQuery.Create(self);
q.DataBase := Form1.IBquery1.DataBase;
q.Transaction := form1.IBQuery1.Transaction;
with q do begin
Close;
SQL.Text := form1.IBQuery1.SQL.Text;
Open;
end;
DataSource1.DataSet := q;


Bom, e no OnClose, faça:

#Código
DataSource1.DataSet := NIL;
q2.Free;


Espero que lhe ajude.