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 05-09-2003
Avatar de cmgenny
cmgenny cmgenny is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo
Posts: 71
Poder: 22
cmgenny Va por buen camino
Cambio de Componentes

Holas

Bueno ya estoy dando el paso de BDE a InterBase, como ustedes saben en la ficha interbase existen componentes parecidos a los BDE para facilitar la migracion de estos, en particular me quiero referir a el IBQuery.

Con los componetes BDE yo puedo hacer esto

with Query1 do
Begin
close;
sql.clear;
sql.add('Select * from Tabla1');
open;
end;

y todo me sale bien pero si es con el componente IBquery no me sale es mas la tabla esta asociada a un dbgrid y no muestra ningun dato. Tampoco puedo hacer esto

with Query1 do
Begin
close;
sql.clear;
sql.add('Select * from Tabla1');
sql.add('where fecha between "'+maskedit1.text+'" and "'+maskedit2.text+'" ');
sql.add('Order By fecha');
open;
end;

NI siquiera sale y me da un error de colunna desconocida.

Si me pueden decir que pasa seria un exito muchisimas gracias a todos.
__________________
Y recueda que no hay preguntas tontas, si no, tontos que no preguntan.
Sr. Genny Cris Morillo Santos
Estudiante ING. Sistemas
Santo Domingo D.N.
Responder Con Cita
  #2  
Antiguo 05-09-2003
Rudi Rudi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 78
Poder: 21
Rudi Va por buen camino
yo no utilizo esos componentes pero pueden ser dos cosas.

la primera.

sql.add('Order By fecha'); el campo fecha deberia ser "fecha"

sql.add('Order By "fecha"'); esto si lo escribiste bien y no estas tan dormido como yo y el campo fecha es FECHA.

lo segundo.
prueba ver lo que tiene el sql antes de abrir a ver si el formato de las fechas que traen maskedit1.text y maskedit2.text estan correctos.

yo en lo personal utilizo los parametros en este tipo de consultas y me ahorro el concatenamiento de cadenas
sql.add('where fecha between :Param1 and :Param2');
sql.parambyname('Param1').asdate := strtodate(maskedit1.text );
sql.parambyname('Param2').asdate := strtodate(maskedit2.text );

espero que te ayude y si no disculpa pero tengo mucho sueño.
Responder Con Cita
  #3  
Antiguo 05-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
¿Da un error del motor o da un error Delphi?...
Te recomiendo este hilo: http://www.clubdelphi.com/foros/show...&threadid=3185
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 06-09-2003
Avatar de cmgenny
cmgenny cmgenny is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo
Posts: 71
Poder: 22
cmgenny Va por buen camino
Post

Holas

Lo que me dices Rubi funciona bien si solo usas un solo parametro si usas dos me dices param2 desconocido o no encontrado. Porque pasa esto.

Sobre lo que me dices delphi.com.ar el error es del motor de base de datos no de delphi, yo creo que es que no entiende bien la forma en que concateno los datos. Necesito documentarme acerca de la igualdad en interbase es =: y en BDE es =, es cierto pero ni asi me funciona la concatenacion de la fecha me dice que un error como de conversion.

ahora me gustaria saber que es mejor enviarle parametros como me dice Rubi o concatenarlos.

Muchisimas gracias por su ayuda.
__________________
Y recueda que no hay preguntas tontas, si no, tontos que no preguntan.
Sr. Genny Cris Morillo Santos
Estudiante ING. Sistemas
Santo Domingo D.N.
Responder Con Cita
  #5  
Antiguo 07-09-2003
Rudi Rudi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 78
Poder: 21
Rudi Va por buen camino
hola, revise de nuevo y probé lo que quieres hacer con esos componentes y no me dieron problemas de ningun tipo, este fue el codigo que utilice basado en tu ejemplo:

with IBQuery1 do
Begin
close;
sql.clear;
sql.add('select * from "Tabla1" where "Fecha" between :F1 and :F2 order by "Fecha"'); ***
Prepare;
ParamByName('F1').AsDate := StrToDate(MaskEdit1.Text);
ParamByName('F2').AsDate := StrToDate(MaskEdit2.Text);
open;
end;

*** esa linea de codigo donde asignas la consulta la coloque para que vieras la consulta que utilicé, mediante el uso de parametros no te hara falta incluirla en el codigo solo en el sql del componente. lo que te quedaria el codigo asi:

with IBQuery1 do
Begin
close;
Prepare;
ParamByName('F1').AsDate := StrToDate(MaskEdit1.Text);
ParamByName('F2').AsDate := StrToDate(MaskEdit2.Text);
open;
end;

y esto funciona bien.

espero que te ayude
Responder Con Cita
  #6  
Antiguo 07-09-2003
Avatar de cmgenny
cmgenny cmgenny is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo
Posts: 71
Poder: 22
cmgenny Va por buen camino
Si esto funciona perfectamente gracias.

pero la pregunta mia es.
Que es mejor hacer las cosas enviando parametros o concatenando los datos.

y si fuera concatenando como lo hago, pero lo de los parametros funciona bien.
__________________
Y recueda que no hay preguntas tontas, si no, tontos que no preguntan.
Sr. Genny Cris Morillo Santos
Estudiante ING. Sistemas
Santo Domingo D.N.
Responder Con Cita
  #7  
Antiguo 07-09-2003
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
Veras, la cuestión es sencilla, si no me equivoco el error que esta dando no es de concatenación, le estas pasando una fecha como un Stirng, Posiblemente la fecha pueda ser 30/01/2003 (30 de enero de 2003), el problema es que interbase que es muy pijo espera que le pases la fecha en formato Ingles... es decir... 01/30/2003 por tanto si le pasas el formato ESPAÑOL resulta que es capaz de encontrar el dia 1 pero al tratar de convertir el mes 30... Casca jjejje

Puedes cambiar el formato de esa fecha usando dos funciones:

FechaEsp := '30/01/2003';
FechaIng := FormatDateTime('mm/dd/yyyy', StrToDate(FechaEsp));

//Ahora FechaIng es igual a '01/30/2003'

Prueba y ya me cuentas si con eso te va bien, un saludo
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 23:45:39.


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