Newsgroup: it.comp.lang.delphi
Titolo: Data Provider

 Salve a tutti,
volevo sapere se era possibile recuperare la stringa SQL generata dal 
provider per scrivere i dati sul database (Firebird).
Grazie
Maria Grazia
--- posted by geoForum on 
http://www.delphiedintorni.it

difficile darti una risposta senza conoscere quale tipo di tecnologia
usi.
AS

La teconolcogia usata e Delphi 2005, con basedati Firebird.
MG

 La teconolcogia usata e Delphi 2005, 
delphi2005 non è una tecnologia ma un RAD.
Le tecnologie di accesso ai dati sono bde, ado, ibx, dbezpress, 
ado.net
, 
doa, zeos...
AS

 doa, zeos...
Aho! ma che palle! Ti ha detto che cosa sta usando, vedi di darci un taglio!

 ha scritto nel messaggio 
news:dlauvo$9tr$1...@newsreader2.mclink.it...

In questo caso si tratta di dbexpress... lo dico perchè ne sono al corrente.
Ciao
-- 
Riccardo

 vedi di darci un taglio! 
A cosa? 
Buona serata, Andrea.
AS

 Sei sempre pronto a discutere, puntualizzare, spigare, dettagliare etc.
Ti ha detto che cosa sta usando.  Punto e basta.

 corrente.
Quale data provides sta utilizzando (es. quello open del progetto fb
oppure uno commerciale di terze parti)?
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 oppure uno commerciale di terze parti)?
Nessuno dei due sopra menzionati.
.
Si tratta dei componenti standard di delphi2005 utilizzati
con la tecnologia dbexpress di delphi.
Per essere più precisi, i componenti coinvolti sono:
- TSQLDataSet
- TDataSetProvider
- TClientDataSet
-- 

 "premi F1".
Bhe, se vuoi reinventare la ruota ad ogni post non saro' certo io ad
impedirtelo, come tu non imporrai a me di farlo.
AS

Assodato che si parla di dbx..
La TSqlConnection ha una property che si chiama TraceCallBackEvent:
****************************************************************************
Read TraceCallbackEvent to determine whether the SQL connection is
monitoring communication between the application and the SQL server to
which it connects. For example, if the application uses a TSQLMonitor
component, that component assigns a value to TraceCallbackEvent, which
it uses to monitor SQL commands.
[cut]
****************************************************************************
Questa callback è definita cosi':
****************************************************************************
TSQLCallbackEvent = function(CallType: TRACECat; CBInfo: Pointer):
CBRType; stdcall;
****************************************************************************
Il cbinfo è di questo tipo qui:
****************************************************************************
Delphi syntax:
type
  SQLTRACEDesc = packed record
  pszTrace     : array [0..1023] of Char;
  eTraceCat    : TRACECat;
  ClientData   : Integer;
  uTotalMsgLen : Word;
  end;
  pSQLTRACEDesc = ^SQLTRACEDesc;
****************************************************************************
Il Tracecat è uno di questi:
****************************************************************************
TSQLTraceFlag = (traceQPREPARE, traceQEXECUTE, traceERROR, traceSTMT,
traceCONNECT, traceTRANSACT, traceBLOB, traceMISC, traceVENDOR,
traceDATAIN, traceDATAOUT);
****************************************************************************
Ora, questa callback viene utilizzata da tsqlmonitor; se vai a vedere i
sorgenti trovi un buon esempio di implementazione.
Imho, se si lavora un po si riesce a scremare tra i vari msg quello che
ti serve e intercettarlo.
AS

Assodato che non si parla di bdp ma di tdatasetprovider e dbx...
TSqlConnection ha una property che si chiama TraceCallBackEvent:
----------------------------------------------------------------------------------------------------
property TraceCallbackEvent: TSQLCallbackEvent;
Provides access to the callback function that executes for every SQL
command passed to or from the server.
Read TraceCallbackEvent to determine whether the SQL connection is
monitoring communication between the application and the SQL server to
which it connects.
[cut]
----------------------------------------------------------------------------------------------------
Uno dei parametri della callback è di questo tipo:
----------------------------------------------------------------------------------------------------
type
  SQLTRACEDesc = packed record
  pszTrace     : array [0..1023] of Char;
  eTraceCat    : TRACECat;
  ClientData   : Integer;
  uTotalMsgLen : Word;
  end;
  pSQLTRACEDesc = ^SQLTRACEDesc;
SQLTRACEDesc describes a message that was just passed between a
dbExpress driver and a database server. pSQLTRACEDesc is a pointer to a
SQLTRACEDesc value.
pszTrace is the command that was just passed.
eTraceCat is the category of command that was just passed. It is an
enumerated value that corresponds to a TSQLTraceFlag value:
 TSQLTraceFlag = (traceQPREPARE, traceQEXECUTE, traceERROR, traceSTMT,
traceCONNECT, traceTRANSACT, traceBLOB, traceMISC, traceVENDOR,
traceDATAIN, traceDATAOUT);
ClientData is an application-specific value supplied to the
SetTraceCallbackEvent method. When the SQLTraceDesc is accessed from a
callback supplied to TSQLConnection, this value can have any
application-defined meaning. When the SQLTraceDesc is provided by a
TSQLMonitor event, ClientData should not be used.
uTotalMsgLen is the length of the string in pszTrace.
----------------------------------------------------------------------------------------------------
Un esempio di utilizzo di questa property è incluso nel TSqlMonitor.
Con quello vedi tutto,  ma secondo me se ci si lavora un po si trova il
modo di creare una callback che magari intercetti solo gli sql legati
ad uno specifico componente.
Lo so che non è molto ma almeno è un inizio.
AS

Scusate il doppio msg. Ho fatto una cazzata con google...
AS

 AS
Grazie per lo spunto sicuramente utile.
Ciao
Riccardo
--
* Immolo - Motore di ricerca per annunci immobiliari
* web: 
http://www.immolo.it