Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Obtener la consulta sql que se ejecuta (https://www.clubdelphi.com/foros/showthread.php?t=40543)

pborges36 20-02-2007 17:06:16

Obtener la consulta sql que se ejecuta
 
Hola a todos. Estoy programando en delphi6 y mysql. Tengo un TQuery al cual le mando la consulta de la sig manera:

Código Delphi [-]
Query1.Sql.clear;
Query1.Sql.Add('insert into mitabla (campo1, campo2, capmpo3) values (:campo1, :campo2, :capmpo3)');
Query1.Parambyname(campo1).AsString:=edit1.text;
Query1.Parambyname(campo2).AsString:=edit2.text;
Query1.Parambyname(campo3).AsString:=edit3.text;
Query1.ExecSQL;

Ahora bien, lo que necesito es la consulta completa. Si por ejemplo hago:
Código Delphi [-]
edit3.text:=Query1.Sql.Text;

obtengo algo asi: insert into mitabla (campo1, campo2, capmpo3) values (:campo1, :campo2, :capmpo3)

y en realidad necesito la consulta con lo valores de los parametros.
habra alguna propiedad del TQuery que devuelva esto? Espero se entienda. Gracias!!.

jhonny 20-02-2007 17:16:00

Para que quieres obtener los datos que inserto el TQuery desde el TQuery cuando lo tienes en tus Edit1, Edit2 y Edit3?

pborges36 20-02-2007 17:57:03

Gracias por responder. Lo que necesito es la consulta que se ejecuto, no solo los datos de los edits.

fdelamo 20-02-2007 18:03:44

Yo estuve una vez investigando eso y no lo conseguí ...

jhonny 20-02-2007 18:22:22

A ver quizá no entiendo ¿Lo que quieres es algo al estilo Sql Monitor?

fdelamo 20-02-2007 18:25:45

Cita:

Empezado por jhonny
A ver quizá no entiendo ¿Lo que quieres es algo al estilo Sql Monitor?

En mi caso si, aunque pborges36 quizá lo quiera desde el propio Delphi (algo así como el GetText, pero con los parametros sustituidos)

fdelamo 20-02-2007 18:28:20

Se me ocurre hacer un parser ...

En el TQuery tenemos la Query, y los valores de los parametros ...

pborges36 20-02-2007 20:26:12

El parser es como el Query1.Text?

fdelamo 20-02-2007 21:25:17

Lo que quiero decir es que se puede hacer una funcion, que pasandole el TQuery, sustituya los ":miparametro1", ":miparametro2", ... por sus valores y te devuelva la query completa, pero eso si, habrá que tener en cuenta los tipos de los datos, para poner las comillas, el formato de fechas ...

waly2k1 20-02-2007 22:38:24

Rta. sencilla
 
Y por qué no lo ejecutas directamente ???
Algo así...
Query1.Sql.clear;
Query1.Sql.Text := 'insert into mitabla (campo1, campo2, campo3) values( ' + edit1.text + ', ' + edit2.text + ', ' + edit3.text + ' )';
Query1.ExecSQL;
Fijate los apóstrofes por los tipos de campos, pero en un insert creo no jode,
además así tenés la consulta real.
Espero te sirva, sino no dudes en dudar!!!. Saludos

pborges36 21-02-2007 14:18:42

Lo que sucede es que en todo el proyecto he usado el TQuery pasandole parametros. Creo que lo que voy a hacer es lo que dijo Fdelamo:

Cita:

Empezado por fdelamo
...se puede hacer una funcion, que pasandole el TQuery, sustituya los ":miparametro1", ":miparametro2", ... por sus valores y te devuelva la query completa...

Aun asi si alguien sabe como hacerlo de otra forma estaria agradecido. Gracias a todos. Saludos.

Lepe 21-02-2007 18:53:07

Puesto que trabajas con parámetros, puedes estar seguro que las comas simples y etc no tendrán fallos en el sql, así que pasamos del tema jejeje.

Algo rápido:
Código Delphi [-]
procedure VerSentenciaSql(dt:TQuery);
var i:Integer;
    Sql:string;
    ReplaceTo:string;
begin
  sql := dt.SQL.Text;
  for i := 0 to dt.params.count - 1 do
  with dt.Params[i] do
  begin
    case datatype  of
      ftDate : ReplaceTo := FormatDateTime('dd/mm/yyyy',AsDAte);
      ftDatetime: ReplaceTo := FormatDateTime('dd/mm/yyyy hh:nn:ss', AsDAtetime);
      ftTime : ReplaceTo := FormatDateTime('hh:nn:ss', Astime);
    else
      ReplaceTo := AsString;
    end;
    sql := ReplaceText(sql, ':'+Name,  ReplaceTo);

  end;
  ShowMessage(sql);
end;

pborges36 22-02-2007 20:56:17

Muchas gracias Lepe. Es mas o menos asi como encaré la funcion. El unico problema que se me presentó hasta ahora es con algunos nombres de parametros, como por ejemplo:

:nombre, :nombre1, :nombre2

En algunos casos a los parametros :nombre1 y :nombre2 toman el valor del parametro :nombre seguido del numero, 1 o 2. Pero solo es cuention de tener cuidado en los nombres de los parametros.

Tenia la ilusion de que el TQuery me devuelva la consulta completa, pero veo que no es asi.
Muchas gracias.


La franja horaria es GMT +2. Ahora son las 10:02:46.

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