PDA

Ver la Versión Completa : Ayuda con guardado en tabla paradox


Petolansa
09-11-2007, 03:43:10
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.

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.



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
El campo contador me guarda de la siguiente forma


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,

TABLA REMITO

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


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
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

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
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

Select Max(Campo) + 1 as valor from remito