Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Enumerar filas de un select (https://www.clubdelphi.com/foros/showthread.php?t=57859)

tcp_ip_es 03-07-2008 08:54:56

Pues por lo que he probado no me funciona. No me reconoce la variable @fila en la segunda consulta:

Código:

AdoQuery1.SQL.Add('set @fila = 0');
AdoQuery1.ExecSQL;

AdoQuery1.sql.clear;
AdoQuery1.SQL.Add('select @fila:= @fila + 1 as fila, Cod_Factura,
Importe_Total from facturas');
AdoQuery1.Open;

Tengo un TAdoConnection con el siguiente conectionstring:

Código:

Provider=MSDASQL.1;Persist Security Info=False;Data Source=ANDC;
Extended Properties="DATABASE=andc;DESCRIPTION=Analitica DC;DSN=ANDC;
OPTION=0;PORT=0;SERVER=intranetdes;UID=andc"

El Adoquery1 utiliza dicha conexión.

La versión de MySql es 5.0.19.nt y el Driver ODBC es MyODBC Driver 3.51.
Es como si cada ejecución de consulta la tratara como una sesión distinta con lo que no reconoce la variable ya creada. Alguna idea????

Saludos, Tony

roman 03-07-2008 09:40:02

Hola Tony,

Acabo de probar y me marca este error:

Cita:

Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente.
Al parecer los dos puntos los confunde con un parámetro (y ahora me pregunto ¿cómo es que a ZEOS no le pasalo mismo?).

Afortunadamente he podido solucionarlo diciéndole que haga caso omiso del "parámetro":

Código Delphi [-]
AdoQuery1.SQL.Text := 'set @fila = 0';
AdoQuery1.ExecSQL;

ADOQuery1.ParamCheck := false; // <-- añadir esto

AdoQuery1.SQL.Text :=
  'select @fila := @fila + 1 as fila, clave, nombre from solicitante';
AdoQuery1.Open;

aunque me queda la duda de qué hacer en caso de que realmente tengamos algún parámetro en la consulta.

La cadena de conexión que usé:

Cita:

DRIVER={MySQL ODBC 3.51 Driver};SERVER=server;DATABASE=database;USER=user;PASSWORD=password;OPTION=3
y también con el driver 5.1.

// Saludos

tcp_ip_es 03-07-2008 09:56:32

Pues es verdad ahora como meteríamos un parámetro :confused: :confused:
La cuestión es que a mi no me daba tu error :
Cita:

Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente.
Me daba directamente el del ODBC:

Cita:

[MySQL][ODBC 3.51 Driver]You have an error in your SQL syntax near bla bla bla
Por eso creía que el error venía de Mysql.... debería de haber alguna forma de introducir parametros asi como cuando utilizamos las dos comillas para una comilla, o como el quotedstr :D

Saludos, Tony

P.D. Con lo que has dicho me funciona correctamente.

roman 03-07-2008 10:09:41

Cita:

Empezado por tcp_ip_es
como cuando utilizamos las dos comillas para una comilla

¡Eureka! :)

Me ha funcionado poniendo dos ::

Código Delphi [-]
AdoQuery1.SQL.Text := 'set @fila = 0';
AdoQuery1.ExecSQL;

AdoQuery1.SQL.Text :=
  'select @fila ::= @fila + 1 as fila, clave, nombre from solicitante where tipo_id = :tipoId';

AdoQuery1.Parameters.ParamByName('tipoId').DataType := ftInteger;
AdoQuery1.Parameters.ParamByName('tipoId').Value := 4;

AdoQuery1.Open;

// Saludos

tcp_ip_es 03-07-2008 10:47:49

Sabía que tenía que haber algo asi.... :D

lucasarts_18 05-07-2008 16:10:53

Hola.

Disculpen por haber abandonado este hilo, recien he tenido un tiempo para retomar esto, gracias enecumene y Román, funciona perfecto, no conocía esto de los SET en mysql, solo en MS-SQL Server :o, por eso mi equivocación inicial.

:p:p:p:p Mil Gracias, hasta la próxima.

Bye.


La franja horaria es GMT +2. Ahora son las 18:29:55.

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