Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   copiar una tabla a otra (https://www.clubdelphi.com/foros/showthread.php?t=83824)

DOS 02-08-2013 16:09:10

copiar una tabla a otra
 
Hola a todos, resulta que tengo dos tablas iguales en sus campos, en una cargo los datos y estos los guardo en la otra tabla luego vacio la primera, cargo nuevamente datos y se los agrego para guardarlos en la segunda y borrar nuevamente la primera, seria algo asi:
Tabla1
A - B - C - D
1 - 2 - 2 - 4

Tabla2
A - B -C - D

Paso los datos de la primera a la segunda y esta la borro

Tabla1
A - B - C - D

Tabla2
A - B - C - D
1 - 2 - 2 - 4

Cargo nuevos datos en la primera
Tabla1
A - B - C - D
5 - 5 - 3 - 3

Tabla2
A - B - C - D
1 - 2 - 2 - 4
los paso a la segunda y borro la primera
Tabla1
A - B - C - D

Tabla2
A - B - C - D
1 - 2 - 2 - 4
5 - 5 - 3 - 3
y asi sucesivamente, la idea es hacerlo con el siguiente codigo
Código SQL [-]
Insert Into Tabla2
Select * From Tabla1
Perdonen que pregunte sin probarlo pero estoy en mi trabajo y para ganar tiempo lo pregunto, Lo estoy realizando en Delphi7, voy a poner un Query y la codificacion seria en el boton guardar.
Mas en limpio seria algo como esto en el boton Guardar:
Código Delphi [-]
 with Query1 do   begin     Close;     SQL.Clear;     SQL.Add('INSERT INTO Tabla2');     SQL.Add('SELECT * FROM Tabla1');     Open;   end;
Funcionaria? no me va a borrar los registros anteriores? Gracias.

Casimiro Notevi 02-08-2013 16:34:01

Usas insert y select, para borrar es delete. Si no usas delete entonces no se borran.

DOS 02-08-2013 17:00:52

Casimiro, la codificacion que puse es la que seria del boton Guardar, aunque le faltaria algo mas. La del boton Borrar, aunque podria ser en un boton que diga Nuevo, asi borra la tabla para poder cargarla y con la codificacion anterior en el boton Guardar, pasa los datos de una tabla y se lo agrega a la otra:
Boton Nuevo(borra el registro anterior y permite una nueva carga)
Código Delphi [-]
if table.Open then
 table.First;
 while not table.Eof do
 begin    
    Table.delete;    
    Table:next;   
end;
Gracias

Casimiro Notevi 02-08-2013 18:29:45

No entiendo bien lo que dices ¿un botón 'nuevo' que borra? :confused:
Un botón 'Nuevo' debe servir para eso, para 'Nuevo'. Y un botón 'Borrar' debe servir para borrar. No confundas al usuario.

Por cierto, no sé qué BD, componentes, etc. estás usando, pero en principio en tu código sobra el table.next
Si estás posicionado en un registro y lo borras, entonces pasas a estar posicionado en el siguiente. Si haces un .next te lo saltas e iría "al siguiente del siguiente". Estarías borrando uno sí y uno no, uno sí y uno no...

¿Y el libro que te aconsejé?, parece que no has tenido tiempo de leerlo ;)

ozsWizzard 02-08-2013 19:15:43

Funcionar, funcionaría si cambias Open por ExecSQL y, como dice Casimiro, te falta borrar en tabla 1.

Si lo que quieres es que esté todo en el mismo botón, hazlo en el mismo botón y después del insert borras

Código Delphi [-]
with Query1 do   
begin     
   Close;     
   SQL.Clear;     
   SQL.Add('INSERT INTO Tabla2');     
   SQL.Add('SELECT * FROM Tabla1');     
   ExecSQL;   

   Close;     
   SQL.Clear;     
   SQL.Add('DELETE Tabla1');     
   ExecSQL;  
end;

DOS 02-08-2013 20:12:35

Cita:

Empezado por Casimiro Notevi (Mensaje 464877)
No entiendo bien lo que dices ¿un botón 'nuevo' que borra? :confused:
Un botón 'Nuevo' debe servir para eso, para 'Nuevo'. Y un botón 'Borrar' debe servir para borrar. No confundas al usuario.

