Solicitud SQL en Delphi usando un Edit

Hola a todos,

para realizar una selección de un conjunto de registros que cumplen la condición Cod_Fil=('el texto de un edit') de una tabla Estudiante y mostrarlos en un DBGRID, he utilizado un Componente Query cuyo propiedad SQL contiene el siguiente texto:
Select all
From Etudiant
Where Etudiant.Cod_fil=:Saisie

donde (Saisie) es el nombre del parámetro que lleva el valor a introducir en(Edit.text) (propiedad params de Query)
el código de la instrucción Delphi es:
Query1.Parabyname('saisie').asinteger:=strtoint(edit1.text);
Pero durante la ejecución, el depurador me notificó la siguiente excepción:
Exception 'EDBEngineError' con el mensaje uso incorrecto de la palabra Clave Elemento: From
Número de línea 2: Proceso detenido
¿Qué hay que hacer para filtrar una tabla al introducir el valor del campo sobre el que se quiere hacer la selección?

12 respuestas

  1. Hola

    Creo que soy totalmente capaz de resolver este problema de consulta parametrizada. porque en mi base de datos Delphi el 90% de mis consultas son del tipo.
    El tiempo se acaba. mañana si me acuerdo me conectaré y daré la respuesta a tu problema

    buena suerte
    3
    1. hola

      estoy aquí para querer dar una solución a tu problema:
      lo que pido es que me detalles la estructura de cada tabla que constituye la consulta (al menos los campos importantes y su tipo: numérico, alfabético o alfanumérico)
      1
      1. ¿Cómo crear una consulta parametrizada pero el parámetro toma los nombres de columnas de otra tabla?
        1
        1. Tengo un serio problema, sobre todo cuando hay que usar consultas parametrizadas, porque siempre genera un mensaje de error indicando que el parámetro no es reconocido.
          ¿Puedes darme un buen código para lograrlo?

          Atentamente
          Vieux Mukal
          1
          1. Hola,
            Creo que te falta el * en tu select. Los mensajes de error de los SGBD no siempre son muy pertinentes: te señalan un problema en el FROM porque no esperan verlo justo después del ALL.
            Intenta con: SELECT * FROM etudiants...

            Nos vemos
            -1
            1. cómo usar una consulta en Delphi pero el parámetro de esta consulta es un campo de una tabla
              0
              1. SELECT * FROM MyTable1 WHERE MySearchID IN (SELECT MySearchID FROM Table2)
                0
            2. hola

              aquí está cómo debes proceder:

              era importante definir bien tu arquitectura para poder resolver bien tu problema. parto de la idea de que codFiliere es un campo de la tabla Estudiante. supongo que los campos de la tabla Estudiante son: num estudiante, nombre de estudiante, código de filiere, etc
              en tu formulario :
              coloca un componente TDBlookUpComboBox, y selecciónalo haciendo clic sobre él
              en Inspector de objetos, aplica estas propiedades :
              NOMBRE : dlcCodFiliere
              LIST SOURCE : dataSourceEtudiant (el dataSource de la tabla Estudiante)
              LIST FIELD : cod_Filiere (o Nombre filiere)
              KEY FIELD : cod_Filiere
              luego
              coloca un tButton (ejemplo botón OK / EJECUTAR)
              en la parte inferior coloca un TDBGrid (ahí es donde se mostrará el contenido de tu consulta una vez que hagas clic en OK)

              vas a parametrizar ahora tu Query
              Selecciona desde el Árbol de Objetos, haz clic en su signo +, clic derecho en Param. haz clic de nuevo en AÑADIR ELEMENTO del menú contextual
              en inspector de objetos : indica DATA TYPE con ftString
              indica también NOMBRE escribiendo ParamCodFiliere
              puedes guardar...

              luego
              evento On Click de tu botón, escribes el sql de tu consulta del tipo :

              ...
              begin
              query1.SQL.Clear;
              query1.SQL.Add ('SELECT TblEleve.elvNum, tbleleve.ElvNom, tblEleve.CodFiliere, ... ');
              query1.SQL.Add ('FROM ...');
              query1.SQL.Add ('INNER JOIN .... ON... ');
              query1.SQL.Add ('WHERE (codFiliere = :ParamCodFiliere) ');
              query1.SQL.Add ('ORDER BY ... ');
              query1.ParamByName ('ParamCodFiliere').AsString:=dlcCodFiliere.Text;
              query1.Open;
              end;
              ...

              enfin, debes parametrizar tu TDBGrid
              selecciona tu dbGrid
              en Inspector de Objetos, indica su dataSource. corresponde al datasource de la consulta query1

              ya está, esto DEBE funcionar sin problema
              90% de mis consultas están parametrizadas, incluso con parámetros en 3 niveles y funciona así

              ánimo

              Eric
              0
              1. Hola,
                pero dónde encontrar el Árbol de Objeto de la Query;
                0
              2. en la opción Parameters en la esquina inferior izquierda (propiedad de la consulta)
                0
            3. hola

              olvidé un detalle:
              Selecciona tu componente Query1
              en el Inspector de Objetos, establece el valor DATABASENAME
              Propiedad ACTIVE = False
              en la línea SQL del Inspector de Objetos, haz clic en el botón ...
              pega la instrucción de tu consulta como sigue:

              SELECT TblEleve.elvNum, tbleleve.ElvNom, tblEleve.CodFiliere, ...
              FROM ...
              INNER JOIN .... ON...
              WHERE (codFiliere = :ParamCodFiliere)
              ORDER BY ...

              NOTA: que empiece por SELECT y termine por ORDER BY

              luego haz clic en Aceptar para cerrar esta pequeña ventana.

              Si funciona, sería un placer que lo hicieras saber

              ERIC
              0
              1. ¡Hola a todos!
                Soy aficionado a Delphi, mi sueño es algún día lograr crear una aplicación.
                Me gustaría encontrar personas que me ayuden para poder intercambiar o compartir lo que sé.
                SALUDOS MADJID
                0
                1. Dado que configuraste el atributo cod_fil con ":saisi", debes especificar la naturaleza de ese parámetro. haces clic en la consulta en cuestión y en la línea PARAMS del inspector de objetos seleccionas los tres puntos (...) y ves la lista de parámetros que has utilizado en la consulta. seleccionas el parámetro en cuestión y en la línea datatype del inspector de objetos tomas ftstring.
                  intenta y dime las novedades.
                  aquí mi correo angex140@yahoo.fr
                  0