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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2007
7pilas 7pilas is offline
Registrado
 
Registrado: abr 2006
Posts: 7
Poder: 0
7pilas Va por buen camino
ayuda con tabla en delphi

tengo un sistema venta de articulos y en una dbgrid es donde el usuario pone los productos que quiere comprar, tengo una tabla donde se guarda el precio total de articulos vendidos y su fecha de venta, y otra tabla donde tengo el nombre del producto vendido,su clave ,precio etc... pero mi problema es que cada que quiero guardarlos en la tabla lo unico que hace es guardar un solo registro, si digamos el usuario compra mas de 2 articulos , en la tabla solo se guardara el ultimo producto ..alguien podria ayudarme este es el codigo que tengo para hacer esto:

//Registro los productos vendidos en la tabla producto1.
Table3.Edit;
Table3.Insert;
Table3.FieldByName('clave').AsFloat := Table1.FieldByName('clave').AsFloat ;
Table3.FieldByName('cantidad').AsFloat := Table1.FieldByName('cantidad').AsFloat ;
Table3.FieldByName('precio').AsFloat := Table1.FieldByName('precio').AsFloat ;
Table3.FieldByName('producto').AsString := Table1.FieldByName('producto').AsString ;
Table3.FieldByName('Fecha').AsDateTime := Date;
Table3.Post;

con esto guardo la ultima linea del dbgrid, osea el producto de esa linea pero si digamos tengo 10 productos(10 columnas en el dbgrid) solo guardara la numero 10...
Responder Con Cita
  #2  
Antiguo 10-07-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Sólo tienes que sustituir
Código Delphi [-]
Table3.Edit;
Table3.Insert;
por
Código Delphi [-]
Table3.Append;
Responder Con Cita
  #3  
Antiguo 10-07-2007
7pilas 7pilas is offline
Registrado
 
Registrado: abr 2006
Posts: 7
Poder: 0
7pilas Va por buen camino
no sirvio..

me sigue apareciendo lo mismo aun con el
table3.append;

me dijeron que alomejor lo que tenia que poner era un autoincrement, no se si sera eso pero no se como hacerlo, igual anexo todo el script que uso en el boton alomejor eso sirve para que se den una idea:

procedure TForm3.BitBtn1Click(Sender: TObject);
var Cambio : Real;
Cadena : String;
begin
Cambio := StrToFloat(Edit1.Text) - StrToFloat(Label3.Caption);
//Verifico que el pago sea correcto
if Cambio >= 0 then
begin
//Mando un mensaje dando gracias y el cambio si es que hay.
if Cambio = 0 then
ShowMessage('GRACIAS POR SU COMPRA')
Else
begin
Cadena := 'CAMBIO $';
Cadena := Cadena + FloatToStr(round((cambio*100))/100);
Cadena := Cadena + ' GRACIAS POR SU COMPRA';
ShowMessage(Cadena);
end;
//Descuento los productos vendidos en el almacen.
Table1.First;
While Table1.Eof = False do
begin
Form2.Table1.FindKey([Table1.FieldByName('Clave').AsInteger]);
Form2.Table1.Edit;
Form2.Table1.FieldByName('Cantidad').AsInteger := Form2.Table1.FieldByName('Cantidad').AsInteger - Form3.Table1.FieldByName('Cantidad').AsInteger;
Form2.Table1.Post;
Table1.Next;
end;
//Registro los productos vendidos en la tabla producto1.
Table3.Append;
Table3.FieldByName('clave').AsFloat := Table1.FieldByName('clave').AsFloat ;
Table3.FieldByName('cantidad').AsFloat := Table1.FieldByName('cantidad').AsFloat ;
Table3.FieldByName('precio').AsFloat := Table1.FieldByName('precio').AsFloat ;
Table3.FieldByName('producto').AsString := Table1.FieldByName('producto').AsString ;
Table3.FieldByName('subtotal').AsFloat := Table1.FieldByName('subtotal').AsFloat ;
Table3.FieldByName('Fecha').AsDateTime := Date;
Table3.Post;
//Registro la venta en la tabla Ventas.
Table2.Edit;
Table2.FieldByName('Ingreso').AsFloat := Table2.FieldByName('Ingreso').AsFloat + StrToFloat(Label3.Caption);
Table2.Post;
BitBtn2.Click;
Dbgrid1.Fields[0].FocusControl;
end
else
begin
ShowMessage('El Pago es menor al total a pagar');
Edit1.SetFocus;
end;
end;
Responder Con Cita
  #4  
