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
  #7  
Antiguo 14-07-2007
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Q componentes usas?
verifica las propiedades InsertSQL, RefreshSQL etc.
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #8  
Antiguo 15-07-2007
7pilas 7pilas is offline
Registrado
 
Registrado: abr 2006
Posts: 7
Poder: 0
7pilas Va por buen camino
no entiendo

aun soy nuevo en esto y no entiendo bien lo de

Código Delphi [-]
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  ****
// 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;
no entiendo el funcionamiento de eso.....
Responder Con Cita
  #9  
Antiguo 21-07-2007
NEOALEX00016 NEOALEX00016 is offline
Miembro
 
Registrado: sep 2006
Posts: 29
Poder: 0
NEOALEX00016 Va por buen camino
Lo Que Tu Buscabas

Mira No Te Lleves De Ningunos De Estos Programadores Barato Lo Que Tienes Que Hacer Para Que Se Te Grabe Todos Los Registro En Un Dbgrid Es Tener El La Tabla Maestro El Registro Index Y El La Tabla Detalles No Tener Ninguna Clave Primaria Le Pones A La Tabla Maestro Un Autoincrementar Y En El Dbgrid Pones Todos Los Campos Que Nesecitas(producto,costo,cantidad,subtotal)y Pones El Campo Factura Del Dbgrid Invisible Cuando Se Escriba El La Primera Celda Pones Que El Campo Que Esta Invisivle Sea Igual A El Numero De La Factura Que Te Genero La Tabla Maestro
Responder Con Cita
  #10  
Antiguo 23-07-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Unhappy saludos

Cita:
Mira No Te Lleves De Ningunos De Estos Programadores Barato...
creo que después de un comentario de esos ... no hace falta decir nada ..
Responder Con Cita
  #11  
Antiguo 23-07-2007
ptt ptt is offline
Miembro
 
Registrado: may 2003
Posts: 60
Poder: 22
ptt Va por buen camino
Perdón por desvirtuar el tema

Cita:
Empezado por NEOALEX00016
Mira No Te Lleves De Ningunos De Estos Programadores Barato

NEOALEX00016 creo que no faltará quien se sienta ofendido por tu desafortunado comentario.
Por otro lado te pido que escribas sin poner mayúsculas a todas las palabras ya que esto sumado a que no utilizas signos de puntuación hace bastante dificil e incómodo adivinar el sentido de tu mensaje.
Quizás te venga bien ver esto
__________________
Saludos.
Responder Con Cita
  #12  
Antiguo 23-07-2007
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
Cita:
Empezado por NEOALEX00016
Mira No Te Lleves De Ningunos De Estos Programadores Barato Lo Que Tienes Que Hacer Para Que Se Te Grabe Todos Los Registro En Un Dbgrid Es Tener El La Tabla Maestro El Registro Index Y El La Tabla Detalles No Tener Ninguna Clave Primaria Le Pones A La Tabla Maestro Un Autoincrementar Y En El Dbgrid Pones Todos Los Campos Que Nesecitas(producto,costo,cantidad,subtotal)y Pones El Campo Factura Del Dbgrid Invisible Cuando Se Escriba El La Primera Celda Pones Que El Campo Que Esta Invisivle Sea Igual A El Numero De La Factura Que Te Genero La Tabla Maestro
En primer lugar, se han dado soluciones correctas y profesionales a la pregunta y tratar de programadores baratos a los compañeros que se han preocupado en elaborar dichas soluciones, debidamente etiquetadas para mejorar su presentación y entendimiento y con la sintáxias y ortografía que procede, me parece un dislate.

Creo que debes rectificar tu respuesta en lo que se refiere a la parte claramente ofensiva de la misma. Un mal momento lo tiene cualquiera pero hay que respetar a los compañeros.

En espera de que edites tu mensaje y retires la parte ofensiva pues en este Foro siempre han imperado los buenos modos y la educación entre compañeros y así deben seguir como siempre los buenos oficios y convivencia.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 23-07-2007 a las 21:18:00.
Responder Con Cita
  #13  
Antiguo 23-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
jejeje

y resulta que nosotros somos programadores baratos:

http://www.clubdelphi.com/foros/show...97&postcount=5
http://www.clubdelphi.com/foros/show...27&postcount=7

jojojo
__________________

Responder Con Cita
  #14  
Antiguo 24-07-2007
NEOALEX00016 NEOALEX00016 is offline
Miembro
 
Registrado: sep 2006
Posts: 29
Poder: 0
NEOALEX00016 Va por buen camino
Respuesta

Les pido excusa si los ofendi, pero cuando estaba empezando me ubiera gustado que me explicaran las cosas mas clara por que aqui hay muchos programadores que te explican las cosa dificil de entender por eso es que aveces menojo hay que tratar de explicarle a los novatos (como yo tambien) las cosas lo mas simple posible
Responder Con Cita
  #15  
Antiguo 24-07-2007
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Angry ¿Cómo te atreves?

¿Con esas faltas de ortografía y de redacción te atreves a decirnos que somos programadores baratos?

Mejor atrévete a leer la Guía de estilo.

Estos foros son de ayuda a todos, ya sean principiantes o experimentados, y sin importar el nivel que tengamos creo que son útiles todas y cada una de las respuestas expuestas aquí, cada aportación de los foreros en la solución de una duda de un compañero tiene validez, si este foro tratará de pelearse por quién "cobra más" no creo que NEOALEX00016 quedara en primer lugar.

Ya lo decía Benito Juárez "El respeto al derecho ajeno es la paz"... y un agregado anónimo "... y la conservación de los dientes"

Un saludo a todos los compañeros del foro.
__________________
Herr Heins Faust
Responder Con Cita
  #16  
Antiguo 24-07-2007
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 quiera que ya ha pedido disculpas creo que lo mejor es dar por cerrado el asunto que espero sirva de ejemplo para no volverse a faltar entre compañeros pues cada uno aporta lo que puede y unas veces puede que por una parte no se expliquen bien las cosas pero también ocurre que aun estando bien explicadas no se entienden por las razones que fuere.

Seguimos con la programación que es nuestro tema. Ya puestos recordamos una par de consejos:

Escribir todo en mayúsculas equivale a chillar.
Por respeto a los demás hay que esmerarse un poco en la redacción de nuestras preguntas.
Las respuestas posibles son puro altruismo entre compañeros, por lo tanto no podemos exigir prontitud ni mucho menos urgencia.

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
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 03:20:13.


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