Sql Com Inner Join - append funciona, edit não funciona

Delphi

12/03/2008

:?:
Olá a todos,
Uso Delphi 7 + Firebird 1.5 , Dbexpress.
Montei uma Sql para extrair os dados das tabelas usando Inner Join conforme mostrado abaixo:
>>>>>>>>>>>>
V_SqlMestre := ´SELECT A.TPR_COD, A.TPR_DTCADASTRO, ´ +
´A.CLI_COD, A.FRN_COD, A.TPR_VENCTO, A.TPR_PAGTO, ´ +
´A.TPR_VALORTOTAL, ´ +
´B.CLI_NOMEFANTASIA, ´ +
´C.FRN_NOMEFANTASIA, ´ +
´FROM TITULOSMESTRE A ´+
´INNER JOIN CLIENTES B ON A.CLI_COD = B.CLI_COD ´ +
´INNER JOIN FORNECEDORES C ON A.FRN_COD = C.FRN_COD ´ +
´ORDER BY A.TPR_COD ´;

V_SqlDtSt.CommandText := V_SqlMestre;
V_SqlDtSt.Close;
V_CliDtSt.Close;

V_CliDtSt.Open;

==== >>>>>>> A INCLUSÃO FUNCIONA

V_CliDtSt.Append;

With V_CliDtSt do
begin
FieldByName(´Tpr_Cod´).AsString := EdtCodigo.Text;
FieldByName(´Tpr_DtCadastro´).AsString := EdtDtCadastro.Text;
FieldByName(´Frn_Cod´).AsString := EdtCodFrn.Text;
FieldByName(´Cli_Cod´).AsString := EdtCodCli.Text;
FieldByName(´Tpr_Vencto´).AsString := EdtDtVencto.Text;
FieldByName(´Tpr_Pagto´).AsString := EdtDtPagto.Text;
FieldByName(´Tpr_ValorTotal´).AsCurrency := StrToFloat(EdtTot.Text);

Post;
If ApplyUpdates(0) = 0 then
V_SqlCncDados.Commit(Transacao)
else
V_SqlCncDados.Rollback(Transacao);
end;

==== >>>>>>> NÃO FUNCIONA NA EDIÇÃO

V_CliDtSt.Edit

With V_CliDtSt do
begin
FieldByName(´Tpr_Cod´).AsString := EdtCodigo.Text;
FieldByName(´Tpr_DtCadastro´).AsString := EdtDtCadastro.Text;
FieldByName(´Frn_Cod´).AsString := EdtCodFrn.Text;
FieldByName(´Cli_Cod´).AsString := EdtCodCli.Text;
FieldByName(´Tpr_Vencto´).AsString := EdtDtVencto.Text;
FieldByName(´Tpr_Pagto´).AsString := EdtDtPagto.Text;
FieldByName(´Tpr_ValorTotal´).AsCurrency := StrToFloat(EdtTot.Text);

Post;
If ApplyUpdates(0) = 0 then
V_SqlCncDados.Commit(Transacao)
else
V_SqlCncDados.Rollback(Transacao);
end;

Retorna a mensagem: Column Unknown CLI_NOMEFANTASIA
Não encontra a coluna CLI_NOMEFANTASIA.

Porque a inclusão funciona mesmo com colunas extraidas de outra tabela e na edição ao dar POST o sistema recusa. O CommandText é o mesmo.

Alguem pode me ajudar nisso.
Abraços
Neto


Neto

Neto

Curtidas 0

Respostas

Flyskin

Flyskin

12/03/2008

você configurou quais os campos que devem entrar na instrução como condição where? os campos de join não podem estar setados...


GOSTEI 0
Neto

Neto

12/03/2008

Grande flyskin,
já estamos ficando conhecidos, afinal a dica da função de semana do ano que vc falou foi ótima, obrigado novamente.

Sobre a dúvida em questão ( Sql ) os campos setados na condição where são os mesmos na inclusão e edição, não deveriam funcionar????

Abraços pra vc, amigo
Neto


GOSTEI 0
Flyskin

Flyskin

12/03/2008

não porque no insert ele não utiliza o filtro where, já no update ele utiliza, portanto você deve identificar quais os campos que devem entrar na instrução where para o update e para o delete...
é sempre recomendado informar a chave primária da tabela principal para o where e o restante dos campos somente como update, com exceção dos campos vindos de um join que não devem ter nenhuma propriedade marcada...

espero ter ajudado, sempre que eu puder estou por aí...


GOSTEI 0
Neto

Neto

12/03/2008

valeu......
T+


GOSTEI 0
POSTAR