Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #13  
Antiguo 11-04-2007
niñotaliban niñotaliban is offline
Miembro
 
Registrado: nov 2005
Posts: 13
Poder: 0
niñotaliban Va por buen camino
Grácias gluglu por tu interés.

Pues mi código es muy similar al de morta71:

tengo una tabla maestra:

create table FACTURA (
FAC_ID IDENTIFICADOR not null,
CLI_ID IDENTIFICADOR not null,
FAC_FECHA FECHA,
etc,
etc,
constraint PK_FACTURA primary key (FAC_ID)
);

alter table FACTURA
add constraint FK_FACTURA_RELATIONS_RECIBO foreign key (REC_ID)
references RECIBO (REC_ID);
alter table FACTURA
add constraint FK_FACTURA_RELATIONS_FORMAPAG foreign key (FPA_ID)
references FORMAPAGO (FPA_ID);
alter table FACTURA
add constraint FK_FACTURA_TIENE_CLIENTE foreign key (CLI_ID)
references CLIENTE (CLI_ID);

y otra tabla detalle:

create table DETALLEFACTURA (
DTF_ID IDENTIFICADOR not null,
FAC_ID IDENTIFICADOR not null,
DTF_DESCRIPCION CHAR(40),
etc,
etc,
constraint PK_DETALLEFACTURA primary key (DTF_ID)
);

alter table DETALLEFACTURA
add constraint FK_DETALLEF_DETALLE_FACTURA foreign key (FAC_ID)
references FACTURA (FAC_ID);

Ambas con identificador autoincremental.

En el formulario muestro en dbedits los campos de FACTURA y en un dbgrid los datos de DETALLEFACTURA. En el formulario están los botones Insertar, Buscar, Modificar, Aceptar, Cancelar y Eliminar que en principio actuan sobre la tabla FACTURA amenos que añada algo para la tabla DETALLEFACTURA, y esta última se gestiona automáticamente mediante el dbgrid con su propiedad dgEditing a true.
Código Delphi [-]
//al clickar en Insert:
IbDataPrincipal.Insert;     //en IbDataPrincipal está cargada la tabla FACTURA
 
//al clickar en Aceptar:
if IbDataPrincipal.State in dsEditModes then IbDataPrincipal.Post;
if IBDataDetalleFactura.State in [dsEdit, dsInsert] then IBDataDetalleFactura.Post;
IBTrans.CommitRetaining;
 
//al clicar en Cancelar:
IbDataPrincipal.Cancel;
IBTrans.RollbackRetaining;
 
//en onnewrecord del dataset de DETALLEFACTURA:
if IbDataPrincipal.State = dsinsert then IbDataPrincipal.Post;
IBDataDetalleFactura.Edit;
IBDataDetalleFacturaFAC_ID.Value:= IbDataPrincipalFAC_ID.Value;

(tengo bastante más código pero no tiene porque afectar a este asunto, en principio)

De esta manera cuando hago clic en insertar e inmediatamente intento insertar una linea en el dbgrid del detalle ma da el error "Field 'CLI_ID' must have a value"

Por qué me da el erro lo tengo claro, que lo podria controlar y mostrarle un mensaje que le digera al usuario que tiene que rellenar el campo CLI_ID antes de añadir lineas en el detalle, también lo tengo claro. Pero, no sería más bonito si el formulario en sí se comportara como el que muestra una simple tabla donde el mensaje de control de datos no se muestraria (si fuera preciso) hasta clicar el botón de Aceptar??

Hay alguna posibilidad para lo que quiero? o soy muy pijotero? jejeje me salió un pareado!

Un saludo.
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dá error "Master has detail records" cuando no debería darlo! JuanBCT Tablas planas 3 06-08-2005 03:48:37
DBLookupComboBoxs Master/Detail o Detail/Master yusnerqui OOP 5 29-07-2005 18:40:20
master/detail, imprimiendo master en cada hoja acalderonr Impresión 4 29-11-2003 14:46:07
interbase:¿como crear un master-detail-detail? ElSanto24 Firebird e Interbase 2 22-10-2003 10:24:45
Master/Detail/Detail/Detail/etc... hgiacobone Tablas planas 2 24-07-2003 17:20:31


La franja horaria es GMT +2. Ahora son las 19:58:14.


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