Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 29-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 29-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por delphi.com.ar
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.
Siento contradecirte amigo delphi.com.ar, pero lo que hace marcelofabiani lo encuentro correcto. La propiedad SQL de un TQuery (u otro componente de Querys) es de tipo TStrings, por lo que se le ha de pasar un string o conjunto de ellos (válido/s, claro está).
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
Responder Con Cita
  #4  
Antiguo 29-09-2003
Avatar de Onti
Onti Onti is offline
Miembro
 
Registrado: jul 2003
Ubicación: La Paz - Bolivia
Posts: 500
Poder: 21
Onti Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 29-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
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:
procedure Tfrmbusqueda.Button1Click(Sender: TObject);
const
SQL = 'Select * From %s Where %s Like %s';

begin
dm.qybusqueda.Close;
dm.qybusqueda.SQL.Clear;
dm.qybusqueda.SQL.Add(Format(SQL, [Tabla, Campo, QuotedStr(Condicion+'%')]));
dm.qybusqueda.Open;
end;
Espero que con esto les sirva y continúen en el desarrollo

Saludos
Responder Con Cita
  #6  
Antiguo 30-09-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 30-09-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 30-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 30-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 30-09-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
Dos cuestiones:


Cita:
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
Al no declarar las variables me salia un error por eso es que las declare


Cita:
Antes de liberar el Form2 desde Form1, acceder al valor de la variable y ya lo tienes.
Yo estoy trabajando o la busqueda la hago en form2, como accedo y libero la form con algo como form2.close?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:52:41.


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
Copyright 1996-2007 Club Delphi