FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
problema con ADOQuery y delphi6 (en una consulta sql)
Hola amigos tengo 1 problema.
Al realizar una consulta a una base de datos FireBird a una tabla DATOS La ago usando un ADOQuery y la realizo por codigo:
al compilar me da estos errores y en línea de código marcado ----------------------------------------------------------------- proyect farmac.exe raised exception class EOleExeption whit message 'dinamic sql error SQL error code = -104 Token unknown -line 2,char 1 select'. process stopped. Use steo or run to continue ------------------------------------------------------------------ Pero si omito esa línea de código y la sentencia SQL (‘select * from DATOS’), la escribo directamente en la propiedad SQL del ADOQuery mediante el inspector de objetos no me da error. Es que no me agradaría tener demasiados querys en mi aplicación y no se cuales serian los problemas que surgirían en métodos como insertar y modificar en los que necesito mandar parámetros desde mi formulario. |
#2
|
|||
|
|||
Antes de hacer el DbFarmacia.ADOQuery1.SQL.Add('select * from DATOS'); has un SQL.Clear:
Otra opción es asignar el query mediante la propiedad Text de la propiedad SQL:
Saludos... |
#3
|
||||
|
||||
Hola
Intenta esto: A mi particularmente no me gusta usar ADD en cosas asi, el add es añadir, se entiende mejor si se usa para eso. Saludos |
#4
|
||||
|
||||
¿No estás haciendo las cosas un poco desordenadas? Lo digo porque aunque no falle, me parece que estás haciendo más cosas de la cuenta... (1) Haces un Open y luego un Active ¿Eso no es redundante? (2) Luego asignas el SQL ¿Eso no debería estar antes del Open/Active? (3) Lo normal al añadir (como ya te han dicho) texto a la propiedad SQL, es limpiar lo que hay antes (Clear), porque si se pasa dos veces por ese punto, aunque la primera funcione, la segunda seguramente fallará. Creo que deberías pensar detenidamente el código que tienes escrito e intentar entenderlo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
||||
|
||||
Humilde opinion
Efectivamente tiene razon Neftali y ademas No debes usar AdoQuery.ExecSql; en una consulta, debes usar .open. ExecSql se usa para sentecias SQL Insert, Update y Delete.
A mi manera quedaria asi: DbFarmacia.ADOQuery1.Close; DbFarmacia.ADOQuery1.Sql.Clear; DbFarmacia.ADOQuery1.SQL.Add('select * from DATOS'); DbFarmacia.ADOQuery1.Open; DbFarmacia.ADOQuery1.First; |
#6
|
||||
|
||||
Aver compañeros, hagamos la evaluación del código
Esta línea es correcta aúnque está de más ya que cuando abres una consulta el componente query se encarga de establecer la conexión DBFARMACIA.ADOConnection1.Open; Estas dos líneas son incorrectas, ya que primero debes establecer el valor de la propiedad Sql del componente TAdoQuery DbFarmacia.ADOQuery1.Open; DbFarmacia.ADOQuery1.Active; La mejor manera de establecer el valor de la propiedad Sql es de la siguiente manera: DbFarmacia.ADOQuery1.SQL.Text := 'select * from DATOS' La razón de ello es que no requieres invocar los métodos clean y close, :P ya que el primero se sobrescribe, y el segundo es disparado al ser modificada la propiedad. Luego esta línea es incorrecta ya que como bien mencionan, las consultas que devuelven datos serán ejecutadas con Open DbFarmacia.ADOQuery1.ExecSQL; Esta línea está de más, ya que cuando ejecutas una consulta, ado coloca el cursor en la primera fila. DbFarmacia.ADOQuery1.First; Esta línea es correcta DbFarmacia.ADOQuery1.Close; Ateníendonos a lo comentado previamente, esta línea está de más. dbfarmacia.ADOQuery1.SQL.Clear; suerte |
#7
|
||||
|
||||
gracias a todo.........
Bueno la verdad es que hace mucho tiempo no desarrollaba algun sistema y la primera vez que uso ADO. Eso no disculpa mi deshorden como lo dijo neftali, pero gracias a todos por sus respuestas esto me ha servido mucho y con sus consejos espero mejorar y optimizar en mucho mi codigo. Ya voy a probar en este momento sus consejos y les traigo noticias |
#8
|
||||
|
||||
Bueno y en conclusion que ?
Para mi la sentencia tendria que quedar asi: Suponiendo que la conexion esta hecha y activa. Esto lo veo importante ya que si se usa el query en otra ocasion este tendra que estar vacio para llenarlo con otros datos, me parece una buena practica. Saludos |
#9
|
|||
|
|||
Caral, andas algo equivocado en cuanto a ExecSQL. Este método sirve para ejecutar sentencias que no devuelven registros, tales como Update, Insert y Delete...
Saludos... |
#10
|
||||
|
||||
Maeyanes que bueno que me lo dices ya que lo uso por todos lados.
Voy a empezar a quitarlo, creia que dejaba el query limpio, bueno asi parecian sus siglas en ingles exec= escapar, sacar y sql, pues el sql. Gracias por la aclaracion lo tomare en cuenta. Saludos |
#11
|
|||
|
|||
En todo caso sería Exec = Execute = Ejecutar...
Y el método Clear de la propiedad SQL sirve para el propósito que imaginabas que hacía ExecSQL... Saludos... |
#12
|
||||
|
||||
Gracias Maeyanes
El que diga que no aprende aqui, no ha visitado este club nunca. Saludos y gracias Maestro. Saludos |
#13
|
||||
|
||||
gracias a todos ya he modificado todas mis consultas SELECT, les quiero molestar nuevamente si es posible que me ayudeis.
Podrias darme un ejemplo de como usar el ADOQuery con sentecias sql q usen parametros como bien lo an dicho (UPDATE, INSERT o DELETE) de antemano gracias |
#14
|
||||
|
||||
Cita:
Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
consulta con un adoQuery | manu | Conexión con bases de datos | 4 | 29-09-2006 01:17:48 |
Problema con AdoQuery | marylobita | Conexión con bases de datos | 3 | 04-05-2006 20:17:54 |
Consulta sobre el componente ADOQuery | s_e_montes | Varios | 2 | 02-02-2006 21:08:36 |
Problema con ADOQuery | Sr.Scorpion | Conexión con bases de datos | 8 | 17-04-2005 21:53:02 |
Problema ADOQuery | GIVO | Providers | 1 | 29-08-2003 18:30:58 |
|