![]() |
utilizacion del tquery y la propiedad params
Buenas tardes, me veo en la necesidad de preguntar si alguien puede ayudarme con el componente tquery.
Pasa lo siguiente, yo ya he realizado consultas con el componente tquery sobre una o varias tablas cargando la consulta en una variable string y luego limpiando el query y añadiendo la sentencia. asi asignando la consulta consulta1:='insert into tabla (numero) values ('+IntToStr(numero)+');'; Query1.SQL.Clear; Query1.SQL.Add(consulta1); Query1.ExecSQL; y luego cargandola y ejecutandola. El problema consiste en esto. en clase hemos visto otra manera de hacer las consultas con los querys pero no comprendo algunas cosas que utilizan para trabajar los querys, a continuacion anexare un pedazo de codigo fuente y documentare en que parte tengo las dudas a ver si alguien me puede ayudar a documentar el codigo para entenderlo mejor. procedure TForm1.FormCreate(Sender: TObject); begin Query2.Open; while not Query2.EOF do begin ListBox1.Items.Add (Query2.Fields [0].AsString); Query2.Next; end; ListBox1.ItemIndex := 0; Query1.Prepare; Query1.Params[0].Value := ListBox1.Items [0]; Query1.Open; end; **** ******** select distinct Custno from orders <------ valor inicial del query2 ************* select * from employee where custno=:Custno <-- valor inicial del query1 ************* en el oncreate si entiendo el pedazo de codigo donde hace la consulta que tiene precargada y luego carga uno por uno los nombres de los campos en el listbox pero luego viene el prepare y despues esta instruccion Query1.Params[0].Value := ListBox1.Items [0]; aqui si no entiendo que sucede, ya que desconozco el componente listbox y tambien desconozco para que se utiliza la propiedad params, tambien quisiera saber por que hace referencia la posicion 0 ¿es un arreglo? y que gana con eso, ya que inmediatamente despues hace el open ¿es lo mismo el open que el ExecSQL?, cuales son sus diferencias. luego cuando dan click en el list box entiendo como que asigna un nuevo campo a params, pero que se hace con ese campo, creo que pasa el parametro para eliminar ese campo de la consulta o algo por el estilo. procedure TForm1.ListBox1Click(Sender: TObject); begin Query1.Close; Query1.Params[0].Value := ListBox1.Items[Listbox1.ItemIndex]; Query1.Open; end; si alguien pudiera darme una explicacion sobre que son los valores params y para que son utiles, como se utilizan le agradeceria de sobre manera. Gracias Desve |
Utilización de parámetros en Delphi
Hola:
Como REGLA GENERAL Query.Open se usa para realizar una sentencia SELECT y Query.ExecSQL se usa para sentecias INSERT, UPDATE, DELETE. El componente ListBox se usa para almacenar una serie de valores, Ej: ListBox.Clear; // Limpia los valores del componente ListBox.Add('Valor 1'); // Añade el primer valor al componente ListBox.Add('Valor 2'); // Añade el segundo valor al componente ListBox.Add('Valor 3'); // Añade el tercer valor al componente Edit.Text := ListBox.Items[0]; // Asigna 'Valor 1' a un Edit Edit.Text := ListBox.Items[1]; // Asigna 'Valor 2' a un Edit Edit.Text := ListBox.Items[2]; // Asigna 'Valor 3' a un Edit // Esta sentencia y las dos siguientes hacen lo mismo. Edit.Text := ListBox.Items[1]; // Asigna 'Valor 2' a un Edit ListBox.ItemIndex := 1; // El valor activo del ListBox es el segundo Edit.Text := ListBox.Items[ListBox.ItemIndex]; // Asigna 'Valor 2' a un Edit Para acceder a los parámetros de una sentencia SQL se puede hacer de dos formas, Ej: Q.Close; Q.SQL.Clear; Q.SQL.Add('SELECT * FROM MiTabla WHERE Campo1=:PARAMETRO1 AND Campo2=:PARAMETRO2'); // Caso 1, accedemos por número. Q.Param[0].Value := 'Valor 1'; // Accede a :PARAMETRO1 Q.Param[1].Value := 'Valor 2'; // Accede a :PARAMETRO2 // Caso 2, accedemos por nombre. Q.ParamByName('PARAMETRO1').Value := 'Valor 1'; // Accede a :PARAMETRO1 Q.ParamByName('PARAMETRO2').Value := 'Valor 2'; // Accede a :PARAMETRO2 Q.Open; Ahora repasamos el código que has enviado. // Carga ListBox1 con los valores de que devuelve Query2 Query2.Open; while not Query2.EOF do begin ListBox1.Items.Add (Query2.Fields [0].AsString); Query2.Next; end; // El componente ListBox1 tiene almacenados todos los valores posibles // del campo CUSTNO de la tabla ORDERS. Para que nos muestre el primero // asignamos el valor 0 a la propiedad ItemIndex. ListBox1.ItemIndex := 0; Query1.Prepare; // Para asignar un valor al parámetro de Query1 se puede hacer por el número // de parámetro Query1.Params[0].Value o por el nombre del parámetro // :CUSTNO que sería, Query1.ParamByName('CUSTNO').Value. Query1.Params[0].Value := ListBox1.Items[0]; Query1.Open; // En el evento OnClick del ListBox repite lo mismo que en el evento OnCreate // pero le pasa como parámetro el valor seleccionado en ese momento. Query1.Close; Query1.Params[0].Value := ListBox1.Items[Listbox1.ItemIndex]; Query1.Open; Un saludo. |
Gracias, no podia haber quedado mas claro.
Ahora entiendo por ke con items[0]. no aparecen opciones y con indemindex si. y varias cosas mas. |
La franja horaria es GMT +2. Ahora son las 09:30:46. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi