Fórum Problema com ClientDataSet #206566
14/01/2004
0
Tenho um banco em IB 6 com uma tabela de candidatos e outra com seus dados especificos(mestre detalhe).
CANDIDATO -> Cod, Nome
DADOSCAND -> Cod, DTNasc, TipoCand
Para visualizar os dados tá funcionando beleza.
Estou usando um IBDataset, um DataSetProvider e um ClientDataSet para pegar os dados da tabela com os dados especificos. Porem, quando dou o ApplyUpdates(com 0 ou -1), o seguinte erro é mostrado:
SQL Parse Error:
Parameter name expected
Consequentemente, nao grava os dados no banco. Ja tentei usar o componente IBClientDataSet da paleta IBX mas nada.
Espero q vcs possam me ajudar.
Obrigado,
Eduardo
Educmelo
Curtir tópico
+ 0Posts
14/01/2004
Euclidesgc
Selecionei o campo que é a chave primária e marquei pfInkey = True na propriedade ProviderFlags.
Consegui resolver isto hoje, e encontrei essa dica procurando em outros Fóruns que eu nem sei mais quais foram... E pra tua sorte eu vi essa mensagem!
Gostei + 0
14/01/2004
Educmelo
mesmo trocando essa propriedade, o erro continua. Só para ver se esclareco mais um pouco, na minha tabela mestre ´CANDIDATO´, tenho uma trigger para gerar o codigo do candidato, juntamente com um GENERATOR.
Tem q ter alguma coisa na propriedade FieldDefs e na Params do componente ClientDataSet da tabela detalhe?
Já tentei trocar aqui de todo jeito mas ainda não tá gravando.
Obrigado!
Gostei + 0
15/01/2004
Euclidesgc
Porém tem um detalhe...
Eu estou pesquisando muito sobre isso e alterando demais meu projeto, to mexendo em tanto lugar que nem me lembro direito. Acontece que lá no meu trabalho eu consegui fazer tudo funcionar, fiquei até animado, mas quando cheguei em casa e fiz a mesma coisa que eu disse pra você fazer, não deu certo! Pode ser que a configuração no meu trabalho esteja diferente do que eu estou fazendo em casa, só vou ver amanhã. Mas se você descobrir como fazer me manda um e-mail. Eu farei o mesmo. Isso serve pra todos que estão lendo também!
Valeu e até mais.
Gostei + 0
15/01/2004
Brunolspp
[]´s
Gostei + 0
15/01/2004
Euclidesgc
afarias escreveu:
Vc configurou a ´chave primária´ nos TFields do IBQuery (duplo-clique no IBQuery, adicione todos os campos, configure a propriedade PROVIDER FLAGS dos TFields q são chave para InKey = TRUE)
Configure o DataSetProvider para UpdateMode = WhereKeyOnly (isso é só uma forma de usar, depois vc pode dar uma lida sobre as diversas opções e ver o q mais se adequa)
Se seu SQL tiver parâmentros, chame o método FetchParams do ClientDataSet, e preencha os parâmetros antes de abrir o ClientDataSet.
T+
já fiz e o resultado foi o mesmo.
quando dou um click em fecthParams nao acontece nada
[]´s
Paulo.
_____________________________________________________________
afarias, obrigado por tentar me ajudar, o problema era o meu ibx que estava com algum bug. fiz a atualização e funcionou perfeitamente, conforme artigo da edião 45.
PARA AQUELES QUE ESTÃO COM O MESMO PROBLEMA atualizem o ibx, no link abaixo.
http://www.theclub.com.br/site/download/Arq.aspx?Ling=98&Cat=09
[]´S Paulo
Gostei + 0
15/01/2004
Educmelo
Como é o corpo dessa procedure q vc colocou no banco?
Obrigado
Gostei + 0
15/01/2004
Euclidesgc
CREATE PROCEDURE STP_CLI_CODIGO
RETURNS (CODIGO INTEGER)
AS
BEGIN
CODIGO = GEN_ID(NOME_DO_GENERATOR, 1);
SUSPEND;
END
Pra usá-la vc já sabe. Coloca um componente IBStoreProc e no evento BeforePost do IBClientDataset tu chama a procedure. Faz o código d tabela (que provavelmente é a chave pimária) receber o retorno da storeProcedure.
[b:b7ae512a2a]Infelizmente estou preocupado com o IBClientDataset, uso o Delphi 7 e percebi que após um atualização da paleta, o componente deixa de existir!
Por quê??? Será que tem algum problema sério com ele?
Se alguém souber a razão disso seria bom reportar aqui no fórum!
Até mais![/b:b7ae512a2a][/b]
Gostei + 0
15/01/2004
Euclidesgc
CREATE PROCEDURE STP_CLI_CODIGO
RETURNS (CODIGO INTEGER)
AS
BEGIN
CODIGO = GEN_ID(NOME_DO_GENERATOR, 1);
SUSPEND;
END
Pra usá-la vc já sabe. Coloca um componente IBStoreProc e no evento BeforePost do IBClientDataset tu chama a procedure. Faz o código d tabela (que provavelmente é a chave pimária) receber o retorno da storeProcedure.
[b:4ea3129ae8]Infelizmente estou preocupado com o IBClientDataset, uso o Delphi 7 e percebi que após um atualização da paleta, o componente deixa de existir!
Por quê??? Será que tem algum problema sério com ele?
Se alguém souber a razão disso seria bom reportar aqui no fórum!
Até mais![/b:4ea3129ae8][/b]
Gostei + 0
15/01/2004
Educmelo
como tenho que entregar esse programa até segunda q vem, resolvi trocar todo o meu form e estou utilizando agora somente DataSets para fazer os procedimentos entre a tabela mestre e a tabela detalhe. Sei q é mais lento, mas...
O DataSet principal é normal, com o generator e tudo mais.
No DataSet da tabela detalhe, mudei a propriedade DataSource apontando para o DataSource da tabela mestre.
Porém, se continuasse assim, no momento do post na tabela Mestre iria dar um erro, entao coloquei um DataSource em branco, e antes de dar o Post na tabela Mestre, aponto o DataSource da tabela detalhe para o em branco.
Dou o Post e volto a apontar para a tabela mestre, e depois dou o post normalmente na tabela detalhe.
Nao ficou mto bem explicado, qq duvida me fala. Vou continuar tentando arrumar aquele caso do ClientDataSet, mesmo ja tendo atualizado e paleta e perdido o componenten IBClientDataSet.
Até mais,
Eduardo
Gostei + 0
15/01/2004
Euclidesgc
Obs: Estou usando o Delphi 7.
Quando atualizei a Paleta IBX no D7 (utilizei aquele link ali em cima!) o componte IBClientDataset sumiu, porém na Instalação da Atualização, aparece uma tela falando sobre as coreções contidas no arquivo e lá diz que realmente o IBClientDataset foi removido da instlação por padrão mas se você quiser instalar é só pegar os arquivos do seguinte diretório:
C:\Arquivos de programas\Borland\Delphi7\Demos\Db\SQLClientDataset.
Então beleza. Agora eu tenho os componentes da paleta IBX Atualizados e ainda o ClientDatset. Não esqueça de macar IpfInkey = True.
Será que da certo agora?! :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)