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)
-   -   Consulta de un campo con el valor de un Label (https://www.clubdelphi.com/foros/showthread.php?t=24337)

perillan 17-08-2005 11:24:35

Consulta de un campo con el valor de un Label
 
Quiero hacer una consulta con un IBQuery, que el campo a buscar se introduzca en un Combo o en un Label y el resultado a buscar lo haria en el parámetro de IBQuery.

Lo del valor en el parámetro no hay problema lo que necesito como hacer la consulta con el campo que desee como ya indique anteriormente.



Que habria que añadir para buscar en el campo que se desee.



IBQuery1.Params.ParamValues['valor1']:='combo’;



Un saludo.


Neftali [Germán.Estévez] 17-08-2005 14:08:24

Para acceder al texto del combo puedes hacerlo por la propiedad Text o con
Combo.Items[Combo.ItemIndex]

perillan 18-08-2005 12:35:22

Sí, pero como se haria la consulta?.

IBQuery1.Params...........................

jmariano 18-08-2005 13:36:33

Si no estoy interpretandote mal, para poder hacer una consulta sobre cualquier campo tendrás que reconstruir la cláusula "WHERE" cada vez que quieras buscar por otro campo (ya que no se pueden usar parámetros para especificar campos). Lo mejor sería dividir la consulta en varias líneas para así sólo modificar la parte dinámica a través de su índice. Por ejemplo, imaginando que la cláusula "WHERE" estuviera en la segunda línea de la propiedad "SQL" (teniedo en la primera la parte "select...from..."):

Código Delphi [-]
  IBQuery1.SQL[1] := 'WHERE ' + ComboBox.Items[ComboBox.ItemIndex] + ' = :valor1';
  ...

perillan 21-08-2005 12:59:51

De esta manera no me dá ningún resultado, que error puede tener el codigo.?:

procedure TPaneldeInformes.BitBtn7Click(Sender: TObject);
var
valor:string;
begin
valor:='TRASMISIONES'; //Resultado a buscar en el campo seleccionado en el combobox1.
IBQuery1.Active := False;
IBQuery1.SQL[1] := 'WHERE ' + ComboBox1.Items[ComboBox1.ItemIndex] + ' = :valor';

IBQuery1.Active := True;

jmariano 21-08-2005 16:37:58

Lo que tienes mal es que primero has de definir la cláusula "WHERE" y después el valor para el parámetro dinámico. También tienes mal la forma de pasar el valor.

La forma correcta sería así

Código Delphi [-]
procedure TPaneldeInformes.BitBtn7Click(Sender: TObject);
begin
  IBQuery1.Active := False;
  IBQuery1.SQL[1] := 'WHERE ' + ComboBox1.Items[ComboBox1.ItemIndex] + ' = :valor';
  IBQuery1.Params[0].AsString := 'TRASMISIONES'; //Resultado a buscar en el campo seleccionado en el combobox1.
  IBQuery1.Active := True;
end;

perillan 21-08-2005 18:54:35

Sigue sin darme ningún resultado ni tampoco error.

Supongo que problema puede ser en el codigo de propiedades del IBQuery, lo tengo así:

Select *from articulos

Si no hay un campo fijo para la busqueda con el WHERE que en el ejemplo seria el Combobox1, como le puedo asignar el parametro tambien del ejemplo ('=:valor). ?

jmariano 21-08-2005 19:34:56

Si no te da resultados, es decir, no te devuelve ningun registro es que, entonces, no debe de haber ningun registro donde el campo especificado en el "Combo" tenga el valor "TRASMISIONES". Fíjate si la cadena está escrita correctamente y si la almacenaste así todo en mayúsculas en la tabla.

Por cierto, la cláusula "SELECT" la tienes correcta pero si sólo tienes esa línea me resulta raro que no te haya dado error de índice al acceder al segundo elemento de la propiedad SQL del IBQuery (donde estaría la cláusula "WHERE"), salvo, claro, que tengas una línea en blanco debajo del "SELECT".

Sobre tu última pregunta no la entendí muy bien... pero si te refieres a acceder a un parámetro determinado por su nombre sería así: IBQuery.ParamByName(<NombreParametro>)

perillan 21-08-2005 21:05:18

He repasado la cláusula "SELECT" y efectivamente tienes toda la razón había una línea en blanco y ahora da un error de índice 'list index out of bounds(1)'. que se debe poner con la cláusula ("WHERE").
Un saludo y perdona las molestias que te estoy dando.

jmariano 21-08-2005 22:16:12

Percisamente, para que no te de ese error de índice tenías bien dicha linea en blanco (o, tambien, podrías poner una cláusula "WHERE" por defecto), si te lo comenté fue porque me paració rarísimo que no te lo diera si sólo tenías la cláusula "SELECT". (De lo que se trata, en realidad, es dividir la sentencia "SELECT" en líneas para despues modificar fácilmente aquellas cláusulas que han de ser dinámicas, que en tu caso es la cláusula "WHERE", y así no tener que estar repitiendo toda la consulta siempre, al menos así es como yo lo hago).

¿Revisaste la tabla a ver si existe ese valor "TRASMISIONES? ¿Te funcionó al final la consulta? (y aclárame la última pregunta porque, al menos yo, no la entendí)

perillan 22-08-2005 09:52:52

La consulta funciona perfectamente con la línea en blanco como comentastes. En la segunda pregunta lo que quiero es continuar con otra condición (la consulta con dos condiciones que se cumplan con un AND). Hechale un vistaza pues sale el error "mission operator or semicolon".



var
VISTO:string;
begin

VISTO:='BASEDATOS';
IBQuery1.Active := False;
IBQuery1.SQL[1] := 'WHERE ' + VISTO + ' = :valor' AND +ComboBox1.Items[ComboBox1.ItemIndex] ' =:valor1';
IBQuery1.Params[0].AsString :='TRANSMISIONES';
IBQuery1.Params[1].AsString :='***';//Este resultado tiene que ser (>= 1) mayor o igual a Uno

jmariano 22-08-2005 17:04:56

Lo que tienes mal es como escribiste la consulta (el "AND" y ">=" forman parte de la consulta SQL y te falto el operador de concatenación al final). Revisa lo siguiente:

Código Delphi [-]
var
  VISTO:string;
begin
  VISTO:='BASEDATOS';
  IBQuery1.Active := False;
 
  // El "AND" y el operador ">=" van dentro de la cadena de consulta
  IBQuery1.SQL[1] := 'WHERE ' + VISTO + ' = :valor AND ' + 
    ComboBox1.Items[ComboBox1.ItemIndex] + ' >= :valor1';
 
  IBQuery1.Params[0].AsString :='TRANSMISIONES'; 
  IBQuery1.Params[1].AsString :='1'; // (>= 1)
  IBQuery1.Active := True; 
end;

perillan 22-08-2005 18:20:00

Muchas gracias jmariano funciona a las mil maravillas, con personas así da gusto.
Un saludo Agustin.


La franja horaria es GMT +2. Ahora son las 14:51:47.

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