Erro no ApplyUpdate
Olá pessoal.
Sou Analista-Programador Delhpi há 6 anos e dessa vez o delphi está me dando uma canseira. Vamos ao problema: O banco é Firebird 1.5 e a conexão é via DBExpress. Uso os componentes sqlquery(qry) , datasetprovider(dsp), clientdataset(cds) e datasource(dts). Tenho as tabelas: COMPETENCIA, TIPO_COMPETENCIA E COMPETENCIA_TIPO. A tabela COMPETENCIA_TIPO armazena o ID da COMPETENCIA e o ID do TIPO_COMPETENCIA e tem tbém seu próprio ID. Fica assim no banco:
ID_COMPETENCIA(FK) ID_TIPO_COMPETENCIA(FK) ID_COMPETENCIA_TIPO(PK). Até aí estou conseguindo cadastrar normalmente. O problema é que preciso ligar o ID da tabela COMPETENCIA_TIPO e o ID de uma outra tabela chamada CATEGORIA. Tem uma tabela(COMP_TIPO_CATEG) que deve armazenar o ID de COMPETENCIA_TIPO e o ID da Categoria. É quando tento gravar dados nessa tabela que aparece o erro. Tem um sqlqry com o seguinte comando:
SELECT CTG.*,
C.DESCRICAO DESCR_CATEGORIA
FROM COMP_TIPO_CATEG CTG, CATEGORIA C
WHERE CTG.ID_CATEGORIA = C.ID_CATEGORIA
AND CTG.ID_COMPETENCIA_TIPO = :ID
ORDER BY C.DESCRICAO
Como toda a gravação tem que estar numa mesma tela, tem um grid que exibe as COMPETENCIAS, um outro que exibe os respectivos TIPOS da competencia. Um terceiro grid exibe as CATEGORIAS da respectiva COMPETENCIA_TIPO. É nesse último grid que está associada a query acima e ela mostra tudo corretamente, o erro ocorre(as vezes) quando vou gravar nessa tabela COMP_TIPO_CATEG. Quando é selecionado a categoria eu passo o ID dela e o id da COMPETENCIA_TIPO, dou um Post e e quando dou um applyupdate, aparece a mensagem: ´Token unknown - line 2 char 1
where´.
Coloquei SQLMonitor e aparece o comando:
update ´COMP_TIPO_CATEG´ se
where
´ID_COMP_TIPO_CATEG´ = ?
O estranho é que não é uma atulização(UPDATE) que tento fazer mas aparece que o comando enviado ao banco é UPDATE e não o INSERT que seria o correto. Bom, para terminar já aviso que fiz as configurações no dsp e nos providerflags da sql.
Se alguém puder ajudar, agradeço muito.
Sou Analista-Programador Delhpi há 6 anos e dessa vez o delphi está me dando uma canseira. Vamos ao problema: O banco é Firebird 1.5 e a conexão é via DBExpress. Uso os componentes sqlquery(qry) , datasetprovider(dsp), clientdataset(cds) e datasource(dts). Tenho as tabelas: COMPETENCIA, TIPO_COMPETENCIA E COMPETENCIA_TIPO. A tabela COMPETENCIA_TIPO armazena o ID da COMPETENCIA e o ID do TIPO_COMPETENCIA e tem tbém seu próprio ID. Fica assim no banco:
ID_COMPETENCIA(FK) ID_TIPO_COMPETENCIA(FK) ID_COMPETENCIA_TIPO(PK). Até aí estou conseguindo cadastrar normalmente. O problema é que preciso ligar o ID da tabela COMPETENCIA_TIPO e o ID de uma outra tabela chamada CATEGORIA. Tem uma tabela(COMP_TIPO_CATEG) que deve armazenar o ID de COMPETENCIA_TIPO e o ID da Categoria. É quando tento gravar dados nessa tabela que aparece o erro. Tem um sqlqry com o seguinte comando:
SELECT CTG.*,
C.DESCRICAO DESCR_CATEGORIA
FROM COMP_TIPO_CATEG CTG, CATEGORIA C
WHERE CTG.ID_CATEGORIA = C.ID_CATEGORIA
AND CTG.ID_COMPETENCIA_TIPO = :ID
ORDER BY C.DESCRICAO
Como toda a gravação tem que estar numa mesma tela, tem um grid que exibe as COMPETENCIAS, um outro que exibe os respectivos TIPOS da competencia. Um terceiro grid exibe as CATEGORIAS da respectiva COMPETENCIA_TIPO. É nesse último grid que está associada a query acima e ela mostra tudo corretamente, o erro ocorre(as vezes) quando vou gravar nessa tabela COMP_TIPO_CATEG. Quando é selecionado a categoria eu passo o ID dela e o id da COMPETENCIA_TIPO, dou um Post e e quando dou um applyupdate, aparece a mensagem: ´Token unknown - line 2 char 1
where´.
Coloquei SQLMonitor e aparece o comando:
update ´COMP_TIPO_CATEG´ se
where
´ID_COMP_TIPO_CATEG´ = ?
O estranho é que não é uma atulização(UPDATE) que tento fazer mas aparece que o comando enviado ao banco é UPDATE e não o INSERT que seria o correto. Bom, para terminar já aviso que fiz as configurações no dsp e nos providerflags da sql.
Se alguém puder ajudar, agradeço muito.
Hall 9000
Curtidas 0
Respostas
Brunolspp
23/02/2008
No primeiro exemplo no meu link de donloads, uma aplicação chamada ClientDataSetDBX4Features mostra de formapratica como lidar com mais de uma tabela em operações inclusive com nested datasets.
o link é este:
http://cc.codegear.com/author/795118
ve se ajuda?
o link é este:
http://cc.codegear.com/author/795118
ve se ajuda?
GOSTEI 0