Por cierto, no sé qué BD, componentes, etc. estás usando, pero en principio en tu código sobra el table.next
Si estás posicionado en un registro y lo borras, entonces pasas a estar posicionado en el siguiente. Si haces un .next te lo saltas e iría "al siguiente del siguiente". Estarías borrando uno sí y uno no, uno sí y uno no...

¿Y el libro que te aconsejé?, parece que no has tenido tiempo de leerlo ;)

Lo del boton era una opcion, poner dos botones uno que borre la tabla y otro que cargue la nueva tabla o al poner nuevo, borre la tabla y quede lista para su carga ya que esta se ve en un DBGrid en un formulario, asi el usuario lo limpiaria y seria mejor visualmete.
Tengo un formulario, en donde esta las tablas, un Query y un DBGrid donde muestro lo que se esta cargando y los botones de "nuevo", que borra los registros anteriores y permite su carga y "guardar" que pasa de una tabla a la otra los registros, esta realizada en paradox.
Hoy a la noche lo pruebo en Delphi y actualizo lo que pasa.
El libro bueno... estemm... ya lo tengo ;)

DOS 02-08-2013 20:21:15

Cita:

Empezado por ozsWizzard (Mensaje 464879)
Funcionar, funcionaría si cambias Open por ExecSQL y, como dice Casimiro, te falta borrar en tabla 1.

Si lo que quieres es que esté todo en el mismo botón, hazlo en el mismo botón y después del insert borras

Código Delphi [-]with Query1 do begin Close; SQL.Clear; SQL.Add('INSERT INTO Tabla2'); SQL.Add('SELECT * FROM Tabla1'); ExecSQL; Close; SQL.Clear; SQL.Add('DELETE Tabla1'); ExecSQL; end;

Podria ser, lo tengo que probar, no conocia el comando ExecSQL, de esta manera tendria un solo boton, GUARDAR, en donde guardo los datos de una tabla a la otra y borro el registro de la primera asi queda lista para ser cargada, gracias.

DOS 03-08-2013 17:47:04

Realice una prueba de la siguiente manera
detfactura // tabla provisoria, esta se borra con cada carga
Numdetfact
Numfact
Cod_art
Cantidad

detfactfinal // tabla detalle final, esta se carga con la anterior
Numdetfact * // clave principal
Numfact // numero de la factura
Cod_art // relacionado con articulo
Cantidad // cantidad del producto

producto
cod_producto
nombre
importe

cliente
cod_cliente
nombre

factura // almacena todos los datos
cod_fact //es el numero de la factura que figura en Numfact de detfactfinal
cod_cliente
Fecha

y el boton "nuevo" con la siguiente codificacion:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  with Query1 do begin         
    Close;         
    SQL.Clear;    
    SQL.Add('INSERT INTO detfactfinal');    
    SQL.Add('SELECT * FROM detfactura');    
    ExecSQL;     
    Close;    
    SQL.Clear;    
    SQL.Add('DELETE detfactura');    
    ExecSQL;   
  end; 
end;

Cuando lo hago correr me tira el siguiente error:""... raised exception class EDBEngineError with message 'Token not found, token: detfactura
Line Number: 1'.Process stopped..."
y me creo un nuevo archivo llamado ERRORINIS.DB, en donde si guarda lo cargado y la tabla original no se borra tampoco, que puede ser?:confused:

DOS 04-08-2013 01:02:47

Ayuda con gratificacion
 
Bueno, lamentablemente se me termino el tiempo con mi proyecto final, lo tengo que entregar la semana que viene y salvo algunos detalles que trabajare sobre ellos, me falta la parte de facturación que esta a medias( un poco mas).
pero si no lo presento o esta mal tengo que recursar nuevamente el proximo año, es por falta de estudio, no lo creo, es por falta de tiempo, puede ser, es por falta de conocimiento y enseñanza, seguramente ya que aprendí mas en este foro que en clases.
Asi que ofresco $100.-(se que no es mucho, pero es muy simple lo que hay que hacer, para alguien que sabe)
Basicamente lo que resta hacer es lo siguiente;
1 los datos se cargan en una tabla temporal, llamada detfactura, la cual se debe borrar con cada carga nueva.
2 se debe almacenar los datos de la tabla temporal en la final 'detfacturafinal'
3 en la parte de historico poder ver todas las facturas realizadas
4 imprimir la factura.
les dejo las imagenes de la tabla factura (form14) y el archivo con todo completo.
Como veran el nivel del sistema es muy basico y esto se debe mantener así, lo mas sencillo posible y basico posible. Pueden realizar cambios si lo creen necesario.
El sistema esta realizado en Delphi7 y Paradox.
No queria llegar a esta situacion, pero no puedo recursar un año mas por esto, tengo 41 años, no me dedico a esto, trabajo en un deposito, ni voy a vivir de esto(lamentablemente) 10 o 15 años atrás seria diferente, ahora es solo por diversion.
Al que lo realice, lo debo probar y estar de acuerdo con lo realizado, el dinero se lo paso a la cuenta, por las dudas soy de argentina o a través de PayPal.
solamente gracias.



