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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
DBEdit dependiente de dos campos de distintas tablas

Hola a todos:

Tengo 2 problemas, el primero (y más importante) es que es la primera vez que me enfrento a una base de datos.

Y el segundo es el siguiente:

Estoy trabajando con Delphi 5 y paradox con W98 y quiero hacer una agenda de citas para una peluquería. Para ello he creado 4 tablas:

TablaEmpleados, de la que necesito el campo codigoempleado
TablaCitas ligada como master-detail a la anterior por el campo codigoempleado y que contiene 24 campos (uno para cada media hora), otro campo que es la fecha, otro campo que es el código del cliente y otro que es el código del empleado.
TablaFechas que contiene las fechas en las que se han añadido las fechas

TablaClientes (de la que necesito el código de cliente).


He puesto 24 DBEdit (uno para cada hora) con el datasource correspondiente a la tabla de citas, y DBlistbox con el datasource correspondiente a la tabla de empleados para que cada vez que seleccione el empleado me salgan sus citas.

Hasta ahí todo va bien:

Lo que ahora necesito hacer es ligar todo esto con la fecha (que obtengo de un TMonthCalendar).

Como resumen después de este rollo.

Necesito que al seleccionar en el TListBox un empleado me salgan las citas que este tiene en los DBEDit (pero únicamente las de la fecha que está marcada en el TMonthCalendar).

Espero haberme expresado bien

Gracias por la atención y perdón por el rollo.
Responder Con Cita
  #2  
Antiguo 19-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Respecto al primer problema, todos nos hemos tenido que enfrentar por primera vez a una base de datos, ¡ánimo!

Respecto a lo segundo, puedes usar un filtro en la tabla de citas, de este modo:

Filter := 'fecha = ' + QuotedStr(FormatDateTime ('dd/mm/aaaa', MonthCalendar.Date));
Filtered := TRUE;
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 19-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
Gracias Andrés:
Ahora me viene el segundo problema (derivado del primero por supuesto), ¿donde y como pongo el filtro?

Gracias por la antención.
Responder Con Cita
  #4  
Antiguo 19-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
Bueno, mirando otro post que había por ahí ya vi como hacerlo. He hecho lo siguiente

procedure TFormularioPrincipal.CalendarioClick(Sender: TObject);
begin
modulodedatos.Tablacitas.filter := 'fechacita = ' + QuotedStr(FormatDateTime ('dd/mm/aaaa', calendario.Date));
modulodedatos.tablacitas.Filtered := TRUE;
end;


Ahora el problema que tengo es que me salta un error porque la conversión esa me la hace así: "19/06/jueves", en vez de "19/06/2003" y claro me dice que no es un dato válido.

¿que es lo que hay mal?
Responder Con Cita
  #5  
Antiguo 19-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Las propiedades Filter y Filtered pertenecen a los Datasets, ya sea un TTable, un TQuery ...

¿Dónde y cómo? Puesto que cambias la fecha en ejecución, lo lógico es que cuando cambie el MonthCalendar asignes el filtro. Puedes dejar Filtered = TRUE desde diseño y una fecha imposible para que por defecto no aparezca ningún registro, y cada vez que el peluquero (digo el usuario ... je, je ) cambia la fecha reasignas la propiedad Filter.

Si te referías a qué tabla, debes ponerlo en la tabla de citas, supongo que esta tabla la tienes ligada en Master-Detail a Empleados o algo así, por lo que no te dije de filtrar también por empleado.

...

Uff!! No tan deprisa, acabo de leer tu respuesta, me equivoqué, debes poner 'dd/mm/yyyy' (estaba pensando en castellano año, y es year).
__________________
Guía de Estilo
Responder Con Cita
  #6  
Antiguo 19-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
Si cierto, a lo del yyyy llegué justo después de postear mi mensaje, ahora tengo otro problema...

Al crear la tablacitas lo he creado con un índice secundario para ligarlo con el master (en el campo codigo de usuario), ahora cada vez que introduzco datos me salta un error que me dice que el índice es ReadOnly ¿como puedo solucionar esto?.

Gracias por anticipado y perdón por la lata que estoy dando con este tema.
Responder Con Cita
  #7  
Antiguo 19-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La tabla citas tiene que tener una clave única, aunque sea un autoincrementado, sino no te funciona y te da el error que reportas.

Un Saludo.
Responder Con Cita
  #8  
Antiguo 20-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
Muchas gracias Marcos, le he creado un indice primario autoincrementado y funciona pero ¿por que sucede así?, ¿Es necesario que todas las tablas de detalle lo lleven?.
Responder Con Cita
  #9  
Antiguo 20-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola Fortran:

No te contesté a esa pregunta porque hacía años que no me aparecía ese error y no recordaba la causa. Leyendo la respuesta de Marcos me acordé de que efectivamente, ese error salta en Paradox si no halla ese índice primario.

En realidad es aconsejable definir siempre una clave primaria para Paradox (en otras BD también), vaya a ser una tabla maestra o de detalle, puesto que Paradox lo necesita como referencia para actualizar los registros insertados / modificados (es la forma de tenerlos identificados inequívocamente). Si te resulta difícil de mantener esa clave, la idea de que sea un Autoincrementativo es la más adecuada.

De hecho hace ya años hice un programa para una escuela que en un principio usaba como clave primaria en varias tablas un AutoInc. Luego me tuve que arrepentir y los cambié todos por Integer, encargándome de asignar esos valores "a mano" (para calcular el último valor puedes lanzar un SELECT MAX(ID_CLAVE) FROM TABLA cada vez que vas a dar de alta un nuevo registro). La única tabla donde dejé el AutoInc fue la de asistencias (algo parecido a lo tuyo de Citas) porque es una tabla que genera muchos registros y no es eficiente cada vez asignarle el nuevo MAX + 1, así que lo dejo en manos del BDE.

Aunque es de las pocas ventajas que le veo, otra ventaja de los AutoInc es que en una consulta de inserción en la que tomas datos de otra consulta, el BDE te genera esa clave automáticamente, si no sería casi imposible mediante SQL.

Resumiendo: Usa SIEMPRE claves primarias en Paradox, y campos AutoInc sólo cuando sea una gran ventaja por eso que te he comentado; si no, mejor un Integer.
__________________
Guía de Estilo
Responder Con Cita
  #10  
Antiguo 20-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Bueno ayer no tenía mucho tiempo, aunque veo que Andrés ya te ha aclarado tu pregunta, yo te decía aunque sea un autoincrementado, es decir no debiera ser autoincrementado, como ya te ha dicho Andrés conviene que sea un campo que tu mismo incrementes, con un entero debiera de servirte.

Un Saludo.
Responder Con Cita
  #11  
Antiguo 24-06-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 21
fortran Va por buen camino
Gracias a los dos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 07:14:57.


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