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)
-   -   Pasar una variable a una consulta (https://www.clubdelphi.com/foros/showthread.php?t=66361)

jafera 16-02-2010 11:44:09

Pasar una variable a una consulta
 
Hola de nbuevo a todos.

Otra pequeña duda que tengo en una consulta, a ver si me explico correctamente:

Tengo un formulario en el cual en el oncreate hago un decodedate de la fecha para obtener el valor del año actual ya que lo necesito para saber si la aplicacion está trabajando en el año correcto o en un año anterior, esto funciona bien.

En este formulario tengo un boton busqueda que me abre otro formulario para buscar un código dentro de la base de datos y una consulta con parametros funciona bien pero me devuelve los 5.000 registros de la tabla:

Código SQL [-]
 
BuscarCodi.SQL.Add('SELECT '+ComboBox1.text+' FROM CAR0006 WHERE UPPER ('+ComboBox1.Text+') STARTING WITH '+QuotedStr(AnsiUpperCase(Edit1.Text))+' ORDER BY CODI');

El problema es que no se como añadir dentro de esta consulta el valor de la variable (a), año en curso, algo asi para que me devuelva solo los 475 registros del año:

Código SQL [-]
 
BuscarCodi.SQL.Add('SELECT '+ComboBox1.text+' FROM CAR0006 WHERE UPPER ('+ComboBox1.Text+') STARTING WITH '+QuotedStr(AnsiUpperCase(Edit1.Text))+' AND ANIO = (A) ORDER BY CODI');

De nuevo gracias

Neftali [Germán.Estévez] 16-02-2010 12:51:55

No lo entiendo.
¿Porqué no la añades igual que has hecho con las otras?

jafera 16-02-2010 12:55:48

Es que no se como añadirla, ya que el valor de la variable esta en otro form

Neftali [Germán.Estévez] 16-02-2010 13:08:30

Para llamarla haz referencia al nombre del form delante.

Código Delphi [-]
  
   ...  := Form2.A;

Lo que tienes que asegurarte de que en el otro form esté accesible. Para eso puedes definir una propiedad para acceder a la variable en la parte pública del form o en su defecto definir la variable en la parte pública.

jafera 16-02-2010 15:34:33

Perdonad mi ignorancia pero no encuentro como pasar el valor de la variable (a) dentro de una consulta sql.

Mi consulta es

Código Delphi [-]
 
SELECT CODI, ID_COLLA, ANIO FROM CAR0006
WHERE ANIO = 2010
ORDER BY CODI

en la linea where quiero pasarle el valor de la variable (a) que es el año en el cual trabajo, aqui no puedo poner where anio = Form.A

Sigo investigando

Josep

marcoszorrilla 16-02-2010 15:50:58

Código Delphi [-]
XX.SQL.ADD'SELECT CODI, ID_COLLA, ANIO FROM CAR0006'
XX.SQL.ADD'WHERE ANIO ='+Form.A
según el motor puede ser también:

Código Delphi [-]
XX.SQL.ADD'WHERE ANIO ='+QuotedStr(Form.A);

Un Saludo.

jafera 16-02-2010 15:51:15

Ya está, gracias Neftali, releyendo tu mensaje se me han abierto los ojos, sencillamente reescribo la consulta y ya está

De nuevo gracias

Josep

roman 16-02-2010 15:52:38

EDn el texto de la consulta pon el parámetro o variable antecedido de dos puntos:

Código SQL [-]
SELECT CODI, ID_COLLA, ANIO FROM CAR0006
WHERE ANIO = :año
ORDER BY CODI

Al momento de abrir la consulta, sustituyes el parámetro por el valor deseado:

Código Delphi [-]
Query1.ParamByname('año').AsInteger := A;
Query1.Open;

En ParamByName indicas el nombre que le hayas puesto al parámetro (que suponogo no puede llevar ñ pero eso ya es otra cuestión :)) y usas AsXXX según el tipo de datos que requieras (AsInteger, AsString, As Boolean, AsFloat, etc.)

// Saludos

Neftali [Germán.Estévez] 16-02-2010 15:59:50

AÑADO/EDITO: Parece que la cosa se solucionó..:(:o:).

Vamos a ver.
Si sabes hacer esto:

Código Delphi [-]
  BuscarCodi.SQL.Add('SELECT ' + ComboBox1.text + 
                     ' FROM CAR0006 WHERE UPPER (' +
                     ComboBox1.Text + ') STARTING WITH ' +
                     QuotedStr(AnsiUpperCase(Edit1.Text)) + 
                     ' AND ANIO = (A) ORDER BY CODI');

No entiendo porque no puedes hacer esto:

Código Delphi [-]
  BuscarCodi.SQL.Add('SELECT ' + ComboBox1.text + 
                     ' FROM CAR0006 WHERE UPPER (' +
                     ComboBox1.Text + ') STARTING WITH ' +
                     QuotedStr(AnsiUpperCase(Edit1.Text)) + 
                     ' AND ANIO = (' + Form2.A + ') ORDER BY CODI');

Si la variable es de tipo string, bastaría con eso. Si es de tipo entero hay que convertirla.

¿Puedes poner cómo es la declaración de la variable A?
¿Y dónde la tienes declarada? ¿En el mismo formulario? ¿En otro? ¿Es una variable local/privada? ¿Pública?
¿Cuando dices que no puedes es que no sabes, que te da error? ¿Qué error? ....:confused::confused::confused::confused:

Porque sino estamos "dándole vueltas al palo" como tontos. :(


PD: Otro tema es que cuando pases valores de tipo cadena/string a una SQL deben ir con comillas simples, pero de eso hablamos luego.

jafera 16-02-2010 16:13:30

Si, el tema se solucionó, lo que pasaba es que no veia como pasar el parametro a la consulta ya escrita, pero se encendió la bombilla y como comenté en mi post anterior, reescribo la consulta pasandole los parametros y ya está.

Consulta original

Código Delphi [-]
SELECT CODI, ID_COLLA, ANIO FROM CAR0006 WHERE ANIO = 2000 ORDER BY CODI

Texto con el que modifico la consulta

Código Delphi [-]
 
OrdenarGrid.Close;
OrdenarGrid.SQL.Clear;
OrdenarGrid.SQL.Text:=('SELECT CODI, ID_COLLA, ANIO FROM CAR0006 WHERE ANIO = '+IntTostr(F_ModulDades.A)+' ORDER BY CODI');
OrdenarGrid.Open

De paso he aprovechado para declarar una sola vez la variable (a) en el data module y asi la utilizan todos los forms que hagan referencia al año.

Saludos

Josep


La franja horaria es GMT +2. Ahora son las 06:04:00.

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