Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Question Como resuelvo este problema??

buenas noches amigos del foro estoy realizando una insercion en una tabla de paradox de un archivo TXT, el codigo es el siguiente;

Code:
_____________________________________________________
try

Transferencia.Height:=172;
Archivo.LoadFromFile('C:\NominaObre1.txt');
ProgressBar1.Max:= Archivo.Count;

for I := 0 to Archivo.Count -1 do
begin
Campos.Clear;
Campos.CommaText:= Archivo[i];

If Datamodule2.REMMAE.Locate('CODEMP',Campos[0],[]) then
begin
Datamodule2.REMMAE.Edit;
Datamodule2.REMMAE.Fields[42].Value := Strtofloat(Campos[1]);
Datamodule2.REMMAE.Fields[43].Value := Strtofloat(Campos[2]);
Datamodule2.REMMAE.Fields[44].Value := Strtofloat(Campos[3]);
Datamodule2.REMMAE.Fields[51].Value := Strtofloat(Campos[4]);
Datamodule2.REMMAE.Fields[50].Value := Strtofloat(Campos[5]);
Datamodule2.REMMAE.Fields[36].Value := Strtofloat(Campos[6]);
Datamodule2.REMMAE.Fields[47].Value := Strtofloat(Campos[7]);
Datamodule2.REMMAE.Post;

end;
showmessage( 'Ficha del trabajador ='+Campos[0]);

Application.ProcessMessages;
ProgressBar1.Position:=i +1;

end;

finally
Archivo.Free;
Campos.Free;
end;
_______________________________________________________________



El error que meda es el siguiente : Couldn't perform the edit because another user changed the record.

Este error meda cuando a insertado mas de 10 lineas del txt.


Que hago????
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #2  
Antiguo 25-04-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Question

amigos el error ya no meda pero se que da colgado el proceso? que puede ser
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #3  
Antiguo 25-04-2005
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
Has comprobado que las líneas contienen valores validos, puede ser que en alguno de los campos del fichero de texto,por ejemplo hayas utilizado un . en vez de una coma o al reves.

09050000001ACM 22 18:00:00100600,0007637,0283SSS0212
0905103 ACM 12 19:00:00100660.0000384,1409NNN0212

Aquí te pongo un ejemplo de un leve fallo que hecharía abajo un proceso.

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
  #4  
Antiguo 25-04-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Gracias por responder marcoszorrilla, rebice el texto que no es mu largo y esta perfecto, yo creo que pueda ser el procedimiento pe yo no veo el error.???
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #5  
Antiguo 26-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
ve con F8 y breakpoints, o metele trazas al programa (showMessage) para saber en qué registro va, que tiene Archivo[i], qué tiene Campos[0], Campos[1],que se asigna a cada campo, etc.

Si no lo resuelves, sería conveniente poner los datos que quieres importar para ver si puede dar problemas.

Una detalle, que separador usas para el CommaText ???, porque si estas usando la coma, precisamente los números flotantes tienen una coma como separador decimal, y si lo interpretas como un separador de cadenas, Tienes un problema.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 26-04-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Por cierto, un detalle: Si dices que estas haciendo una inserción en la tabla deberías usar un Append o Insert en lugar de Edit

Que se te quede colgado puede ser por el método "locate" si la tabla no tiene ningún índice. Si tiene creas un índice en la tabla te recomiendo que uses FindKey en lugar de locate. Es mucho más rápido.

Última edición por hermes_32 fecha: 26-04-2005 a las 13:18:47.
Responder Con Cita
  #7  
Antiguo 26-04-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Question

Gracias por responder, nu puedo colocar insert por que los registros ya existen lo que hago es buscarlo en la tabla y editaros para insertar los cambios en este proceso es que la tabla se cuelga. De verda no se que puede ser??
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #8  
Antiguo 26-04-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Prueba a realizar el proceso entero dentro de una transaccion. Sería mas o menos:

Código Delphi [-]
db.StartTransaction;  
  If Datamodule2.REMMAE.Locate('CODEMP',Campos[0],[]) then
    begin
      try
        Datamodule2.REMMAE.Edit;
        Datamodule2.REMMAE.Fields[42].Value := Strtofloat(Campos[1]);
        Datamodule2.REMMAE.Fields[43].Value := Strtofloat(Campos[2]);
        Datamodule2.REMMAE.Fields[44].Value := Strtofloat(Campos[3]);
        Datamodule2.REMMAE.Fields[51].Value := Strtofloat(Campos[4]);
        Datamodule2.REMMAE.Fields[50].Value := Strtofloat(Campos[5]);
        Datamodule2.REMMAE.Fields[36].Value := Strtofloat(Campos[6]);
        Datamodule2.REMMAE.Fields[47].Value := Strtofloat(Campos[7]);
        Datamodule2.REMMAE.Post;
        db.Commit;
      except on e:exception do begin
         showmessage(e.message); //que muestre el error si se produce
         db.Rollback;
         end;
      end;
    end;

Mas o menos. Lo he hecho sobre la marcha igual ni compila , pero la idea es esa.

Pero insisto, si la tabla sobre la que estas haciendo un "locate" no tiene ningún índice...mal vamos...ya que por eso seguramente parezca que se te queda colgado aunque realmente estará buscando como un loco.

Última edición por hermes_32 fecha: 26-04-2005 a las 22:38:37.
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


La franja horaria es GMT +2. Ahora son las 21:42:17.


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