IBO Com Acess e Combobox - Pepino Felomenal.

Delphi

30/11/2004

Alow pessoal.

To com um problema que vo descrever com detalhes abaixo.

Alimentar um combobox com campos de um banco de dados é fácil.

Agora, olhem minha situação:

To com 1 Registro, CódCliente, que fica em uma tabela Firebird(1.5), e que em uma janela, evidentemente a janela dessa tabela, quero exibir o Nome do Cliente, mas o nome do cliente fica em uma tabela Acess. Isso tudo acima tb é fácil, já fiz numa boa.

Lá vem o pepino:

Como nao posso fazer um Lookup entre tabelas de banco de dados diferentes, como posso fazer pra que quando eu por exemplo, digitar o código do cliente num IB_edit, ele selecionar o Nome do cliente num combobox ? ou pode ser num Dbcombobox, mas sabendo que o componente que vai exibir o nome do Cliente é derivado de Tdataset, ele nao exibirá uma lista, mas apenas o indice que ele pegará através de um locate. Eu quero uma lista.

Consegui exibir essa listagem, num Dbcombobox ou num combobox, mas quando vou navegar os registros, por exemplo por um Ib_Navigator, ele nao acompanha, pois nao existe a ligação entre as bases.

Sacaram o Problema ?

:P


Technos

Technos

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

30/11/2004

Faça uma ligação master-detail entre as 2 bases. Daí quando você navegar pelo dataset pai, o filho irá acompanhar.


GOSTEI 0
Technos

Technos

30/11/2004

Pois é. mas se vc observar direitinho, sao duas bases diferentes:

O Campo CodCliente, fica no Firebird...
O Nome do Cliente, fica numa tabela chamada Empresa, de uma base Acess chamada Clientes.

Não se pode, pelo menos até gora nunca vi alguem fazer um Mestre - Detalhe entre tabelas em bases diferentes.

Mas se vc souber, fico grato em aprender.

Um abraço.


GOSTEI 0
Gandalf.nho

Gandalf.nho

30/11/2004

Faça o mestre-detalhe apenas através dos componentes dataset via DataSource.


GOSTEI 0
Gandalf.nho

Gandalf.nho

30/11/2004

Não sei se essa ligação irá funcionar, mas não custa tentar... :)


GOSTEI 0
Technos

Technos

30/11/2004

Aqui na empresa, agente trabalha com componentes IBO Nativos.

Ou seja, IBO Nativo nao trabalha em comunhão com nenhum outro componente DataAware que se conheçe, apenas com aqueles que suportam IBO Core.

Tenho a opção de Usar uma paleta de componentes que é instalada junto com a IBO Core, que é derivada de Tdataset, assim poderia trabalhar em comunhão, mas mesmo assim, a ligação mestre-detalhe só é feita com bancos iguais.

Como o meu caso, é Acess com Firebird, naum funfa.

A ligação que vc me solicitou a fazer, pra tentar ver se pega se torna inviável por que aqui tb só trabalhamos com Herança, e o formulário padrão acessa IBO Core.

Mas tenho certeza que tem alguma maneira, pois consigo fazer quase tudo, menos que haja um sincronismo entre o Locate, a Navegação com o Locate, acessando as bases diferente.

Tá quase pronto...

Sinto que falta pouca coisa, deve ser um detalhe que estou tão preocupado em resolver, que o lógico nao me deixa enxergar.

Mas valeu asim mesmo Gandalf, se pintar alguma sujestão, manda aee blz ?

um Abraço. :D


GOSTEI 0
Technos

Technos

30/11/2004

Consegui Resolver a bronca, era apenas dar um locate na tabela access, pegando pelo código da mesma, passando como parametro do locate, o código da tabela firebird.

Tá pegando numa boa, seja lá em qual estado estiver o dataset da tabela firebird.

Mas pintou outra bronquinha, eu consigo fazer o combo que tem os nomes do cliente que ficam na tabela acess sejam modificados de acordo com o codigo da tabela firebird, pelo locate, mas como posso fazer pra quando eu selecionaro os nomes do cliente num componente RXdblookupcombobox, ele pesquisar por meio de um locate, e mudar o código do cliente, que como sabemos, fica numa tabela firebird ?

Sacaram a lógica ?

Gostaria de questões, e soluções se possível.

Se caso eu conseguir, eu retorno com a resposta.

Technos

:shock:


GOSTEI 0
Technos

Technos

30/11/2004

Sei naum viu, é quando o cara tá de cabeça cheia mesmo.

Essa bronca aee em cima pessoa, eu já tava penssando em fazer um select pra pegar o código do cliente na tabela de clientes (Access), jogar o valor do campo código dentro de uma variável, isso tudo dentro de um loop enquanto nao é o fim da tabela, depois pegava o valor da variavl e jogava dentro de um locate como sendo um parametro.

Mas...

Nem cheguei a testar essa rotina aee, bateu a doidera em min e veio akela idéia... saca aee..

procedure TFrmOS.RxDBLookupCombo1Change(Sender: TObject);
begin
inherited;
if datasourceaux.Dataset.State in [dssedit,dssinsert] then
begin
dados.qry_os.FieldByName(´codcliente´).Value := dados.TableCADCodigo.Value;
end;
end;


Simplesmente quando a tabela estiver em tempo de edição eu inserção, eu vou e jogo diretamente o valor do campo codigo da tabela access dentro do campo codcliente da tabela firebird.

Depois disso, veio uma pekena nóia:

Quando estou em modo de pesquisa (Dsssearch no IBO), eu posso chegar e selecionar um nome de cliente no lookup, que ele nao muda o codigo na tabela do firebird, mas mermao, LÓGICO que naõ vai mudar, pois nao fiz nenhuma rotina pra isso e isso é um procedimento normal com os controle .

Aff.



Espero que isso sirva aee pra vc´s

Até Mais

Technos :shock:


GOSTEI 0
POSTAR