Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Como capturar sentencia SQL desde el lado cliente? (https://www.clubdelphi.com/foros/showthread.php?t=79486)

Jere_84 11-07-2012 00:06:13

Como capturar sentencia SQL desde el lado cliente?
 
Hola!, Estoy realizando una aplicación datasnap (ex midas) en delphi 2010 y me tope con un inconveniente ya que necesito obtener la sentencia SQL desde una función en la aplicación cliente. El problema es que los componentes DataSetProviderConnection + ClientDataSet que son lo que usamos del lado cliente ninguno trabaja con las sentencias ya que estos leen los datos del servidor donde se encuentra el SQLDataSet, que es el que tiene el CommnandText.
¿Alguien a podido obtener la sentencia SQL a partir de un ClientDataSet de la capa cliente?:rolleyes:

delphi.com.ar 11-07-2012 01:27:40

Normalmente los RBDMS tienen funciones para obtener las últimas instrucciones ejecutadas por cada conexión, obviamente que esto difiere en cada motor. Desconozco que motor usas y si te serviría averiguar esta info por esos lados...

Saludos!

Al González 11-07-2012 01:41:21

Cita:

Empezado por Jere_84 (Mensaje 437100)
[...] necesito obtener la sentencia SQL desde una función en la aplicación cliente [...] ¿Alguien a podido obtener la sentencia SQL a partir de un ClientDataSet de la capa cliente?

Creo que podrías apoyarte en los propios eventos de TDataSetProvider y TClientDataSet (como el evento AfterGetRecords de este último), pero antes explica por favor la razón de esa necesidad. :)

Jere_84 11-07-2012 14:07:50

Gracias
 
Bueno buscare con respecto a estos temas, el porque de todo esto es que estoy migrando una aplicación cliente/servidor de delphi 6 al datasnap de delphi 2010. Muchas de las funciones que estaban creadas estoy viendo si se pueden reutilizar o por lo menos algunas lineas de ellas. :D

Neeruu 17-07-2012 01:38:50

Hola si lo que utilizas es Interbase o Firebird... Hay aplicaciones como Sinatica Monitor o InterBase Performance Monitor que te permiten capturas las consultas e incluso analizar el rendimiento, ver desde que puesto de trabajo se ejecuto y otras cosas mas....


Espero que te sirva...

Saluda atte Neeruu!!!:)

Jere_84 01-08-2012 17:06:17

Bueno una posible solución
 
utilizando el consejo de Al Gonzalez:

Es utilizar el evento BeforeGetRecords del DataSetProvider ubicado en la aplicacion servidor, con algo parecido a lo siguiente:

Código Delphi [-]
procedure TDSServerModule.DataSetProviderBeforeGetRecords(
  Sender: TObject; var OwnerData: OleVariant);
begin
  OwnerData := SQLDataSet.CommandText;
end;

y se obtiene la sentencia en la aplicacion cliente, en el AfterGetRecords del ClientDataSet:

Código Delphi [-]
procedure TDataModuleIndi.ClientDataSet1AfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
var
  ClienteSQL: string;
begin
  ClienteSQL := OwnerData;
end;

¿Para que nos podria servir esto?

Podemos trabajar con el ClientDataSet y su propiedad CommandText, cambiando la sentencia SQL y luego asignar nuevamente la sentencia original.
Algo util cuando trabajamos con ABM en grillas.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:56:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi