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
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
Curtir tópico
+ 0
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+
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
Clique aqui para fazer login e interagir na Comunidade :)