Antiguo 12-07-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Lightbulb hola

Saludos!!

Para empezar te diré que sería mucho más cómodo (para tí y para nosotros), si a tustablas en vez de Table1, Table2 ... le pusieras Artículos, Stock, Ventas, etc ... con los nombres actuales si te alejas algún tiempo del proyecto y luego lo retomas nuevamente estarás totalmente )

Bueno me parece que sí, que puedes tener un problema con la clave de Table3, sería muy útil que nos comentaras con que motor de bases de datos estás trabajando, y la estructura de la tabla.

Si la estructura es del tipo:

Campo1 <- clave primaria
Campo2
Campo3
...


tendrás problemas con la linea:

Código Delphi [-]
Table3.FieldByName('clave').AsFloat := Table1.FieldByName('clave').AsFloat ;

Debido a que le estarás asignando la misma clave primaria a varios campos de Table3, que dependiendo del motor y aveces de la estructura te puede generar una excepción o sobreescribirte el registro con esa clave!!

Como te habían dicho por ahí de pronto se puede solucionar con campos autonuméricos, pero necesitamos los datos que te digo arriba.
Responder Con Cita
  #5  
Antiguo 13-07-2007
7pilas 7pilas is offline
Registrado
 
Registrado: abr 2006
Posts: 7
Poder: 0
7pilas Va por buen camino
batallo un poco poniendo cambiando los nombres de las tablas por que me reborujo, mira es un programa de ventas, en el primer form tengo el menu principal, con 4 botones(salir,almacen,ventas y reportes)

el boton almacen me lleva al form 2 que es donde guardo, modifico o elimino los productos en la tabla1 que es la tabla de inventario(es diferente esta tabla a la tabla1 del form3) donde en esta tabla tengo

clave----campo llave
producto
cantidad
precio
medida(si es litro,kilo etc)
minimo(cant minima de prod )

**** todas las tablas son echas en paradox 7

en el form 3 tengo lo que son las ventas donde tengo un dbgrid donde es que se ponen los productos para vender,podiendo agregar,eliminar,etc todos los productos en el, tengo 3 tablas

table1.- es la tabla auxiliar (donde se guardan los productos vendidos pero al finalizar la compra se borran de la tabla)
table2.-es la tabla ventas(donde se almacena el monto total y la fecha)
table3.- es la tabla productos(donde se van a guardar los productos vendidos)

entonces con lo que me comentabas que puedo tener error

Código Delphi [-]
Table3.FieldByName('clave').AsFloat := Table1.FieldByName('clave').AsFloat ;
la table1 y la table3 tienen los mismos campos (tambien el mismo campo llave)
Responder Con Cita
  #6  
Antiguo 13-07-2007
Arturo_ Arturo_ is offline
Miembro
 
Registrado: jul 2007
Posts: 48
Poder: 0
Arturo_ Va por buen camino
Arturo_ te: ayuda con tabla en delphi

En la segunda table para guardar mas productos lo que tienes que hacer es sensillo: Antes de ingresar un nuevo producto debes dar un Table2.Append para que el sistema le asigne una nueva posición de registro a tu prodcuto.
Ejemplo:

// Aqui se inserta un nuevo registro para un nuevo producto
// Si la tabla esta vacia toma el primer registro por defecto
// Si no esta vacia inserta un nuevo registro

if (Table2.RecordCount <> 0) then
Table2.Append

Table2.Edit
Table2.FieldByName('Productp').AsString := 'xxxxx';
Table2.Post

Claro esta que tienes que tener bien enlazadas las tablas:
Tabla1 y
Tabl22

