Sql Com Inner Join - append funciona, edit não funciona
:?:
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
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
Curtidas 0
Respostas
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
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
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
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í...
é 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
12/03/2008
valeu......
T+
T+
GOSTEI 0