el archivo del sistema
https://www.dropbox.com/s/k4oh0ou4ndvkr4m/ITM.rar

Caral 04-08-2013 01:20:34

Hola
te ayudo gratis.
Tengo el programa que quieres.
Saludos
NOTA: Por favor, lo mas detalladamente posible.

DOS 04-08-2013 01:47:00

Gracias, te envie un MP.

Caral 04-08-2013 01:50:14

Hola
Vamos paso a paso
1- El boton nueva factura que quieres que haga?
saludos

Caral 04-08-2013 02:27:31

Hola
da la impresion de que el boton Nueva Factura se usa para insertar en detfacturafinal y borrar en detfactura pero que ?, ahi no se apunta nada mas que a todo en detfactura pero no se especifica nada, osea, no creo que haga nada.
Ademas el uso del query esta mal.
Saludos

Caral 04-08-2013 02:36:17

Hola
Cuando se da doble click al dbgrid2 se inserta en detfactura el dato, me imagino que es la tabla temporal.
Se pretende con el boto (Nueva factura) borrar el contenido de la tabla temporal detfactura e insertar todo el contenido en la tabla detfacturafinal ????.
Buena pregunta.
Si es asi, el boton nueva factura tiene que recorrer la tabla temporal e ir insertando en la tabla nueva o final, pero segun algo, este algo tiene que ser el numero de factura.
Saludos

Caral 04-08-2013 02:39:21

Hola
El TabSheet2 sale sobrando, es una copia del dbgrid3 solo seria mover los botones de guardar e imprimir al TabSheet1.
Todo esta basado en tables.
saludos

Caral 04-08-2013 02:39:58

Hola
Ya se que estoy hablando solo, pero me entretengo :D:D:D
Saludos

DOS 04-08-2013 02:50:49

solapa carga de factura
boton Nueva factura :que limpie el DBGrid3 que es en el que se van cargando los elementos a facturar a traves del DBGrid 2, y la deje a la tabla en modo de edicion(table2 detfactura)
solapa detalle de factura
Boton Guardar : pasa los datos de la tabla temporal(table2 detfactura) a la final(table7 detfacturafinal) y a la tabla factura(table1 factura)
solapa historial
ver todas las facturas realizadas

DOS 04-08-2013 02:53:51

Cita:

Empezado por Caral (Mensaje 464940)
Hola
Ya se que estoy hablando solo, pero me entretengo :D:D:D
Saludos

disculpa estaba comiendo:D

Caral 04-08-2013 02:55:23

Hola
El dbgrid3 esta ligado a la tabla detfactura (temporal), es un componente que tiene que ver lo que esta en el dataset, no lo puedes limpiar sin quitar los datos.
Osea, no puedes limpiar sin GUARDAR primero los datos en la tabla detfacturafinal y factura.
Me sigues ?
me entiendes ?
Saludos

ecfisa 04-08-2013 02:57:06

Hola DOS.

Perdón por lo tardía de la respuesta, pero es finde y no entro tanto...

Código Delphi [-]
    ...
    Close;  
    SQL.Text := 'DELETE FROM DETFACTURA';    
    ExecSQL;   
  end;
end;

Saludos. :)

DOS 04-08-2013 02:57:41

Cita:

Empezado por Caral (Mensaje 464938)
Hola
Cuando se da doble click al dbgrid2 se inserta en detfactura el dato, me imagino que es la tabla temporal.
Se pretende con el boto (Nueva factura) borrar el contenido de la tabla temporal detfactura e insertar todo el contenido en la tabla detfacturafinal ????.
Buena pregunta.
Si es asi, el boton nueva factura tiene que recorrer la tabla temporal e ir insertando en la tabla nueva o final, pero segun algo, este algo tiene que ser el numero de factura.
Saludos

si, se guarda en la factura detfacturafinal que la del detalle y con el numero de factura y demas datos como, fecha, codigo del cliente y codigodetallefactura, en factura.

DOS 04-08-2013 03:02:53

Cita:

Empezado por Caral (Mensaje 464943)
Hola
El dbgrid3 esta ligado a la tabla detfactura (temporal), es un componente que tiene que ver lo que esta en el dataset, no lo puedes limpiar sin quitar los datos.
Osea, no puedes limpiar sin GUARDAR primero los datos en la tabla detfacturafinal y factura.
Me sigues ?
me entiendes ?
Saludos

si te entiendo, me refiero a limpiar cualquier dato anterior osea de la facturacion anterior que haya quedado o la limpieza se podria realizar en el boton guardar, despues de almacenar los datos en detfacturafinal y factura limpia detfactura.
osea limpiar antes de cargar, boton nuevo o limpiar despues de guardar boton guardar.

Caral 04-08-2013 03:05:37

Hola
Primero tienes que guardar y luego limpiar.
Lo que no entiendo es para que usar una tabla temporal ?, no entiendo el concepto del uso. ?
Para mi seria mas logico guardar los datos en las tablas correspondientes de una vez no veo la necesidad de doble trabajo.
Tal vez me explicas la razon ?
saludos

DOS 04-08-2013 03:18:48

La tabla temporal la agregue, porque no se si puedo limpiar el Grid en donde se muestra el detalle de la carga, entonces, al borrar la tabla temporal el grid quedaba limpio para una nueva carga de factura, seguramente esto esta mal, pero es lo que se me ocurrio, tal vez pueda limpiar el grid sin limpiar la tabla y la temporal este de mas, ¿no?

Caral 04-08-2013 03:30:05

Hola
Mira que sencillo.
Si la tabla temporal es para borrar el contenido del dbgrid esta de mas.
Para que no se vea el contenido ya que usas Tables haces un filtro, al numero de factura, por ejemplo la factura 0 que no tenga nada, el dbgrid quedara vacio ya que no tendra datos.
Creo que por el nivel al que llevas el programa te estas complicando la vida con el uso de sql, de momento.
De todos modos, si sigues empeñado en el uso de la tabla temporal haz un filtro y ya.
Código Delphi [-]
var
   Filtro : String;
begin
   If (DBEdit5.Text <> '') then
   begin
      Table2.Filtered := False;
      Filtro := 'ID_Factura = '+DBEdit5.Text;
     Table2.Filter := Filtro;
      Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;
Es lo mismo que haras sin la tabla temporal, directamente.
Este codigo lo puedes poner en el boton Nueva Factura.^\||/
Saludos
NOTA: Si no funciona con el dbedit5 que es el que tiene el numero de factura entonces crea una variable.
Si quieres que no muestre nada, osea, limpio el dbgrid3, en vez del dbedit5 pon el numero cero (0) si esa factura no tiene nada o incluso no existe.

Caral 04-08-2013 03:44:34

Hola
No ver contenido del dbgrid sin borrar nada en ninguna tabla.
Boton Nueva factura.

Código Delphi [-]
var
   Filtro : String;
   fact: Integer;
begin
     fact:= 0:
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;

saludos

DOS 04-08-2013 03:50:02

Prove el codigo, limpia el Grid pero deja un registro, pero esto significa que deberia un DBEedit para la carga del numero de factura en la primer solapa, no? para que sea mas visual y no confundir al usuario, que opinas?.
en la primera pone todos los datos y carga inclusive el numero de factura.
en la segunda lo ve mas limpio para poder guardar e imprimir la factura
en la tercera el historico de todas la facturas realizadas.
Saludos.

Caral 04-08-2013 03:56:02

Hola
Yo quitaría la solapa de detalle esta de mas y pondria los dos botones que quedan en la primera solapa.
En la solapa de historial tambien haria un filtro, pero esta vez por cliente ya que se supone que es el historial de alguien.
Otra cosa que haria seria eliminar el boton de sub total y de total, estan de mas.
Saludos

DOS 04-08-2013 04:08:07

el ultimo codigo me tira un error Incompatible types: 'String' and 'Integer' aunque a filtro lo cambie por integer
en estas lineas
Código Delphi [-]
Filtro := 'ID_Factura '= + fact;
     Table2.Filter := Filtro;
Voy a tener muy en cuenta tus consejos, saludos.

Caral 04-08-2013 04:15:39

Hola
Tienes que cambiar a fact por string;
El problema no esta en filtro, esta en fact:
Código Delphi [-]
var
   Filtro : String;
   fact: String;
begin
     fact:= '0':
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;
Eso quiere decir que el numero de factura en el campo factura es string y no integer.
Para eliminar los botones creas un procedimiento con el codigo del boton 2 y el boton 3 lo llamas cuando necesites.
Asi simplemente cuando le des doble click al dbgrdi2 saldra el subtotal y el total, en cuanto al descuento e incremento se hace lo mismo, se llama al procedimiento y listo.
Saludos
No estoy muy seguro en paradox, recuerda que de esto no se amigo.:o

Caral 04-08-2013 04:27:11

Hola
Procedimiento calcula:
Colocar el procedure al principio, asi:
Código Delphi [-]
    procedure DBEdit5Change(Sender: TObject);
    procedure calcula; // aqui....
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form14: TForm14;
  fecha:Tdate;
  S,D,I,total:Real;
  e,c:integer;
implementation

Crear el procedimiento:

Código Delphi [-]
procedure calcula;
var
  TotalGanancias : Currency;
  Marca : TBookMarkStr;
begin
 // subTotal
 TotalGanancias := 0;
 Marca := Table2.Bookmark;//Almacenamos la posición del registro actual en nuestra marca
 Table2.DisableControls;//Deshabilitamos los controles enlazados a nuestro  DataSet
 Table2.First;
 While Not Table2.Eof do
  begin
   TotalGanancias := TotalGanancias + Table2.FieldbyName('TotalImp').ASCurrency;
   Table2.Next;
  end;
    Table2.EnableControls;//Habilitamos nuevamente los controles
    Table2.Bookmark := Marca;//Restauramos a la posición del registro de nuestra marca
 Edit2.Text:=CurrToStr(TotalGanancias);
 S:=StrToFloat(Edit2.Text);
 // total
 total:=S-D+I;
 Edit5.Text:=FloatToStr(total);
end;

Colocar el procedimiento en el dobleclick del dbgrid2: (revisa al final del codigo es lo unico que cambia)
Código Delphi [-]
procedure TForm14.DBGrid2DblClick(Sender: TObject);
begin
Table2.Open;
if combobox1.Text = 'Productos' then
  begin
   datasource5.DataSet:= Table4;  // tabla de productos
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table4Cod_prod.Value; // el campo cod_prod de la tabla nueva es igual al de la tabla5
   Table2Codigo.Value:= Table4Codigo.Value;
   Table2Descripcion.Value:= Table4Descripcion.Value;
  // Table2Unidad.Value:= Table4Unidad.Value;
   Table2Importunidad.Value:= Table4ImpVent.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  //cantidad cargada por el usuario
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;   // multiplica la cantidad por el valor unitario
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
  if combobox1.Text = 'Servicios' then
  begin
  datasource3.DataSet:= Table3;  // tabla servicios
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table5Cod_servcio.Value; // el campo cod_servicio de la tabla nueva es igual al de la tabla3
   Table2Codigo.Value:= Table5Codigo.Value;
   Table2Descripcion.Value:= Table5Servicio.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  // cantidad cargada por el usuario
   Table2Importunidad.Value:= Table5ImpServ.Value;
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
   calcula; // aqui....
end;

Llamar al procedimiento en el edit3 y el 4 en el evento onchange:
Código Delphi [-]
procedure TForm14.Edit3Change(Sender: TObject);
begin
D:=StrToFloat(Edit2.text)*StrToFloat(Edit3.Text)/100;
if edit2.Text = ' ' then
begin
    edit2.Text = '0'.
end
else
calcula;

end;
Código Delphi [-]
procedure TForm14.Edit4Change(Sender: TObject);
begin
I:=StrToFloat(Edit2.text)*StrToFloat(Edit4.Text)/100;
if edit4.Text = ' ' then
begin
    edit4.Text = '0'.
end
else
calcula;
end;