Cuando ingreses un nuevo registro usa el evento BeforPost en el cual tienes que extraer el ultimo el valor del ultimo registro y sumarle 1 para el nuevo registro.

He publicado una rutina en Tables Planas 'Maximo Valor para un Nuevo Registro', esto te servira si lo usas de la manera correcta.

Ejemplo: Evento -> BeforePost

procedure TForm_BeEMPPRJ.Table2BeforePost(DataSet: TDataSet);
begin
if (Table2.State = dsInsert) then
begin
Table2.Value := Table1.FieldByName('LINK_0001').AsFloat;
ASSEMBLY_RECORD_MaxKey(Table2, 'LINK_0002');

// Init_VALUES_TABLE
Table2Edit;
if (Table2Producto.IsNULL) then
Table2Producto.Value := '';
end;
end;

// Versión: 10.0000 - © 1980, 2006 For Tables DELPHI SERVER .DB
// Ejecutar en: El Evento <Table.BeforePos> ****
// Función que Extrae el Valor Maximo para un Nuevo Registro Key
// Con este Procedimiento ya no se Necesita Utilizar las Tablas: // Ejemplos:
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0001');
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0002');
// Form_DDBTLM.ASSEMBLY_RECORD_MaxKey(Table_NN, 'LINK_0003');

procedure TForm_BeEMPPRJ.ASSEMBLY_RECORD_MaxKey(var pmt_TABLE: TTable; pmt_FIELD: string);
begin
// Init_PROPERTIES
if (Table_ARMK.Active) then Table_ARMK.Close;
Table_ARMK.Filter := '';
Table_ARMK.Filtered := False;
Table_ARMK.IndexFieldNames := '';
Table_ARMK.MasterFields := '';
Table_ARMK.MasterSource := nil;
// Assign_PROPERTIES
Table_ARMK.DatabaseName := pmt_TABLE.DatabaseName;
Table_ARMK.SessionName := pmt_TABLE.SessionName;
Table_ARMK.TableName := pmt_TABLE.TableName;
Table_ARMK.MasterSource := pmt_TABLE.MasterSource;
Table_ARMK.MasterFields := pmt_TABLE.MasterFields;
if (Table_ARMK.MasterFields = '') then
Table_ARMK.IndexFieldNames := pmt_FIELD
else
Table_ARMK.IndexFieldNames := Table_ARMK.MasterFields + ';' + pmt_FIELD;
// Open_TABLE
Table_ARMK.Open;
Table_ARMK.Last;
// Load_RECORD_KEY
if (Table_ARMK.RecordCount = 0) then
pmt_TABLE.FieldByName(pmt_FIELD).AsFloat := 1
else
pmt_TABLE.FieldByName(pmt_FIELD).AsFloat := Table_ARMK.FieldByName(pmt_FIELD).AsFloat + 1;
// Close_TABLE
Table_ARMK.Close;
end;

Claro esta que los enlaces LINK_0001 LINK_0002, LINK_0003 los uso de una forma dinamica para enlazar tablas paradox:

Por ejemplo en tus dos tablas Tabla1 el Primary Key seria LINK_0001
Y en tu Table2 el Primary Key seria LINK_0002, claro esta que en la tabla2 el indice LINK_0001 seria el enlace con el indice LINK_0001 de la Tabla1.

Espero que te sirva...

Última edición por Arturo_ fecha: 13-07-2007 a las 23:05:45.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con agregar datos a una tabla zanyodark Conexión con bases de datos 1 21-05-2007 20:45:56
Ayuda con la busqueda en una tabla mjjj Conexión con bases de datos 5 02-04-2007 23:48:12
Ayuda filtro tabla Access con ADO jcheco Conexión con bases de datos 4 19-04-2006 10:30:54
Ayuda actualizar tabla buffygcs SQL 4 15-04-2005 01:22:30
Ayuda con una tabla y sus consultas CI>140 Conexión con bases de datos 1 12-09-2003 00:21:31


La franja horaria es GMT +2. Ahora son las 19:08:32.


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