Fórum Duvida, nao sei o que esta dando errado! #44733

08/06/2004

0

Caros amigos,

Estou com a seguinte duvida.
Tenho no meu sistema desenvolvido em Delphi 6 e Firebird as seguintes tabelas.
CREATE TABLE ESTADO
(
Sigla VarChar(2) NOT NULL,
Estado VarChar(30),


PRIMARY KEY (Sigla)
);

e

CREATE TABLE CIDADE
(
CodCidade Integer NOT NULL,
Cidade VarChar(30),
EstadoCidade VarChar(2),

PRIMARY KEY (CodCidade)
);

e eu preciso que o usuario selecione o estado, atraves de um DBLookupComboBox, e logo em seguida selecione a cidade do estado. Ai para aparecer somente as cidades daquele determinado estado. Bom eu estava usando IBQuery e coloquei o seguinte codigo no IBQuery da cidade:

SELECT * FROM CIDADE
Where (ESTADOCIDADE= :SIGLA)

e setei a propriedade DataSource do IBQuery Cidade o DataSource do IBQuery do Estado. Funcionou que e uma beleza, mas ai resolvi trocar os IBQuery e os componentes IBX DBExpress, e passei a usar o ClientDataSet + SQLQuery (da palheta dbExpress), os cadastros funcionaram que é uma beleza, mais rapido, mas na hora que eu resolvi fazer o mesmo descrito anteriormente com os SQLQuery, até funcionou, mas quando seleciono por exemplo um estado, aparece no BLookupComboBox, 5 (copias) do mesmo estado. Como faço este tipo de relacionamento usando o SQLQuery? O que posso estar fazendo errado??

Atenciosamente

Luiz Claudio V. Santos


Luiz.claudio.vieira

Luiz.claudio.vieira

Responder

Posts

08/06/2004

Afarias

SQLQuerys não são bi-direcionais... sendo assim vc não pode implementar isso com eles (lookups) -- vc tem q apontar para o CDS.

Aproveitando, é melhor q todo seu relacionamento seja a nível de ClientDataSet agora!

Vc pode fazer isso jogando o parametro do SQLQuery para o CDS (FetchParams) -- dai, usar o parâmetro lá (no CDS) -- colocando um código no AfterScroll do CDS Master tipo::

CDSCidades.Close;
CDSCidades.Params[0].AsString := CDSEstado.FieldByName(´SIGLA´).AsString;
CDSCidades.Open;


ou vc poderia usar a propriedade MasterSource e MasterFields do CDS... mas dai acredito q a SQLQuery do CDS de cidades deve trazer TODAS as cidades pois o filtro é feito em memória (no CDS).


uma outra forma de fazer o relacionamento é por tabelas aninhadas (Nested Datasets) -- mas acho q não é o caso.


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar