Club Delphi  
    Paypal   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 09-05-2004
vhirginia vhirginia is offline
Miembro
 
Registrado: mar 2004
Posts: 64
Poder: 23
vhirginia Va por buen camino
hola compañeros,
lo que queremos hacer es mostrar todos los registros de la tabla maestra, pero sólo un campo, en este caso NIF, que son todos los NIF de los clientes que he creado. Con toda esta información en un DBLookUpComboBox, lo que queremos es seleccionar uno y crear una factura sobre dicho cliente, factura que pertenecerá a la tabla detalle, que está únida con la maestro por el campo NIF. Esperamos habernos explicado bien. Realizamos lo de poner un TTable y un DataSource en el form donde creamos el nuevo registro para la tabla facturas, para que no me pusiera lo de "Circular Reference" pero después de conseguirlo me dió el último problema aquí expuesto, es decir, lo de Key Violation. Espero que nos hayais entendido

Muchísimas gracias.
Responder Con Cita
  #2  
Antiguo 09-05-2004
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
Como ya dijo Andrés anteriormente, el error Keyviolation, no tiene nada que ver con lo planteado anteriormente, esto ocurre únicamente cuando se repite la clave maestra de la tabla en cuestión.

Por otra parte la tabla facturas no debe de ser detalle de la de clientes, cuando queramos ver todas las facturas de un cliente, no tenemos más que poner un filtro o atacar con SQL:
Código Delphi [-]
Facturas.Filter:='NIF = '+QuotedStr(Edit1.Text);
Facturas.Filtered:=True;

Código SQL [-]
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * From facturas Where Nif = '+QuotedStr(Edit1.Text));
Query1.Active:=True;

Y para finalizar la factura será maestro de sus lineas que estarán en otra tabla.

Por lo que el DbLookUpComboBox que muestra los clientes no hará más que mostrar los clientes para elegir uno.

Finalmente sería conveniente eliminar la relación maestro detalle entre las tablas clientes -> Facturas y crear una sino existe entre facturas -> lineas de factura.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 10-05-2004
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 24
andres1569 Va por buen camino
Hola vhirginia:

Más cosas, aparte de lo que te recomienda Marcos.

Creo haberos entendido. La tabla de facturas (cabeceras de facturas, TACabFactu por ejemplo) está ligada en master-detail a la de clientes (TAClientes) mediante el campo NIF ¿es así? Lo que quieres es, a su vez, poder elegir el NIF del cliente de un DBLooupComboBox ¿correcto? En dicho caso conviene que emplees un segundo TTable auxiliar (TAClientesAux) enlazado a la tabla física de Clientes, y enlaces el DBLookupCombo a dicho TTable, NO al que estás utilizando como tabla maestra. Mejor aún es que lo enlazaras a una consulta, TQuery, que sólo devolviera los NIFs (¿ordenados tal vez?) más algún campo adicional necesario para identificar al cliente, de forma que redujeras el tráfico de datos (ten en cuenta que los clientes pueden ser muchos).

El que te salte el error de "key violation" es tema aparte; se deberá a que se repite el campo o campos que conforman la clave maestra de la tabla de facturas (TACabFactu), normalmente este campo es el mismo Número de Factura (irrepetible), o bien un numerador interno. No veo qué relación tiene este problema con lo del NIF, salvo que, y ahora estoy pensando maliciosamente, tengas un error de diseño y en facturas el campo NIF actúe de clave maestra o algo por el estilo, eso limitaría a una sola factura por cliente, y saltaría el error al querer facturar al mismo cliente una segunda vez. Si no es esto, revisa bien los campos clave del TDBLookupComboBox, también estoy pensando que por error hayas asignado el Datasource a la misma tabla de clientes, lo cual es incorrecto. Aquí va un ejemplito:

Datafield : NIF
DataSource: TACabFactu (tabla de facturas)

Keyfield: NIF
Listfield: Apellidos; Nombre; NIF ... (lo que sea más fácil para identificar al cliente)
ListSource: TAClientesAux (tabla de clientes auxiliares)


Saludos
__________________
Guía de Estilo
Responder Con Cita
  #4  
Antiguo 10-05-2004
vhirginia vhirginia is offline
Miembro
 
Registrado: mar 2004
Posts: 64
Poder: 23
vhirginia Va por buen camino
Muchas gracias compañeros,
ya solucionamos nuestro error.

Cita:
tengas un error de diseño y en facturas el campo NIF actúe de clave maestra
o algo por el estilo.
jeje un pequeño error que nos ha liado, pero ya está. Muchísimas gracias.

un saludo al foro.
Responder Con Cita
  #5  
Antiguo 11-05-2004
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 24
andres1569 Va por buen camino
Rectificación: donde dije "clave maestra", quise decir "clave primaria".

Si efectivamente va por ahí el error, éste no es pequeño, vhirginia, te recomiendo que te mires un buen manual de Bases de Datos, el NIF debes definirlo como índice secundario (para facilitar mediante dicho índice las búsquedas que hace Delphi / BDE / ... en la tabla de clientes), a lo sumo podría ser parte integrante de la clave maestra junto a otro campo que le dé unicidad a la clave (aunque esto me parecería una exageración).

Saludos
__________________
Guía de Estilo
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 06:49:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi