PDA

Ver la Versión Completa : Numerar el detalle Maestro / detalle en secuencia


josejose
01-02-2007, 20:46:59
Que rutina podría utilizar para una pantalla maestro detalle lo que necesito que me haga es lo siguiente.

Los campos son

Tabla maestro
Código _ encargado
Nombre_encargado



Tabla detalle
Código _ asistente
Código _ encargado
Nombre _ asistente


Lo que necesito es que cuando este en el detalle para insertar un registro me de una secuencia numerica ejemplo

Tabla maestro
1 registro

Tabla detalle
1-1
2-1
Que cada vez que inserte uno si es de algún detalle que existe me incremente y me presente el valor siguiente
3-1 si es el que sigue

Trabajo en Delphi 7 y access 2003

LordRF
03-02-2007, 02:19:37
Hola Jose,

no se si te puedo ayudar ya que no trabajo con access, pero me imagino que tambien access tiene un autoinc, que incrementa automaticamente el Nr. de registro y si no lo puedes hacer a mano

var
form: Tform;
nr : longint;

procedure TForm.TableBeforeInsert(DataSet: TDataSet);
begin
Dataset.Last;
Nr := Dataset.FieldByName('Campo').AsInteger + 1;
end;

procedure TFom.TableNewRecord(DataSet: TDataSet);
begin
Dataset.FieldByName('campo').AsInteger := Nr;
end;
un saludo

jandres
05-02-2007, 15:20:54
Hola y Gracias LordRF por ayudar me pero esta rutina la tengo la que necesito es una que dependiendo el código que tenga el maestro me va a numerar el detalle en secuencia
Te coloco un ejemplo nueva mente una vez vía lago así en un demo de delphi la versión era delphi 3


Maestro
Código maestro 1

Detalle
1 código de detalle
2 código de detalle
Y Así varias veces
Si inserto otro registro en el maestro seria

Maestro
Código maestro 2

Y entonces quisiera que el detalle Comenzara el ese nuevo registro

1 código de detalle
2 código de detalle

A ver si me explique un poco mejor Gracias ojala puedas ayudar me.

Lepe
05-02-2007, 15:55:18
Necesitas:

Para el maestro
- un campo auto inc


Para el detalle:
- Un campo LongInteger o del mismo tipo del auto inc
- Un autoinc

Ahora abres las "relaciones de las tablas" en access, añades ambas tablas y desde la tabla Maestro, arrastra el campo al campo LongInteger, cuando esté encima lo sueltas y Access te preguntará el tipo de integridad referencial que necesitas. Normalmente es uno a muchos con duplicados.

Ahora en Delphi, para insertar una línea detalle, siempre deberás hacerlo en este orden:
- Primero insertar en la tabla maestra
- Ahora enviar un insertar al detalle.

Al tiempo de guardar los registros:
-Primero guardar el maestro.
- Después guardar el detalle.

Saludos

Saludos.

LordRF
09-02-2007, 00:49:02
Hola por ejemplo lo puedes hacer asi:

con un query en la detalle
SELECT * FROM Maestra WHERE ID = :ID


procedure TDBM.DetalleAfterInsert(DataSet: TDataSet);
begin
Detalle['ID'] := Maestar.FieldValues['ID'];
end;

y el resto ya lo pone arriab.

un saludo Robert

fjcg02
10-02-2007, 00:27:38
Te sugiero que utilices la propiedad Recno de las tablas/querys. Cuando abres una tabla/query hay un campo que es recno que te dice el nº de registro que se trata.
Para hacerlo. crea un campo calculado en la query Detalle, de tipo integer.
En el evento DrawDataCell del grid donde visualizas los datos, pon el siguiente código.


if field.Name='TablaCampo' and Tabla.RecCount> 0
then
DBGrid.Canvas.TextOut(Rect.left+5, Rect.Top +5, inttostr(Tabla.recno));

Ten en cuenta que recno es un campo calculado por delphi, que no puedes editarlo, y que dependiendo del campo por el que ordenes la tabla detalle te numerará las lineas.

Espero que te sea util.

Un saludo