Array
(
)

Erro na query

Rafael Gomes
   - 08 mar 2006

é o seguinte ...

tenho 2 formularios de cadastro ...
2 querys em um datamodule ...

eu alterno as 2 querys entre os 2 formularios de cadastro ...

para alternar entre as tabelas uso o seguinte codigo ...

cadastro de armadores

#Código

DmPrincipal.OpenQy(DmPrincipal.QyCad,´select * from tbarmadores´);
DmPrincipal.OpenQy(DmPrincipal.QyCadDetail,´select * from tbarmadores where codarmador = :codarmador´);
Application.CreateForm(TFrmCadArmadores,FrmCadArmadores);
Application.CreateForm(TFrmArmadoresContato,FrmArmadoresContato);


cadastro de agentes de carga

#Código
DmPrincipal.OpenQy(DmPrincipal.QyCad,´select * from tbagentescarga´);
DmPrincipal.OpenQy(DmPrincipal.QyCadDetail,´select * from tbagentescargacontatos where codagente = :codagente´);
Application.CreateForm(TFrmCadAgente,FrmCadAgente);
Application.CreateForm(TFrmAgenteContato,FrmAgenteContato);
Application.CreateForm(TFrmCadAgenteContato,FrmCadAgenteContato);


por exemplo, s eeu entrar no form de armadores e depois sair e entrar no de agentes da pau ...

ele da a seguinte mensagem .. field ´codarmador´ not found .....

o procedimento openqy é o seguinte ...
#Código

procedure TDmPrincipal.OpenQy(Qy: TADOQuery; tb: string);
begin
Qy.Close;
Qy.SQL.Clear;
Qy.SQL.Text:= tb;
Qy.Open;
end;



alguem sabe me dizer, ou tem uma ideia da causa deste erro


Sremulador
   - 08 mar 2006

o que ele te diz e que o campo nao existe...


Rafael Gomes
   - 08 mar 2006


Citação:
o que ele te diz e que o campo nao existe...


isso eu sei ...

vejam bem ... quando eu executo u form por vez, fecho o programa e executo somente o outro nao da erro algum ...

o porblema esta ocorrendo na hora de alternar as tabelas da query..


Rafael Gomes
   - 08 mar 2006

#Código

procedure TFrmPrincipal.Button1Click(Sender: TObject);
begin
DmPrincipal.OpenQy(DmPrincipal.QyCad,´select * from tbagentescarga´);
DmPrincipal.OpenQy(DmPrincipal.QyCadDetail,´select * from tbagentescargacontatos where codagente = :codagente´);
label1.Caption:= ´agentes´;
end;

procedure TFrmPrincipal.Button2Click(Sender: TObject);
begin
DmPrincipal.OpenQy(DmPrincipal.QyCad,´select * from tbarmadores´);
DmPrincipal.OpenQy(DmPrincipal.QyCadDetail,´select * from tbarmadores where codarmador = :codarmador´);
label1.Caption:= ´armadores´;

end;



fiz esse codigo pra testar ...

quando seto a tabela de armador e depois clico no botao1 da um erro pedindo a chave primaria de armador

e vice e versa ...

se eu tirar as linhas referentes a QyCadDetail funciona perfeitamente ... o problema deve estar na estrutura detalhe ...
agora me digam pq???

Rafael Gomes
   - 09 mar 2006

eu descobri o que esta acontecendo, quando troco o sql da tabela detalhe ele nao esta atualizando .. entao ele vai procurar os campos da tabela master que estava ativa ...

só nao sei como resolver ...
alguem poderia me ajudar?
[]s


Martins
   - 09 mar 2006


Citação:
eu descobri o que esta acontecendo, quando troco o sql da tabela detalhe ele nao esta atualizando .. entao ele vai procurar os campos da tabela master que estava ativa ...

só nao sei como resolver ...
alguem poderia me ajudar?
[]s


Seu banco de dados é MS-Access ou MS Sql-Server?

Caso seja SQL-Server vc não poderia montar um view dentro do Banco e só chamar?


Rafael Gomes
   - 09 mar 2006

na verdade trabalho com mysql e firebird ... sim, com ADO!


Martins
   - 09 mar 2006


Citação:
na verdade trabalho com mysql e firebird ... sim, com ADO!


vc poderia usar join para fazer a junção das duas tabelas ou não?

Esse mestre datalhe será usado em inserções, edições ou apenas na visualização (navegação) de registros?


Rafael Gomes
   - 09 mar 2006


Citação:

Esse mestre datalhe será usado em inserções, edições ou apenas na visualização (navegação) de registros?


em insercoes, edicoes, e visualizacoes ....

apenas repetindo o conteudo da mp


Citação:
seguinte, estou respondendo por aqui mas irei postar no forum tbm, se voce pudesse responderpor lá seria até melhor, assim beneficiaria a todos ...

vou explicar detalhadamente o problema ...

imagina 2 tabelas quaisquer ...

tabela cliente
codcli
nmcli

tabela telefone
codtelefone
codcli
numtelefone

para mim fazer mestre detalhe utilizando ADOQuery estou utilizando o seguinte codigo ...

Código:
procedure TDmPrincipal.OpenQy(Qy: TADOQuery; tb: string);
begin
Qy.Close;
Qy.SQL.Clear;
Qy.SQL.Text:= tb;
Qy.Open;
end;


para ativar as querys uso o seguinte codigo ...

Código:
DmPrincipal.OpenQy(QyCad,´select * from tbCli´);
DmPrincipal.OpenQy(QyCadDetail,´select * from tbTelefone where codcli = :codcli´);


agora imagine que eu tenha outras 2 tabelas distintas que tbm sejam estrutura e detalhe ...

se eu simplesmente chamar o metodo OpenQy para fazer a alternancia ele me retorna um erro ..
por exemplo, eu carrego as duas tabelas cliente e telefone, respectivamente nas querys QyCad e QyCadDetail ...

logo apos eu chamo o metodo openqy para alternar pra outras 2 tabelas
ai ele me da o seguinte erro ...

QyCad: Field ´codcli´ not found ...

to usando adoquery!!
[]ss



Rafael Gomes
   - 09 mar 2006

http://www.ellas.com.br/teste.rar

ai esta um link para baixar um pequeno exemplo ... esta dando erro .. se alguem puder baixar para dar uma olhada agradeceria ...

[]sss


Martins
   - 09 mar 2006


Citação:
http://www.ellas.com.br/teste.rar

ai esta um link para baixar um pequeno exemplo ... esta dando erro .. se alguem puder baixar para dar uma olhada agradeceria ...

[]sss


Baixei o exemplo e vou tentar dar uma olhada nele.


Rafael Gomes
   - 09 mar 2006

ok martins, aguardo sua resposta ...

[]s


Rafael Gomes
   - 10 mar 2006

up, mais ninguem poderia me ajudar ?


Martins
   - 10 mar 2006


Citação:
up, mais ninguem poderia me ajudar ?


Ando meio sem tempo, mas esse fds dou uma olhada no teu exemplo, e vejo o q posso fazer.

valew!!

:wink: