Erro de Inserção e Atualização de Dados com Dbexpress

Delphi

16/02/2005

Gostaria obter ajuda para solucionar um problema que acontece após a inserção ou atualização de dados na tabela com dbexpress.


ERRO:

Project x.exe raised exception class EDatabaseError with message ´Unable to
´resolve records. Table name not found.´. Progress stopped. Use Step or Run to continue


Desde já agradeço a atenção


Lnunes

Lnunes

Curtidas 0

Respostas

Wwenceslaunew

Wwenceslaunew

16/02/2005

Verifique se a instrução SQL na propriedade commandText do TSqlDataSet existe.


GOSTEI 0
Vinicius2k

Vinicius2k

16/02/2005

Colega,

Regrinha não documentada para uso do dbExpress : nomes dos objetos do banco de dados (tabelas, colunas, views, SPs, etc) sempre em maiúsculas.
Ex:
select ID, NOME from CLIENTES order by NOME


Outro detalhe : se usar aspas na criação dos objetos, terá sempre que utilizar as aspas para referenciá-los.
Ex:
select "ID", "NOME" from "CLIENTES" order by "NOME"


Verifique se não são estes os problemas.

T+


GOSTEI 0
Lnunes

Lnunes

16/02/2005

Obrigado pela atenção mas infelizmente os problemas não são estes e eu não estou consigo desvenda-lo.


GOSTEI 0
Buosinet

Buosinet

16/02/2005

Vc esta usando mais de uma tabela no SQLDataset, por exemplo, fazendo Join pra trazer os lookups? Se for isso, o Resolver não consegue definir qual a tabela a atualizar. Aí, vc tem que usar o evento OnGetTableName do provider, assim:

procedute DataSetProvider1.GetTableName(não lembro os atributos)
begin
TableName := ´NOME_DA_TABELA´;
end;

Boa Sorte,
Buosi.


GOSTEI 0
Vinicius2k

Vinicius2k

16/02/2005

Vc esta usando mais de uma tabela no SQLDataset, por exemplo, fazendo Join pra trazer os lookups?

Bem lembrado !
Nos casos que envolvem JOINs as colunas ´estrangeiras´, ou seja, que não são originais da Tabela a qual vc está trabalhando os dados, não podem ser levados em consideração na aplicação dos updates...

Se vc estiver utilizando [b:686df043c8]TClientDataSet[/b:686df043c8], set todos os sub-itens da propriedade [b:686df043c8]ProviderFlags[/b:686df043c8], de todos os TFields ´estrangeiros´ para [b:686df043c8]False[/b:686df043c8]. Repita o procedimento nos mesmos TFields do [b:686df043c8]TSQLDataSet[/b:686df043c8].

Normalmente, vc só precisará setar [b:686df043c8]pfInUpdate[/b:686df043c8] e [b:686df043c8]pfInWhere[/b:686df043c8].

Isto faz com que estas colunas não sejam consideradas na ocasião do Insert ou Update.

T+


GOSTEI 0
POSTAR