FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
no puedo correr consulta
Estoy tratando de hacer correr esta consulta
procedure Tfrmbusqueda.Button1Click(Sender: TObject); var busqueda:string; begin busqueda:='select * from :tabla where :campo like'''+ edit1.text+'%'''; dm.qybusqueda.Close; dm.qybusqueda.SQL.Clear; dm.qybusqueda.SQL.Add(busqueda); dm.qybusqueda.Params[0].AsString:=combobox1.Text; dm.qybusqueda.Params[1].AsString:=cb2.Text; dm.qybusqueda.Open; end; Pero cuando la hago correr me sale un error en ingles de algo relacionado a un token podria alguien decirme que estoy haciendo mal Esto es para realizar una busqueda en una base de datos mysql, lo que pienso es que el like lo estoy utilizando mal Ojala alguien me guie por el camino correcto |
#2
|
||||
|
||||
No creo que puedas poner el nombre de la tabla como parámetro. Tienes que tener en cuenta que el parámetro es del tipo String y para el servidor de BD el nombre de la tabla no es un string, es un identificador y/o parte del código del Sql.
Cuando tengas un error y publiques un mensaje en el foro, por favor envíanos la descripción completa del error! Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Cita:
Yo me inclino más a pensar en que los parámetros que le está pasando no son correctos, es decir, un nombre de tabla que no existe o un nombre de campo que no pertenece a la tabla seleccionada o algo así. En lo que sí estoy de acuerdo contigo es en que debería especificar el error que da (no le había contestado antes precisamente por eso) Nos leemos |
#4
|
||||
|
||||
Hola:
Como alternativa puedes generar la cadena de la consulta y luego realizar la consulta. es decir LSql :='SELECT * FROM '+combobox1.Text;+ 'WHERE .....'; dm.qybusqueda.SQL.Clear; dm.qybusqueda.SQL.Add(Lsql); dm.qybusqueda.Open; Salu2 a to2 |
#5
|
|||
|
|||
Hola a todos!
Creo que el problema esta al crear la sentencia SQL y las comillas, por eso cuando hago una sentencia que va a ser fija mediante código la creo en una constante asignandole variables de %s y luego construyo la consulta. Lo hago de la siguiente forma: Cita:
Saludos |
#6
|
|||
|
|||
Pues gracias por las respuestas el error que me da es el siguiente:
--------------------------- Debugger Exception Notification --------------------------- Project elsolar.exe raised exception class EDBEngineError with message 'Invalid use of keyword. Token: ? Line Number: 1'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- Haber si con esto y las respuestas que tengo puedo solucionar el problema |
#7
|
|||
|
|||
pues la respuesta de mosorio fue la que soluciono mi problema pero habia un detalle que cadetill me hizo notar y es que en el tquery no estaba especificado el dtabasename.
lo unico que me falto fue agregarle algunas lineas al codigo de mosorio aqui les mando como quedo finalmente procedure Tfrmbusqueda.Button1Click(Sender: TObject); const SQL = 'Select * From %s Where %s Like %s'; var tabla,campo,condicion:string; begin tabla:=combobox1.Text; campo:=cb2.Text; condicion:=edit1.Text; dm.qybusqueda.Close; dm.qybusqueda.SQL.Clear; dm.qybusqueda.SQL.Add(Format(SQL, [tabla, campo, QuotedStr(Condicion+'%')])); dm.qybusqueda.Open; end; Una pregunta mas esto lo muestro en un form2 que es llamado desde form1, como deberia hacer para elegir uno de los datos y mandar todos eso datos al form1. |
#8
|
|||
|
|||
Si sólo quieres enviar un campo de todos los que se muestran, yo crearí en Form2 una variable publica de tipo Variant (porque puede devolver Integers, Floats, Strings o lo que quieras) y asignarle el valor a ésta en un dlble clic o Enter o algo así.
Antes de liberar el Form2 desde Form1, acceder al valor de la variable y ya lo tienes. Si fueran varios valores a devolver, utilizaría un array dinámico de variants con el mismo procedimiento |
#9
|
|||
|
|||
Hola marcelofabiani!
No era necesario crar las variables, ya que puedes utilizar los mismos objetos en los que yo había definido como parámetros, asi te ahorras memoria definiendo las variables e implementas o asignas los valores directamente de los objetos, de todas formas no esta mal lo que has hecho, la programación es muy diversa y se hace de mil maneras, solo que estoy aprendiendo o he aprendido a ver estos detallitos que aunque no molesta con el espacio de las variables algunos piensan que es bueno ahorrar memoria ya que cuesta en el momento de utilizar la aplicación desarrollada con otras en la misma máquina. Con respcto a lo que dice cadetill me parece bien, pero si tienes declarada la qry en el DM y este esta en los diferentes módulos definidos, puedes también acceder a la misma una vez se haya ejecutado obteniendo los valores de esta. Saludos |
#10
|
|||
|
|||
Dos cuestiones:
Cita:
Cita:
|
|
|
|