Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Variables en sentencias sql (https://www.clubdelphi.com/foros/showthread.php?t=22489)

ekimo 16-06-2005 21:00:00

Variables en sentencias sql
 
Que tal como estan.
Estoy usando MySql 4.0 y MySql Front, alguien sabe como usar variables o parametros en las consultas de MySql, es decir hago una consulta por ejemplo.

Select Nombre,Direccion From Datos where nombre='algo'

Donde 'algo' es la variable o parametro.

Les agradesco su atencion y ayuda.

roman 16-06-2005 21:02:13

¿Qué componentes usas?

Normalmente se anteponen dos puntos al parámetro:

Código SQL [-]
Select Nombre,Direccion From Datos where nombre=:algo

// Saludos

el_barto 16-06-2005 21:10:47

ahhh osea que si manejo un edit por ejemplo para hacer una busqueda es asi??

Código:

Select Nombre,Direccion From Datos where nombre=:edit.text

roman 16-06-2005 21:18:04

No.

Ten presente que Delphi* y SQL son dos lenguajes completamentes separados. SQL no podrá entender qué le quieres decir con edit1.text ya SQL sólo entiende de nombres de tablas y campos.

De hecho SQL ni siquiera entiende los dos puntos. Estos son simplemente para que la componente Query sepa que se trata de un parámetro pero tú tienes que proporcionarles es valor. Por ejemplo:

Código Delphi [-]
Query1.SQL.Add('Select Nombre,Direccion From Datos where nombre=:algo');
Query1.ParamByName('algo').AsString := Edit1.Text;
Query1.Open;

Si Edit1.Text contiene 'juan pérez', al servidor SQL lo que le llega es:

Código SQL [-]
Select Nombre,Direccion From Datos where nombre='juan pérez';

* Como esta pregunta está en el foro de MySql realmente no estoy cierto de que se refiera al uso de componentes con Delphi.

// Saludos

el_barto 16-06-2005 21:27:20

SISISI pregunataba para delphi entonces no estsba perdido gracias sigan con lo suyo

dmagui 16-06-2005 23:13:23

Y si yo uso un DataSet y lo que quiero es insertar en mi tabla productos, es algo parecido a esto??

Código:


procedure TForm2.Button3Click(Sender: TObject);
var
algo : string
begin
DataSet1.InsertSql.Add('insert into producto(cod_prod) values (:algo)');
DataSet1.ParamByName('algo').AsString := Edit1.Text;
end;

estoy errada?

roman 16-06-2005 23:39:39

Cita:

Empezado por dmagui
estoy errada?

En principio no lo estás. Sólo que me confunde un poco esto de "uso un DataSet". DataSet es un término genérico para denotar a todas las componentes de acceso a datos que derivan de la clase TDataSet. Puede ser un Table, Query, IBTable, IBQuery, ADOTable, ADODataSet, ZQuery, ZTable, entre muchos, muchos otros. Y aunque me parece que la mayoría usa la notación :parametro creo recordar que algunas no. Así que tendrías que ser más específica en cuanto a que componentes usas (o probarlo tú misma).

Por otro lado, observa que así como usé AsString en el ejemplo, podrías usar AsInteger, AsFloat, AsBoolean, AsDateTime, etc. Escoge el más adecuado al tipo de datos del campo en la tabla.

// Saludos

jachguate 17-06-2005 00:56:25

Cita:

Empezado por roman
Si Edit1.Text contiene 'juan pérez', al servidor SQL lo que le llega es:

Código SQL [-]
Select Nombre,Direccion From Datos where nombre='juan pérez';

Hola Román.

Lamento diferir con vos en este punto, pero esto no es cierto en todos los casos. Muchos de los motores SQL existentes hoy en día proveen, a través de sus distintos API's, soporte para el uso de parámetros.

De hecho, en algunos (como oracle por ejemplo), es recomendable que se usen parámetros, pues se facilita la reutilización de planes de ejecución minimizando la carga por este proceso en el servidor.

Cuando usas parámetros, y el servidor los soporta, delphi envía la sentencia convirtiendo los identificadores de parámetros si es necesario, de manera que sea correctamente interpretado. Podria enviarse entonces, por ejemplo:

Código SQL [-]
Select Nombre,Direccion From Datos where nombre=?

y luego via API asigna el parámetro como 'juan perez'.

Hasta luego.

;)

mikexxi2 17-06-2005 01:09:11

Explicacion
 
Gracias por su aportacion, explico que componentes uso,
uso Mysql version 4.0 y MysqlFront como visor, desde aqui quiero hacer consultas para filtrar datos y guardarlas para usos posteriores, obviamente despues la condicion cambiara, quiero solo cambiar el valor de la variable sin tener que editar la consulta.
segun lo que dice Roman la consulta quedaria:

Select nombre, direccion from datos where nombre=:algo

Ok, y perdonen si peco de burro, pero donde declaro la variable o parametro algo y cuando ejecuto la consulta como le doy los valores.

roman 17-06-2005 01:09:27

Cita:

Empezado por jachguate
Lamento diferir con vos en este punto

No lo lamentes. Es más que bienvenida tu observación. Yo me estaba dejando de lado todos los "Prepared statements" ( :( gulp)

// Saludos

roman 17-06-2005 01:13:40

Cita:

Empezado por mikexxi2
explico que componentes uso,
uso Mysql version 4.0 y MysqlFront como visor, desde aqui quiero hacer consultas para filtrar datos y guardarlas para usos posteriores

Ya, ya, o sea que de Delphi nada :(

No creo que esto se pueda hacer con MySqlFront pero tendría que revisarlo.

// Saludos

mikexxi2 17-06-2005 21:37:55

Ya decia yo
 
Si tambien tengo la impresion de que no se puede, y para hacerlo habria que usarlo desde delphi u otro lenguaje con componentes que permitan usar parametros. Pero uno de mis jefes esta convencido en que si se puede, claro el nunca lo ha hecho, pero esta "segurisimo", y si no lo logro yo soy el que no sirve, cualquier parecido a la realidad es una porqueria.


La franja horaria es GMT +2. Ahora son las 00:19:41.

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