Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Fechas en la BD y en el QUERY

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Fechas en la BD y en el QUERY Responder citando

HOLA!!!!

El programa que estoy haciendo, consiste en buscar dentro de una tabla en una base entre una fecha y otra. Yo lo tengo asi cuando meto registros en la base:
Cita:
findins(Query5, "INSERT INTO control VALUES ('"+IntToStr(val)+"','"+DateTimePicker4->Date+"','"+Query1->FieldValues["id"]+"','"+Query1->FieldValues["nombre"]+"','"+Query1->FieldValues["telefono"]+"','"+Memo5->Text+"','"+LowerCase(ComboBox3->Text)+"','"+Edit18->Text+"','"+Edit20->Text+"','"+Edit19->Text+"','"+Edit22->Text+"')");


donde la funcion findins es :
Cita:
void findins(TQuery *q, AnsiString cons)
{AnsiString consulta=cons;
q->Close();
q->SQL->Clear();
q->SQL->Add(consulta);
q->ExecSQL();
q->Close();
}


yo en esa tabla inserto el registro con la fecha que escogo en un TDateTimePicker.

Ahora en la base de datos de MYSQL lo que me muestra es esto:


lo cual me parece raro porque no me muestra la fecha sino un poco de ceros...

Y bueno, igualmente me pongo a hacer la consulta en el cual escojo las fechas con 2 DateTimePicker's, y asi la tengo:
Cita:
AnsiString consulta="SELECT * FROM control WHERE fecha > '"+DateTimePicker3->Date+"' AND fecha <DateTimePicker7>Date+"'";
Query8->Close();
Query8->SQL->Clear();
Query8->SQL->Add(consulta);
Query8->Open();


y en el DBGrid no me sale nada...

necesito que alguien me diga como meter las fechas en una campo de fecha en la bd en MYSQL y como buscarlas con un query, ya que por lo visto no tengo casi idea de lo que como hacerlo, porque me acostumbre a hacerlo secuencial.

GRACIAS!!!

P.D: si no se entiende lo que pregunto diganme porfa...
_________________
__________________________
C++ RULZ FO' EVA'
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola pablo_emiliob, en varias partes del manual de referencia de mysql esta detallado que cuando se intente insertar un fecha y esta es ilegal mysql combierte automaticamente en '0000-00-00', y en tu caso en la insercion de un nuevo campo da como ilegal porque el formato de fecha de mysql esta 'YYYY-MM-DD' si usas un tipo DATE y el rango es '1000-01-01' a '9999-12-31' y tu codigo intenta insertar con este formato ''DD-MM-YY' mas detalles
http://dev.mysql.com/doc/refman/5.0/es/date-and-time-type-overview.html
si ves en la grilla el formato que te muestra te das cuenta, para insertar una fecha debes formatear, esto se puede hacer de varias formas aqui una
Código:
AnsiString sdate;
sdate = DateTimePicker->Date.FormatString("yyyy-mm-dd");

en sdate te queda la fecha con el formato listo para insertar.
Otra solucion configurar mysql para que soporte el formato de fecha que intentas insertar 'DD-MM-YYYY' es recomendabele la primer opcion formtear las fechas.
saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

se me paso el tema de la consulta. Con el formato corregido no deberias tener problemas
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

¿Y no has probado usando parámetros? Lo digo porque, aunque era con tablas Paradox, yo tenía el mismo problema y lo resolví con ParamByName: Como el sistema ya "sabe" que tipo de dato va en cada variable sólo hay que usarlo directamente.
Código:
findins(Query5, "INSERT INTO control VALUES (:consec, :fecha, :idcliente, :nomcliente, :telefono, descripcion, ;servicio, :grupo, ...");

Y en donde usas la función:
Código:
void findins(TQuery *q, AnsiString cons)
{
     AnsiString consulta=cons;
     q->Close();
     q->SQL->Clear();
     q->SQL->Add(consulta);
     q->SQL->ParamByName("consec")->AsString = IntToSTr(val);
     q->SQL->ParamByName("fecha")->AsDateTime = DateTimePicker4->Date;
     [...]
     q->ExecSQL();
     q->Close();
}

Así no tienes que estar haciendo conversiones. Mira también la ayuda de TParam y de TFiledDefs.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.