Array
(
)

DataSetProvider - SQL

Fabilson
   - 27 mar 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


Macario
   - 10 mar 2008

Olá,

estou com a mesma necessidade.

Alguem sabe como acessar??

Grato. :roll:


Brunolspp
   - 10 mar 2008

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.


Macario
   - 10 mar 2008

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)


Brunolspp
   - 11 mar 2008

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.


Macario
   - 11 mar 2008


Citação:
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

#Código



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
procedure TSQLResolver.GenInsertSQL(Tree: TUpdateTree; SQL: TStrings;
Params: TParams);
monta a instrução de insert apenas com o campo cd_tpmovdupl


Ainda nao consegui identificar onde esta o erro.

Sigo a procura :roll:


Brunolspp
   - 11 mar 2008

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.


Macario
   - 11 mar 2008

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: