Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
como utilizo un campo con autoincremento.

Buenos dias.

Necesito de su ayuda para utilizar, un campo con autoincremento.

Tengo un campo con autoincremento llamado Nro_fact, en la tabla ventas.

Cuando trato de guardar varios registros en la tabla ventas por medio de un dbgrid, el campo me aumenta por cada registro guardado.

Como puedo hacer para que el autoincremento, asigne el mismo numero por cada registro y al finalizar guarde el registro en la tabla de ventas, y se autoincremente en uno.

Ejemplo:


Si quiero vender varios productos, deben tener el mismo nro. de Factura y guardar estos productos en la tabla ventas correr al siguiente nro. de factura.

El codigo que utilizo es este:


procedure TForm8.RoundButton1Click(Sender: TObject);
begin
table1.first;
while table1.Eof=false do
begin
form2.Table1.FindKey([table1.fieldbyname('serial').asinteger]);
form2.Table1.edit;
form2.Table1.fieldbyname('exi_PRO').asfloat := form2.Table1.fieldbyname('exi_pro').asfloat
+ dbgrid1.Fields[3].asfloat;
form2.Table1.FieldByName('iva_PRO').ascurrency:= form2.Table1.fieldbyname('prv_pro').AsCurrency * (14/100);
form2.Table1.fieldbyname('prV_PRO').AsCurrency:= dbgrid1.Fields[4].ascurrency * (40/100)
+ dbgrid1.Fields[4].ascurrency;
form2.Table1.Post;
/// REGISTRO EN LA TABLA DE ventas
TABLE2.INSERT;
table2.fieldbyname('fec_ven').asdatetime := date;
table2.fieldbyname('ser_ven').asinteger := dbgrid1.Fields[0].AsInteger;
table2.fieldbyname('Nro_fac').Asstring := dbedit1.field.Asstring;
table2.fieldbyname('Des_ven').asstring := dbgrid1.Fields[1].Asstring;
table2.fieldbyname('Can_ven').asfloat := dbgrid1.Fields[2].Asfloat;
table2.fieldbyname('Cun_ven').ascurrency := dbgrid1.Fields[3].Ascurrency;
table2.fieldbyname('IVA_ven').ascurrency := dbgrid1.Fields[4].Ascurrency;
table2.fieldbyname('Cot_ven').ascurrency := dbgrid1.Fields[5].Ascurrency;
table2.fieldbyname('RIF_ven').asstring := dbedit2.Field.AsString;
table2.fieldbyname('nom_ven').asstring := dbedit3.Field.AsString;
table2.fieldbyname('nit_ven').asinteger := dbedit4.Field.Asinteger;
table2.fieldbyname('dir_ven').asstring := dbedit5.field.AsString;
table2.fieldbyname('tel_ven').asstring := dbedit6.Field.AsString;
table2.post;
table1.Next;
end;
END;



Gracias por su ayuda.

Última edición por aurbano fecha: 14-10-2005 a las 18:57:15.
Responder Con Cita
  #2  
Antiguo 12-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si buscas en el foro por factura, seguro que encuentras varias formas de hacerlo. En realidad necesitas 2 tablas.

Tabla:Factura
Guardas, el nro de factura, fecha, id del cliente, etc.

Tabla:LineasF
Guardas el mismo nro de factura, y cada línea de la factura, Descripción del producto vendido, cantidad, precio unitario.

Buscando por "factura Maestro Detalle" tambien puedes obtener resultados interesantes.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 14-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
problema con autoincremento

Buenas tardes amigos del club delphi.


Necesito de su ayuda para poder inplementar el campo autoincremento. El amigo lepe me indico buscar en el foro, pero la informacion que encontre no me ayuda mucho.

Tengo dos tablas una llamada auxiliar de ventas y otra ventas. En la tabla auxiliar de ventas es en donde vacio la informacion de la venta. Ejemplo. Nro. de Factura monto fecha entre otros ya conocidos. Estos datos los vacio mediante un dbgrid y unos dbedit. En un dbedit tengo el Nro. de Factura con autoincremento.

El problema que tengo es que cada vez que introduzco en el dbgrid un articulo, en el dbedit el campo Nro. de factura se incrementa a uno



Entonces mi pregunta es como hago para que el nro. de factura no se incremente a uno, sino que despues de guardar los registros, se incremente.


De antemano, gracias.
Responder Con Cita
  #4  
Antiguo 14-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En primer lugar y con ánimo de que cambies los nombres, yo usaría nombres de tablas más intuitivos, por ejemplo:

tabla: Factura (encabezados y demás)
tabla: Lineas (los apuntes de cada venta)

Siguiendo esta nomenclatura, lo que tienes que hacer es:

