DataSetProvider - SQL

27/03/2006

Olá....

Alguem sabe como capturar o código sql gerado pelo DataSetProvider quando é dado um ApplyUpdates?

Preciso saber qual a string UPDATE, INSERT que o DataSetProvider gera para fazer a gravação no Bando de Dados.

Agradecido,

Fabison


Fabilson

Respostas

10/03/2008

Macario

Olá,

estou com a mesma necessidade.

Alguem sabe como acessar??

Grato. :roll:


Responder Citar

10/03/2008

Brunolspp

no meu primeiro exemplo do link de downloads.

Tem uma aplicação somente sobre recursos do ClientDataSet, DataSetProvider e DBExpress4 que mostra como pegar através do SQLMonitor os comandos gerados e muita outras coisas interessantes.

http://cc.codegear.com/author/795118

Na próxima edição da revista Active Delphi vou iniciar uma série de 3 matérias sobre recursos e segredo do clientdataset para aplicar no nosso dia a dia do desenvolvimento. Baseado neste exemplo que falei, que também foi a mesma base da minha palestra no BorCon 2007.

No http://dn.codegear.com/br na seção do Delphi Day OnLine, tem uma video aula gratuita minha sobre DBExpress 4 mostrando com fazer trace na prática de comandos SQL e na verdade qualquer comando entre a aplicação e o banco de dados utilizando DBExpress 4.


Responder Citar

10/03/2008

Macario

Olá Bruno, boa tarde.

Agradeço a sua atenção.

Esqueci de citar que uso ADO (o padrao aqui é dbExpress), por este fato não posso utilizar o SQLMonitor.

A chamada inicial para a montagem do ´SQL gerado´ é a procedure

TSQLResolver.InternalDoUpdate da Unit Provider.

Estou com problemas na instrução de Insert.

So esta incluindo um unico campo na instrução.

Ate o momento nao encontrei o motivo do erro.

Os providerflags estão Ok.

É a primeira vez que faço uso em conjunto:

ADODataset + DSP+CDS+DTS

To aqui na tentativa e erro.

Qualquer dica eu aceito.


8)


Responder Citar

11/03/2008

Brunolspp

Posta a estrutura da tabela a ser usada para inserção.

Um dos modelos ideais seria adicionar os campos no adodataset, definir atraves do providerflags quem é o campo chave e colocar no updatemode do datasetprovider upwherekeyonly.

Na hora da inclusão, existe algum erro? Alguma mensagem?

No mesmo link que passei tem exemplos de uso de DataSnap com ADO.


Responder Citar

11/03/2008

Macario

Posta a estrutura da tabela a ser usada para inserção. Um dos modelos ideais seria adicionar os campos no adodataset, definir atraves do providerflags quem é o campo chave e colocar no updatemode do datasetprovider upwherekeyonly. Na hora da inclusão, existe algum erro? Alguma mensagem? No mesmo link que passei tem exemplos de uso de DataSnap com ADO.


Esta é a instrução do ADODataset


select   
  a.nr_dupli, a.nr_parc, a.nr_seq, a.dt_ocorr, a.dt_digit, a.cd_tpmovdupl,   
a.ds_obs, a.vl_ocorr, a.cd_banco, a.nr_procmult, a.cd_usuario, a.cd_banco_deposito,   
a.cd_tipo_pagto,   a.fl_anulado, a.fl_pendente, a.fl_cobreletr, a.cd_usuario_liberacao,   
C.DS_TPMOVDUPL, D.DS_TIPO_PAGTO, E.DS_BANCO, isNull(F.DS_BANCO,´Caixa´) as BANCO_DEPOSITO 
from   
DUPLI_OCORR A 
inner join TP_MOVDUPL C on (A.CD_TPMOVDUPL = C.CD_TPMOVDUPL) 
left join   TIPO_PAGTO D on (A.CD_TIPO_PAGTO = D.CD_TIPO_PAGTO) 
left join   BANCO E on (A.CD_BANCO = E.CD_BANCO) 
left join   BANCO F on (A.CD_BANCO_DEPOSITO = F.CD_BANCO) 
where  A.NR_DUPLI = 42968 and A.NR_PARC = 1 order by   A.NR_SEQ



Os campos estão adicionados tanto no ADODataset quanto no CDS, os campos chaves são: NR_DUPLI E NR_PARC com [pfinfUpdate,pfInfWhere, pfInfKey]
os demais campos com ALIAS A. estão apenas com [pfInfUpdate]
e os demais com [pfinfUpdate,pfInfWhere, pfInfKey] = false.

O DSP esta com upwherekeyonly.

a procedure
[b:1e054c0526]procedure TSQLResolver.GenInsertSQL(Tree: TUpdateTree; SQL: TStrings;
Params: TParams);[/b:1e054c0526]
monta a instrução de insert apenas com o campo [b:1e054c0526]cd_tpmovdupl[/b:1e054c0526]


Ainda nao consegui identificar onde esta o erro.

Sigo a procura :roll:


Responder Citar

11/03/2008

Brunolspp

Acredito que como você está trabalhando com JOIN, será preciso apontar no before update record as informações de tabela, ou rever as configurações dos providerflags, pois através deles já deveria star resolvendo o seu problema.

Está realmente me parecendo problema de configuração.


Responder Citar

11/03/2008

Macario

Ta cruel, pois em outros jogos = (ADODataset+DSP+CDS+DTS),
ta funcionando.

Ja revi toda a config. e ate agora nada.

Vou apelar e remover todas referencias e incluir um novo jogo.

:roll:


Responder Citar