Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con guardado en tabla paradox (https://www.clubdelphi.com/foros/showthread.php?t=50139)

Petolansa 09-11-2007 03:43:10

Ayuda con guardado en tabla paradox
 
Buenas gente necesitaria una ayudita de uds los expertos, resulta que hice esto a los patadas, y me gustaria saber como mejrrarlo, porque realmente a veces funciona bien y a veces no, este codigo es cuando elijo dar un nuevo remito, y como ven llevo el contador de remitos. Esto dentro de todo funcionaria bien. Lo unico que me guarda desordenado en la tabla. Pero a la larga guarda.

Código:

procedure TFrmprincipal.Remito2Click(Sender: TObject);
var
num:integer;
begin
num:=frmremito.contadorx['contremito'];
frmremito.contadorx.Insert;
frmremito.contadorx['contremito']:=num+1;
frmremito.Label12.Caption:=inttostr(frmremito.contadorxcontremito.Value);
frmremito.ShowModal
end;

end.



En este otro codigo lo que hago es cuando doy el boton procesar quiero que me guarde en sus correspondientes tablas los datos del remito.
MTremito es una tabla en memoria rx. Lo que me ocurre con esto es que a veces me da key violation y la tabla remitodetalle me guarda solamente el primer registro. Me gustaria si no es mucha molestia me lo revisen un poquito para ver en que le estoy errando. El numero de remito me lo gusrda bien.



Código:

procedure TFrmRemito.BitBtn1Click(Sender: TObject);
var
numremito:real;
begin
numremito:=strtofloat(label12.Caption);
If messagedlg('Los datos del Remito con correctos?',MTwarning,mbOKCancel,0)<>
mrok
then
exit;

with dmzingueria do begin
remito.Insert;
remitonumremito.Value:=numremito;
remitoclicod.Value:=strtofloat(dbtext1.Caption);
remitofecha.Value:=strtodate(fecha);
remitofacturado.Value:=false;
remito.Post;

with mtremito do begin
first;

while not eof do begin
remitodetalle.Append;
remitodetallenumremito.Value:=numremito;
remitodetalle.FieldByName('codipro').Value:=FieldByName('codigo').value;
remitodetalle.FieldByName('cantidad').Value:=fieldbyname('cantidad').Value;
remitodetalle.FieldByName('concepto').Value:=fieldbyname('descripcion').Value;
next;
end;
end;



contadorx.Post;
end;
end;
end.


PD. Remito es lo que llaman en otros paises albaran.


Desde ya muchas gracias por su tiempo.

eduarcol 09-11-2007 13:27:17

me has confundido, en si cual es el problema???

te guarda y no te ordena, te guarda y te da KeyViolation??, podrias explicar un poco mejor

Petolansa 09-11-2007 14:06:39

SI perdon paso a explicarme mejor
 
El campo contador me guarda de la siguiente forma

Código:

Registro Numremito
  1          2
  2          1 
  3          2
  4          3
  5          4


Y lo del remito y remito detalle, me guarda una linea de ambos, por ejemplo,
Código:

TABLA REMITO

Numremito  Clicod  Fecha        Facturado
1                1      8/11/2007  fALSE

Código:

TABLA REMITODETALLE

Numremito  Codipro    Cantidad    Concepto
1              4              6          Campana Acero inox.

El tema es que yo hice el remito por mas de una linea de detalle y me guarda solamente una.


Espero haberme explicado mejor. Desde ya muchas gracias


Me olvidaba de decirles que em da keyviolation. Puede ser cuando hago el doy el while not eof y le doy append y que se repita el numremito al ser clave con la tabla de remito, o tambien puede ser porque estoy usando mal para incrementar el contador del remito?

eduarcol 09-11-2007 14:18:26

el asunto esta en la logica que utilizas para crear los detalles, podrias utilizar un grid y alli al darle el boton procesar lo vuelcas a la tabla

Petolansa 09-11-2007 14:25:30

Ok
 
Lo que hago es guardar los datos en un dbgrid vinculado a una rxmemorytable, y luego volcar los datos a las tablas por medio de un boton, como es que me decis que podria hacerlo de otra forma?

Gracias

eduarcol 09-11-2007 14:30:01

lo haces bien entonces, puedes colocar la parte donde vacias la tabla rxMemoryTable para analizarlo??

Petolansa 09-11-2007 14:43:01

Por ahi esta el problema entonces, porque no vacio la tabla, el codigo que puse mas arriba es el unico proceso que realizo para guardar en las respectivas tablas remito y remitodetalle, donde la vaciaria?


procedure TFrmRemito.BitBtn1Click(Sender: TObject);
var
numremito:real;
begin
numremito:=strtofloat(label12.Caption);
If messagedlg('Los datos del Remito con correctos?',MTwarning,mbOKCancel,0)<>
mrok
then
exit;

with dmzingueria do begin
remito.Insert;
remitonumremito.Value:=numremito;
remitoclicod.Value:=strtofloat(dbtext1.Caption);
remitofecha.Value:=strtodate(fecha);
remitofacturado.Value:=false;
remito.Post;

with mtremito do begin
first;

while not eof do begin
remitodetalle.Append;
remitodetallenumremito.Value:=numremito;
remitodetalle.FieldByName('codipro').Value:=FieldByName('codigo').value;
remitodetalle.FieldByName('cantidad').Value:=fieldbyname('cantidad').Value;
remitodetalle.FieldByName('concepto').Value:=fieldbyname('descripcion').Value;
next;
end;
end;



contadorx.Post;
end;
end;
end.

Otra cosita, esta mal como asigno el nro de remito? Cual es la forma de hacerlo correctamente extrayendo el ultimo nro de un campo, en este caso el campo se llema numremito

procedure TFrmprincipal.Remito2Click(Sender: TObject);
var
num:integer;
begin
num:=frmremito.contadorx['contremito'];
frmremito.contadorx.Insert;
frmremito.contadorx['contremito']:=num+1;
frmremito.Label12.Caption:=inttostr(frmremito.contadorxcontremito.Value);
frmremito.ShowModal
end;

end.Porque con este codigo me repite y me los ordena mal no va parejo.

Gracias por el tiempo

eduarcol 09-11-2007 14:51:44

prueba estas sugerencias

Código Delphi [-]
procedure TFrmRemito.BitBtn1Click(Sender: TObject);
var
   numremito:real;
begin
   numremito:=strtofloat(label12.Caption);
   If messagedlg('Los datos del Remito con correctos?',MTwarning,mbOKCancel,0)<>mrok then
      exit;

   with dmzingueria do
   begin
      remito.Insert;
      remitonumremito.Value:=numremito;
      remitoclicod.Value:=strtofloat(dbtext1.Caption);
      remitofecha.Value:=strtodate(fecha);
      remitofacturado.Value:=false;
      remito.Post;

      with mtremito do
      begin
         first;

         while not eof do
         begin
            remitodetalle.Append;  //Cambialo por el insert
            remitodetallenumremito.Value:=numremito;
            remitodetalle.FieldByName('codipro').Value:=FieldByName('codigo').value;
            remitodetalle.FieldByName('cantidad').Value:=fieldbyname('cantidad').Value;
            remitodetalle.FieldByName('concepto').Value:=fieldbyname('descripcion').Value;
            //Agrega aqui un post;
            post; 
            next;
         end;
      end;

      contadorx.Post; //Que es contadorx?? no deberia ser Remito??
   end;
end;

Petolansa 09-11-2007 15:26:02

El contador x es la tabla que me cuenta el nro de remito,en teoria, ah posteo el nro de remito asi despues arranco de otro.

Como seria la forma correcta de extraer el ultimo campo de una tabla y sumarle 1, el campo es de tipo integer.
Porque de este forma se me repite y me da keyviolation

Gracias

eduarcol 09-11-2007 15:29:01

Cita:

Empezado por Petolansa (Mensaje 244869)
El contador x es la tabla que me cuenta el nro de remito,en teoria, ah posteo el nro de remito asi despues arranco de otro.

Como seria la forma correcta de extraer el ultimo campo de una tabla y sumarle 1, el campo es de tipo integer.
Porque de este forma se me repite y me da keyviolation

Gracias

Ejecuta este codigo en el click del boton, el resultado es el valor que necesitas

Código SQL [-]
Select Max(Campo) + 1 as valor from remito


La franja horaria es GMT +2. Ahora son las 07:47:19.

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