Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2004
Avatar de orfeo
orfeo orfeo is offline
Miembro
 
Registrado: may 2003
Posts: 99
Poder: 22
orfeo Va por buen camino
ver una consulta SQL con los parametros remplazados por sus valores

Hola, estoy usando DBE+Dbase
Les paso a contar que quiero...

Nesecito ver las consultas SQL de un Tquery con los parametros remplazados por sus valores, osea:

Código:
     query.sql.add('WHERE   dni=:dni');
     query.paramByName('dni').asInteger:=2345;
     query.open
luego quiero ver la consulta sql (query.sql) con el remplazo del parametro :dni por el numero 2345, es decir 'WHERE dni=:2345'.
Osea que quiero ver la Consulta va a hacia el servidor.
__________________
Aprendamos a ser civilizados
Responder Con Cita
  #2  
Antiguo 17-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

me temo que esto no es posible, pues la sustitución se hace en el motor de base de datos, y no en el propio delphi.



disculpá la curiosidad... pero para que la queres "ver"??
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 17-04-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Hola a todos:

Como dice jachguate con parámetros nanai de la china como decimos por aqui, pero si no te importa hacerlo concatenando strings, puedes hacerlo así:

Código:
    query.sql.add('WHERE   dni= ' + (variable de dni ));
de esta forma si puedes ver la consulta enviada, grabandolo a un log, o bien si se ejecuta con el parametro /debug tu aplicacion, mostrarlo por pantalla o en otra ventana aparte.... En fin ya el método lo eliges tu.


Cita:
Empezado por jachguate
disculpá la curiosidad... pero para que la queres "ver"??
Supongo que para localizar posibles errores en el SQL no??? (un parentesis abierto, que falte una coma, etc) si la consulta la armas en tiempo de ejecución, siempre es bueno ver el sql.text

Saludos.

Última edición por Lepe fecha: 17-04-2004 a las 13:48:32.
Responder Con Cita
  #4  
Antiguo 17-04-2004
Avatar de orfeo
orfeo orfeo is offline
Miembro
 
Registrado: may 2003
Posts: 99
Poder: 22
orfeo Va por buen camino
Si es lo que queria, queria tener lo mejor de los dos mundos.. (consultas en tiempo de ejecucion, poder usar parametros y luego ver el SQL remplazado para debuger)

Para que lo queria??
Me parace muy comodo poder usar parametros, hace los sql.add() mas claros (no me gusta poner sql.add('WHERE dni=' + intToSTR(variableDNI)).
Pero todo esto deja de tener claridad cuando en tiempo de ejecucion enpezas a intercalar 'if then' con sql.add() para no quere tener casi la misma consulta en dos o mas lugares distintos.
Entonces mi GRANN IDEA erra colocar en el:

Código:
     
try
    sql.add('gran consulta')

    open  
except
  on E:exception do
        errorSQL(E,sql);
end;
Y un hermoso formulario llamano por erroSQL me mostrara un memo con la consulta remplazada y tendria una grilla para ver el resultdo de la consulta cuando la repare, junto con otras cosas mas..

pero bueno, probare con otra forma...

Alguien a probado el rempazar substring (no recuerdo el nombre de pa funcion)? dentro del TStrings del query?
Debria andar bien, salvando los casos de como puede tomar los
' ' , " , la sustiucion de fechas y de float. (mas algun otro tipo de tipo que no me viene al mente ahora)

voy a ver si pruebo por ese lado...,
O mejor aun hacer la sustitucion del Query yo mismo, se supone que hay una lista de parametros con sus tipos y valores..

Pero por ahora segire buscando ',' , ';' y otras cosas tontas entre if anidados
__________________
Aprendamos a ser civilizados
Responder Con Cita
  #5  
Antiguo 17-04-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo para ver como queda el SQL antes de abrir la consulta hago:
Código:
ShowMessage(MiQuery.SQL.Text);
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 18-04-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Wop!

Hablo de memoria, pero, por lo menos en D6, creo que existe una función para reemplazar textos dentro de una string (creo que es ReplaceText). Puedes montarte una función como esta:

Código:
function SqlConParametros(AQuery: TQuery): String;
var
  i: Integer;
begin
  Result := AQuery.Sql.Text;
  for i : 0 to AQuery.Params.Count - 1 do
	Result := ReplaceText(Result, ':' + Params[i].ParamName,  Params[i].AsString);
end;
Nota:
No recuerdo si la propiedad que te da el nombre del parámetro se llama ParamName.
Si me ha fallado la memoria y no existe la función ReplaceText, no te costará mucho programarla.
__________________
E pur si muove
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:21:04.


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
Copyright 1996-2007 Club Delphi