GARANTIR DESCONTO

Fórum Problema com ClientDataSet #206566

14/01/2004

0

Pessoal, estou com um problema já fazem dois dias e já tentei de tudo pra resolve-lo e nao consegui.

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

Educmelo

Responder

Posts

14/01/2004

Euclidesgc

Eu estava com este problema quando usava o IBClientDataset e resolvi desta maneira:

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!


Responder

Gostei + 0

14/01/2004

Educmelo

Caro amigo,

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!


Responder

Gostei + 0

15/01/2004

Euclidesgc

Tenta usar uma StoredProcedure ao invés de um Trigger. Como eu uso o IBExpert e ele já me da o código da StoredProcedure eu não sei de cabeça como é. Amanhã quando eu chegar no trabalho eu te mando. Porém a idéia a seguinte. Você cria uma StoredProcedure que retorna o Próximo Numero do generatore no evento BeforePost do ClientDataset eu atribuo o valor retornado. Uso uma IBStoredProcedured para isso. Vê aí se da certo agora.
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.


Responder

Gostei + 0

15/01/2004

Brunolspp

Talvez a maneira mais simples de resolver seja explodindo esta operação em dois datasets, um para tabela mestre e o outro para a detalhe, fazendo o seu relacionamento através de um datasource, aí então colocando um datasetprovidre para o dataset mestre e um clientdataset para este, adicione todos os campos e em seguida crie um clientdataset para o dataset detalhe mas configure a opção datasetfield deste clientdataset para fazer o relacionamente e pronto, é só trabalhar normalmente.

[]´s


Responder

Gostei + 0

15/01/2004

Euclidesgc

[b:70f7b4e2f9]Agora tem um problema! a ùltima versão desta atualzação retira o IbClientDataset. Ele está descontinuado, o que eu acho uma grande perda, Pois até agora foi a melhor manira de se trabalhar com ClientDatasets que eu achei. (opnião de iniciante!) [/b:70f7b4e2f9]

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


Responder

Gostei + 0

15/01/2004

Educmelo

Euclides,

Como é o corpo dessa procedure q vc colocou no banco?

Obrigado


Responder

Gostei + 0

15/01/2004

Euclidesgc

O corpo da procedure é esse:

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]


Responder

Gostei + 0

15/01/2004

Euclidesgc

O corpo da procedure é esse:

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]


Responder

Gostei + 0

15/01/2004

Educmelo

caro colega euclides,

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


Responder

Gostei + 0

15/01/2004

Euclidesgc

Olha, descobri mais uma.

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar