Como não usar Lookups ?!! Problemas com consulta
Gente, estou com problemas, mas ninguem entende o que eu estou perguntando !
Ps: Capaz até que me cortem do forum de tantas mensagens ambiguas... Hehehhee
Iniciei no Firebird há uns 3 meses... uso D7 + Zeos...
Nao estou querendo usar lookups devido a varias mensagens aqui postadas dizendo pra naum usar os lookups e sim joins.
Meus joins funcionam perfeitamente no IBExpert, traz do jeito que eu quero.... meu problema naum é com a linguagem SQL e sim com a manipulacao das informacoes atraves de componentes do Delphi / Zeos.
Fiz um cadastro de Contas a Pagar e nele tenho codfor(codigo do fornecedor) e codbanco(codigo do banco). Minhas inclusoes, alteracoes, exclusoes estao blz, o que naum consigo é exibir nas consultas os campos ´nome do fornecedor´ e ´nome do banco´ que sao resultantes da SQL Join que eu fiz...
SQL:
SELECT C.*, F.CP_NOMEFOR, B.CR_NOMEBAN FROM CP01DOCU C
LEFT OUTER JOIN CPFORNECEDOR F ON C.CP_CODIFOR=F.CP_CODIFOR
LEFT OUTER JOIN CRBANCO B ON C.CP_CODIBAN=B.CR_CODIBAN;
Em minhas consultas, como faço pra exibir os campos ´cp_nomefor´ e ´cr_nomeban´ (que sao resultantes do join) no dbgrid ?!!
Como fazer? Eu fiz uma gambiarra e criei esses campos na ZQuery... na consulta ele deu certo, porem nas modificacoes da tabela ele dah pau e diz que esses dois campos naum existem na tabela, realmente eles naum existem mesmo, foram criados sóh pra eu ligar com o DBGRID, mas fudeu minhas modificacoes na tabela, hehehehe...
Ps: Capaz até que me cortem do forum de tantas mensagens ambiguas... Hehehhee
Iniciei no Firebird há uns 3 meses... uso D7 + Zeos...
Nao estou querendo usar lookups devido a varias mensagens aqui postadas dizendo pra naum usar os lookups e sim joins.
Meus joins funcionam perfeitamente no IBExpert, traz do jeito que eu quero.... meu problema naum é com a linguagem SQL e sim com a manipulacao das informacoes atraves de componentes do Delphi / Zeos.
Fiz um cadastro de Contas a Pagar e nele tenho codfor(codigo do fornecedor) e codbanco(codigo do banco). Minhas inclusoes, alteracoes, exclusoes estao blz, o que naum consigo é exibir nas consultas os campos ´nome do fornecedor´ e ´nome do banco´ que sao resultantes da SQL Join que eu fiz...
SQL:
SELECT C.*, F.CP_NOMEFOR, B.CR_NOMEBAN FROM CP01DOCU C
LEFT OUTER JOIN CPFORNECEDOR F ON C.CP_CODIFOR=F.CP_CODIFOR
LEFT OUTER JOIN CRBANCO B ON C.CP_CODIBAN=B.CR_CODIBAN;
Em minhas consultas, como faço pra exibir os campos ´cp_nomefor´ e ´cr_nomeban´ (que sao resultantes do join) no dbgrid ?!!
Como fazer? Eu fiz uma gambiarra e criei esses campos na ZQuery... na consulta ele deu certo, porem nas modificacoes da tabela ele dah pau e diz que esses dois campos naum existem na tabela, realmente eles naum existem mesmo, foram criados sóh pra eu ligar com o DBGRID, mas fudeu minhas modificacoes na tabela, hehehehe...
Marfred
Curtidas 0
Respostas
Vanius
26/05/2004
Boa tarde fera.
Sua pergunta esta meio confusa, mas vamos lá.
Quando vc usa LEFT OUTER JOIN sua query passa automaticamente para
somente leitura (exceto no caso do ADOQuery, q eu saiba...).
Acho q o aplicativo, DataCar, da revista ClubeDelphi poderia te ajudar neste caso.
De uma olhada. Ediçoes 29 a 34.
Abraços,
Vanius
Sua pergunta esta meio confusa, mas vamos lá.
Quando vc usa LEFT OUTER JOIN sua query passa automaticamente para
somente leitura (exceto no caso do ADOQuery, q eu saiba...).
Acho q o aplicativo, DataCar, da revista ClubeDelphi poderia te ajudar neste caso.
De uma olhada. Ediçoes 29 a 34.
Abraços,
Vanius
GOSTEI 0
Marfred
26/05/2004
acho q estou meio confuso mesmo... naum sei explicar direito....
naum faço modificacoes na tabela com o join inserido... sóh uso o join nas consultas... na inclusao naum uso nenhum codigo sql...
as inclusoes sao separadas das consultas.... ou é um ou é outro..
uso zquery1campo1.value.... entende ? mas dah pau pois eu crio os campos nome do fornecedor e nome do banco na query somente pra efeito de consulta(para ligar no dbgrid)... daí q da pau !!! pois na inclusao o componente gera o sql contando que akeles campos existam na tabela....
Entendeu ?!!!
naum faço modificacoes na tabela com o join inserido... sóh uso o join nas consultas... na inclusao naum uso nenhum codigo sql...
as inclusoes sao separadas das consultas.... ou é um ou é outro..
uso zquery1campo1.value.... entende ? mas dah pau pois eu crio os campos nome do fornecedor e nome do banco na query somente pra efeito de consulta(para ligar no dbgrid)... daí q da pau !!! pois na inclusao o componente gera o sql contando que akeles campos existam na tabela....
Entendeu ?!!!
GOSTEI 0
Paulo_amorim
26/05/2004
acho q estou meio confuso mesmo... naum sei explicar direito....
naum faço modificacoes na tabela com o join inserido... sóh uso o join nas consultas... na inclusao naum uso nenhum codigo sql...
as inclusoes sao separadas das consultas.... ou é um ou é outro..
uso zquery1campo1.value.... entende ? mas dah pau pois eu crio os campos nome do fornecedor e nome do banco na query somente pra efeito de consulta(para ligar no dbgrid)... daí q da pau !!! pois na inclusao o componente gera o sql contando que akeles campos existam na tabela....
Entendeu ?!!!
Olá
A query em si traz os resultados desejados?
o problema é soh exibição no DBGrid????
GOSTEI 0
Marfred
26/05/2004
Isso !!! Na consulta sim !!! tah certo !!! tras os resultados certos....
mas na manutencao(inclusao/alteracao/exclusao) dos dados na tabela naum dah certo pois tenho os campos criados(q naum existem)... e ele diz q os campos naum existem, pois naum existem mesmo na tabela, eu criei somente pra ligar eles com o dbgrid !!
até agora aho q vc entendeu....
Falow....
mas na manutencao(inclusao/alteracao/exclusao) dos dados na tabela naum dah certo pois tenho os campos criados(q naum existem)... e ele diz q os campos naum existem, pois naum existem mesmo na tabela, eu criei somente pra ligar eles com o dbgrid !!
até agora aho q vc entendeu....
Falow....
GOSTEI 0
Paulo_amorim
26/05/2004
Olá
Vc está usando Queries para manutenção?
Se sim, quais as sintaxes?
Até+
Vc está usando Queries para manutenção?
Se sim, quais as sintaxes?
Até+
GOSTEI 0
Fred
26/05/2004
a principio vc disse que sua consultas e sua inserção, exclusao..., eram separadas, mas pelo que estou vendo naum são! vc esta usando a mesma query que fez a consulta(com os joins) para fazer as atualizações! ai naum vai funcionar NUNCA!!! ao naum ser que vc use ClientDataSet com Provider(ai da pra configurar quais campos serao atualizados).
No Sistema DataCar tem como fazer isto certinho!!!
No Sistema DataCar tem como fazer isto certinho!!!
GOSTEI 0
Marfred
26/05/2004
Pronto !!! Taí minha resposta !!!
Sua resposta diz q a manutencao e a consulta tem q ser em querys separadas !? Mas meu DM ficarao com muita coisa, naum acha....
Qual a solução !! realmente tem q ser em querys separadas se eu naum quiser usar ClientDatasets?
Sua resposta diz q a manutencao e a consulta tem q ser em querys separadas !? Mas meu DM ficarao com muita coisa, naum acha....
Qual a solução !! realmente tem q ser em querys separadas se eu naum quiser usar ClientDatasets?
GOSTEI 0
Fred
26/05/2004
Creio que sim, vc tera que usar querys separadas ou ClienteDataSets!!
Mas experimente mudar as Flags ai na ibquery mesmo!!
la nos fieldsEditor==> providerFrags
coloca: TODOS os campos MENOS O CHAVE com ProviderFrag==inWhere para FALSE, os campo que naum pertencem a tabela(trazidos no join) coloca o provider frags=>inUpdate para FALSE e o chave inKey para true.
MAAASS acho que naum vai funcionar!!
neste caso vc pode criar os SQL de suas querys em tempo de execução, mas ai vc naum vai pode adicionar os fields.
Mas experimente mudar as Flags ai na ibquery mesmo!!
la nos fieldsEditor==> providerFrags
coloca: TODOS os campos MENOS O CHAVE com ProviderFrag==inWhere para FALSE, os campo que naum pertencem a tabela(trazidos no join) coloca o provider frags=>inUpdate para FALSE e o chave inKey para true.
MAAASS acho que naum vai funcionar!!
neste caso vc pode criar os SQL de suas querys em tempo de execução, mas ai vc naum vai pode adicionar os fields.
GOSTEI 0
Marfred
26/05/2004
Gente..... nada dah certo...
É o seguinte:
Tenho uma consulta simples no cadastro de contas a pagar.... apenas traz o nome do fornecedor do cadastro de fornecedores e nome do banco do cadastro do bancos(uso join), com os campos-codigos da tabela de contas a pagar...
Até aí blz.... na consulta tah perfeito !!! Eu criei dois campos na mesma query de manutencao da tabela, criei o campo nomefor e nomeban somente pra efeito de ligacao no dbgrid de exibicao nas consultas...
Naum sei se vcs estao entendendo....
Daí eu naum consigo mais mexer na tabela de contas a pagar... o comando query1.edit dah pau ! o comando query1.insert tbm dah pau !!! nada mais funciona !!! somente as consultas estao funcionando....
Naum sei de entenderam....
É o seguinte:
Tenho uma consulta simples no cadastro de contas a pagar.... apenas traz o nome do fornecedor do cadastro de fornecedores e nome do banco do cadastro do bancos(uso join), com os campos-codigos da tabela de contas a pagar...
Até aí blz.... na consulta tah perfeito !!! Eu criei dois campos na mesma query de manutencao da tabela, criei o campo nomefor e nomeban somente pra efeito de ligacao no dbgrid de exibicao nas consultas...
Naum sei se vcs estao entendendo....
Daí eu naum consigo mais mexer na tabela de contas a pagar... o comando query1.edit dah pau ! o comando query1.insert tbm dah pau !!! nada mais funciona !!! somente as consultas estao funcionando....
Naum sei de entenderam....
GOSTEI 0
Paulo_amorim
26/05/2004
Olá
Se vc utilizar queries iguais para Seleção E Inserção, como vc queria que os dados da seleção fossem para a Inserção??? vc limpou o ResultSet...
Sobre dar pau, agora está tudo separado?
Até+
Se vc utilizar queries iguais para Seleção E Inserção, como vc queria que os dados da seleção fossem para a Inserção??? vc limpou o ResultSet...
Sobre dar pau, agora está tudo separado?
Até+
GOSTEI 0
Marfred
26/05/2004
Naum é isso .....
Ou o usuario tah consultando, ou ele tah inserindo !
Entendeu...
Mas na query q inclusao (q é a mesma de consultas) eu inclui dois campos do tipo ´DATA´(dados) q tem por objetivo buscar o nome do fornecedor e o nome do banco q sao resultantes da consulta sql(joguei esses dois campos somente pra eu conseguir exibir no DBGRID)...
Mas na hora da insercao a query quer atualizar esses dois campos q naum existem na tabela.....
Ou o usuario tah consultando, ou ele tah inserindo !
Entendeu...
Mas na query q inclusao (q é a mesma de consultas) eu inclui dois campos do tipo ´DATA´(dados) q tem por objetivo buscar o nome do fornecedor e o nome do banco q sao resultantes da consulta sql(joguei esses dois campos somente pra eu conseguir exibir no DBGRID)...
Mas na hora da insercao a query quer atualizar esses dois campos q naum existem na tabela.....
GOSTEI 0
Gandalf.nho
26/05/2004
Eu faço assim nesses casos: crio uma view no banco contendo todos os campos da tabela principal e mais os campos extras que deverão aparecer. Daí crio triggers na própria view para gerenciar as tarefas UPDATE, INSERT e DELETE; essas triggers devem afetar somente os campos da tabela principal do relacionamento. Se não me engano na própria documentação do Interbase tem algo a esse respeito.
GOSTEI 0