Tabla Factura:
Campo Nro_Factura (el autoincremento)
En el OnNewRecord, no tienes que hacer nada. Como es un autoincremento se hace solo .

Tabla Lineas:
Tienes que añadir un campo (Foreign Key) numérico, donde guardarás el nro_Factura, lo llamo Fnro_Factura, (la F de Foreing Key, clave ajena o clave foránea, como quieras llamarlo..

Tienes que asegurarte que al dar de alta un registro en Lineas, ya haya uno definido de Factura. Como vamos a realizar un Maestro-Detalle, siempre ha de existir el registro de Facturas antes que el de Lineas.

Para relacionar en delphi estas dos tablas, vas al objeto tblLineas (tabla Lineas), y en MasterSource, eliges el tblFacturas (obviamente la tabla Facturas, o su DataSource correspondiente).

Espera que estoy abriendo el delphi . En tblLineas.MasterField haz clic en los 3 puntos, ahí se donde relacionas las dos tablas.

En la ventana que se abre, en MasterField, aparecen los campos de la tabla Factura, haz clic sobre nro_Factura.

En Detaild Field, elige Fnro_Factura (campo nuevo creado) y pulsa el boton Add.

Listo. Ya tienes las dos tablas relacionadas, cuando cambies de registro en la tabla Facturas, el grid que está relacionado con tblLineas, solo mostrará los apuntes de ventas de esa Factura.


Lo que hablaba de asegurarte de que exista un registro de Factura antes que las lineas, es muy facil. Por ejemplo:

En el BeforeInsert de la tabla lineas:
Código Delphi [-]
if tblFacturas.Fieldbyname(nro_factura).IsNull then
 tblfacturas.Append;
 tblfacturas.Post;
Si en una factura en blanco (por ejemplo la primera factura que se va a crear en el programa) el usuario, que es muy listo, y está esperando que falle tu programa para echarte la bulla, el tio listo se va directamente al grid de Lineas e intenta añadir un artículo, como todavía el nº de factura no se ha creado, el nro_factura es nulo, así que añade una nueva factura y se graba, desde este punto, ya existe el nro_factura para guardarlo en la tabla Lineas.

Advertencia: Primero se debe guardar la tabla Facturas (el Maestro) y despues las Lineas (el detalle) y siempre en ese orden.

En el BeforePost de Lineas añades:
Código Delphi [-]
  tblLineas.Fieldbyname('Fnro_factura').AsInteger := 
                     tblFacturas.Fieldbyname('nro_Factura').AsInteger;

Cierro el delphi . Chaus
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 17-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
campo autonumerico

ok. lepe gracias por tu ayuda pondre en practica tu consejo.



gracias...
Responder Con Cita
  #6  
Antiguo 22-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
como utilizar campo autoincremento

Hola lepe

Como estas utilize lo que me recomendastes y no me sirvio, me da el mismo error.


Por favor si puedes bajar el programa de esta pagina:


http://geocities.yahoo.com/


El id es aurbano30
el password es: 091075

el programa se llama ejemplo.zip.


gracias por rtu ayuda.
Responder Con Cita
  #7  
Antiguo 23-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por aurbano
Entonces mi pregunta es como hago para que el nro. de factura no se incremente a uno, sino que despues de guardar los registros, se incremente.
Siendo concreto a tu pregunta: No se puede hacer. Un autoincremento funciona de esa forma que comentas.

Si quieres mayor control sobre el campo nro_factura, tendrás que implementar un autoincremento a mano, y olvidarte del que trae el Database Desktop.

Ahora en tu programa tienes autoincrementos por todos sitios, no sé cual estas usando realmente, si el de la tabla aux_Ventas o el de la tabla nro_factura. En princpio en la ventana de Ventas estas usando el de la tabla nro_factura

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 25-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
problema con autoincremento

El autoincremento que estoy utilizando es el de la tabla nro.factura campo fnro_FACT y este debe ser guardado en la tabla ventas en el campo nro_fact con los demas registros.

Utilize el metodo que me indicastes anteriormente y resulta que al comenzar en 0 o nulo me autoincrementa a 1 pero despues no me sigue autoincrementando el campo fnro_fact.

Por favor si puedes revisar otra vez la aplicacion para ver en que error falle.

Gracias lepe....


salu2

aurbano
Responder Con Cita
  #9  
Antiguo 26-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por aurbano
El autoincremento que estoy utilizando es el de la tabla nro.factura campo fnro_FACT y este debe ser guardado en la tabla ventas en el campo nro_fact con los demas registros.
Paradox no implementa integridad referencial en cascada, por tanto, tendrás que aumentar el autoincremento, tomar el valor y copiarlo a la tabla ventas a mano.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



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 23:22:33.


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