Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como Realizar una consulta desde un Tedit? (https://www.clubdelphi.com/foros/showthread.php?t=28910)

ing.cagn 06-01-2006 04:25:03

Como Realizar una consulta desde un Tedit?
 
Hola, sucede que hice una aplicación en delphi, la cual almacena cierta cantidad de datos en un tabla, sucede que necesito hacer una consulta a la base de datos desde un texbox o Tedit como se llama originalmente en Delphi, pero no se como debo escribirlo puesto que me saca un error cuando intento activar la consulta..

ejem..

Select *from Tabla1 Where campo= BUSCAR.Text

Al consultarla me sale un error, supongo que me falta codigo en algun lado o no se que cosas, lo cierto es que no funciona...

lo que pasa es que el reporte que necesito imprimir debe ser filtrado, mejor dicho de las filas de la tabla solo puede ser impresa una fila, y es la que el usuario debe especificar por medio de un TEDIT.. si hay otra manera de hacerlo agradeceria me ayudaran..

Gracias!:cool:

Héctor Randolph 06-01-2006 04:53:39

Una forma de hacerlo
 
Hola ing.cagn

Suponiendo que utilizas algún componente como el TQuery para hacer la consulta entonces puedes enviar el contenido del TEdit como un parámetro, por ejemplo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM tabla1 WHERE campo=:mitexto');
    // Envías como parámetro el texto contenido en el TEdit
    ParamByName('mitexto').AsString:=Edit1.Text;
    Open;
  end;
end;

Observa que para indicar que se trata de un parámetro se utilizan los dos puntos antes del identificador :mitexto.

Espero que te sea útil.

dec 06-01-2006 05:07:11

Hola,

Se me adelantó Héctor, e hizo bien, porque el método que propone tal vez sea el más indicado y elegante. Empero se me había ocurrido otra respuesta (por eso digo que se me adelantó Héctor) y con ella voy.

Primeramente dices que obtienes un error al realizar la consulta SQL, pero no dices de qué error se trata, lo cual, como comprenderás, ayudaría a ayudarte. Sin embargo, he creído ver en la consulta un posible error en que no haces uso de comillas para encerrar el texto del "TEdit" de turno, y tal vez por ahí fueran los tiros.

Quédate mejor o también con lo que Héctor propone: la posible solución que propongo yo es esta:

Código Delphi [-]
var
  consultaSql: string;
begin
  // Esta será nuestra plantilla para la consulta
  consultaSql := 'SELECT * FROM Tabla1 WHERE campo = ''%S''';

  // Aquí incluimos el texto del TEdit "edFiltro"
  consultaSql := Format(consultaSql, [edFiltro.Text]);

  // Mostramos cómo queda la consulta SQL
  ShowMessage(consultaSql);
end;

Héctor Randolph 06-01-2006 05:29:01

Cita:

Empezado por Dec
Se me adelantó Héctor, e hizo bien, porque el método que propone tal vez sea el más indicado y elegante

Hola David, ese asunto de que sea el más indicado y elegante no estoy muy seguro, pero es el que más me gusta y me he acostumbrado mucho a él. De hecho en el título escribí que tan solo es una forma de hacerlo porque sé que existen muchas formas más.

En fin dejemos que sea ing.cagn quien decida cual prefiere. :)

Saludos

ing.cagn 06-01-2006 15:53:11

Otro lio
 
Gracias por responder,

les cuento: utilice como primera opción la consulta de hector, puesto que me pareció un poco mas sencilla, olvide decirles que el dato que se inserta en el tedit, es un dato numerico: 108799114, mejor dicho un documento de identidad, sucede que al ejecutarlo me devuelve un error, supuse que era por que el parametro estaba definido como string, así que decidi cambiar el campo a uno que realmente fuera un string para ver si no era otro cosa la que esta molestando, me di cuenta que efectivamente la consulta estaba bien, el problema que es el tedit no se indruce letras sino numeros, entonces hice lo siguiente:

Código Delphi [-]
procedure TForm1.printreport1Click(Sender: TObject);
begin
  with CONSULTABAUTISMO do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM db.bautismos WHERE DCI=: DCI');
    // Envías como parámetro el texto contenido en el TEdit
    ParamByName('DCI').Asinteger:=buscar.Text;
    Open;
    PRINTREPORTBAUTISMOS.Execute;
  end;
end;

end.

pero sucede que sale un pequeño error: Incompatible types: 'integer' and 'Tcaption', entonces hasta ahi llego mi felicidad, suponia que solo era cambiar eso y listo.. pero otro error.. les agradezco su ayuda..

es lo unico que me falta de la aplicación.. graciaS!

jhonny 06-01-2006 16:26:17

Hay que cambiarle un par de cositas y poner ese codigo asi:

Código Delphi [-]
procedure TForm1.printreport1Click(Sender: TObject);
begin
   with CONSULTABAUTISMO do
   begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM db.bautismos WHERE DCI= :cedula');
      // Envías como parámetro el texto contenido en el TEdit
      ParamByName('cedula').Asinteger:=strtoint(buscar.Text);
      Open;
      PRINTREPORTBAUTISMOS.Execute;
   end;
end;
end.

Si, te fijas hice dos cosas, el parametro cedula en la consulta debe estar pegado a los dos puntos ":" a menos que quieras que el nombre del parametro tenga un espacio (Bueno ademas lo cambie porque si no me mostraba la carita feliz), y luega use StrToInt para pasar de String a Integer.

Por otro lado veo que sos de Colombia y por eso te contare un secreto, si tu haz visto noticias te puedes dar cuenta que los numeros de cedulas van a cambiar y los numeros seran mas largos y creeme que ya hice la prueba con campos enteros y muchas cedulas nuevas no caben en dicho tipo de dato, asi que deberas cambiar a string. (Yo siempre que no voy a hacer operaciones matematicas con numeros los declaro String).

Bueno eso es todo espero te sirva compatriota ;).

jhonny 06-01-2006 16:40:19

Que curioso, acabo de responder este hilo y me encontre luego con este otro http://clubdelphi.com/foros/showthre...728#post124728, alli se puede ver lo que le sucedio a nuestro amigo Luis Castillo con el problema de las cedulas.

ing.cagn 06-01-2006 20:47:12

ya lo solucione:
 
Señores, muchas gracias por sus respuestas, ya pude darle solución al problema lo hice de esta manera..

Código Delphi [-]
procedure TForm1.printreport1Click(Sender: TObject);
begin
  with CONSULTABAUTISMO do
  begin
    Close;
    SQL.Clear;
    CONSULTABAUTISMO.SQL.Text:='select *from db.bautismos Where DCI='+buscar.Text;
    PRINTREPORTBAUTISMOS.Execute;
  end;
end;

end.

//Makio muchas gRacias...

Adios!!!


La franja horaria es GMT +2. Ahora son las 08:52:03.

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