Parece mucho trabajo ya que tienes que modificar algunas cosas, pero te daras cuenta que crear procedimientos ajustados a tu necesidad te ayuda a no repetir codigo, simplemente lo llamas cuando necesites.
saludos
Espero que estemos aprendiendo algo a nuestra edad....^\||/:D

DOS 04-08-2013 04:52:20

gracias lo ire probando mañana a ver que pasa. saludos

DOS 04-08-2013 16:57:07

Cita:

Empezado por Caral (Mensaje 464956)
Hola
Tienes que cambiar a fact por string;
El problema no esta en filtro, esta en fact:
Código Delphi [-]var Filtro : String; fact: String; begin fact:= '0'; Table2.Filtered := False; Filtro := 'ID_Factura = '+fact; Table2.Filter := Filtro; Table2.Filtered := True end else Table2.Filtered := False; //[Error] Unit14.pas(324): ';' expected but 'ELSE' found end; //[Error] Unit14.pas(325): '.' expected but ';' found

Hola Caral, ya probe el procedimiento y esta funcionando, en cuanto a esto me tira el error puesto arriba, parece algo con la puntuacion pero no se, ya probe poniendolo despues del true, pero sigue igual.
Faltaria el boton guardar para almacenar todo y poder verlo en el historial, mientras tanto voy probando Qreport, aunque tengo que tener datos que ver para imprimir, saludos.

Caral 04-08-2013 17:10:13

Hola

Código Delphi [-]
var
   Filtro : String;
   fact: String;
begin
     fact:= '0':
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   
end;
Saludos

DOS 04-08-2013 18:04:59

Gracias Caral, buen dia.
veamos los pasos, entro a facturacion, apreto el boton nueva factura, me borra u oculta los datos del DBGrid.
cargo un numero de factura en el DBEdit5 que ahora lo puse en la primer hoja con todo el reto de cosas.
hago doble click para cargar en el DBGrid2 de servicios o pruductos y me tira el siguiente error ... raised exception class EDBEngineError with message 'key violation'. Process stopped...
parece que se soluciona de un lado y de desarregla de otro :(

Caral 04-08-2013 18:13:28

Hola
La tabla esta filtrada, no puedes abrir algo que ya esta abierto.
a ver asi:
Código Delphi [-]
procedure TForm14.DBGrid2DblClick(Sender: TObject);
begin
Table2.Filtered := False;
Table2.Close;
Table2.Open;
if combobox1.Text = 'Productos' then
  begin
   datasource5.DataSet:= Table4;  // tabla de productos
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table4Cod_prod.Value; // el campo cod_prod de la tabla nueva es igual al de la tabla5
   Table2Codigo.Value:= Table4Codigo.Value;
   Table2Descripcion.Value:= Table4Descripcion.Value;
  // Table2Unidad.Value:= Table4Unidad.Value;
   Table2Importunidad.Value:= Table4ImpVent.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  //cantidad cargada por el usuario
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;   // multiplica la cantidad por el valor unitario
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
  if combobox1.Text = 'Servicios' then
  begin
  datasource3.DataSet:= Table3;  // tabla servicios
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table5Cod_servcio.Value; // el campo cod_servicio de la tabla nueva es igual al de la tabla3
   Table2Codigo.Value:= Table5Codigo.Value;
   Table2Descripcion.Value:= Table5Servicio.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  // cantidad cargada por el usuario
   Table2Importunidad.Value:= Table5ImpServ.Value;
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
   calcula; // aqui....
end;
Saludos

DOS 04-08-2013 18:54:03

No al hacer doble click en el producto para cargar, me tira el nuevamente el error, le agregue
Table2.Filtered := False;
Table2.Close;
pero hace lo mismo, no se si me comi algo, donde dice ' calcula; // aqui....' debo poner algo? o asi simplemente esta llamando al procedimiento?

Caral 04-08-2013 18:56:06

Hola
Puede que el problema este por ahi.
Si no hay datos el procedimiento calcula dara un error en las variables ya que no tienen datos.
Saludos

DOS 04-08-2013 19:29:17

Me siento bastante inutil al no poder aportar opciones.

Caral 04-08-2013 19:39:30

Hola
El problema no es tuyo es que te esta tratando de ayudar un novato.:D
Saludos


La franja horaria es GMT +2. Ahora son las 20:13:15.

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