Jump to content


Photo

imposible grabar registros en tabla tras borrar con SQL


  • Please log in to reply
6 replies to this topic

#1 netcom

netcom

    Newbie

  • Miembros
  • Pip
  • 1 posts

Posted 26 November 2014 - 12:50 PM

Hola a todos,

Espero que puedan ayudarme con mi problema, pues me estoy quedando tonto buscando por la web y no encuentro solución.

Trabajo con Delphi XE2 y mi problema lo tengo con una tabla de una base de datos de MS Access a la que conecto mediante ADO.

Utilizo el siguiente código para grabar los diferentes registros en la tabla (registros que obtengo de un Tlistview):



delphi
  1. Repeat
  2. With ListViewCables.Items[index] do
  3. Begin
  4. With DataModule1.Table_RC_Cables do
  5. Begin
  6. Last;
  7. Insert;
  8. FieldByName('ID').AsInteger:=identificador;
  9. FieldByName('quote_number').AsString:=EditQuoteNumber.Text;
  10. FieldByName('part_number').AsString:=Caption;
  11. FieldByName('Lpf').AsString:=SubItems[0];
  12. FieldByName('Lpm').AsString:=SubItems[1];
  13. FieldByName('Total_Lenght').AsString:=SubItems[2];
  14. FieldByName('€/m').AsString:=SubItems[3];
  15. FieldByName('€/Cu').AsString:=SubItems[4];
  16. FieldByName('€/Total').AsString:=SubItems[5];
  17. FieldByName('Qtty').AsInteger:=StrToInt(SubItems[6]);
  18. FieldByName('Weight').AsString:=SubItems[7];
  19. FieldByName('Harnessing').AsString:=SubItems[8];
  20. FieldByName('discount').AsString:=SubItems[9];
  21. FieldByName('pos_quote').AsInteger:=RC_position;
  22. Post;
  23. End;
  24. //Pasamos al siguiente registro del TlistView
  25. End;
  26. index:=index+1;
  27. //cuando el indice sea igual al total de cables que hay en Tlistview salimos del bucle
  28. Until index=Items_en_TLV;
  29.  
  30. El código funciona perfectamente, grabando sin problema todos los campos del Tlistview en la tabla. El problema aparece cuando ANTES de esta parte de código borro varios registros mediante esta sentencia SQL:
  31.  
  32. if condicion=true then
  33. //si venimos de editar oferta, borramos todos los registros para volverlos a escribir con las modificaciones
  34. With DataModule1.AQ_Cables do
  35. Begin
  36. Close;
  37. SQL.Clear;
  38. SQL.Add('DELETE FROM RC_Cables WHERE quote_number =:numero_oferta AND ID=:ident');
  39. Parameters.ParamByName('numero_oferta').Value:=EditQuoteNumber.Text;
  40. Parameters.ParamByName('ident').Value:=identificador;
  41. ExecSQL;
  42. End;



Esta parte de código también funciona perfecta, me borra todo lo que le indicó perfectamente, pero al ejecutar seguidamente el código anterior, NO GRABA NADA EN LA TABLA, y no se porque demonios no lo hace, me estoy volviendo tarumba.

Muchas gracias de antemano, espero me puedan ayudar.
  • 0

#2 Caminante21

Caminante21

    Member

  • Miembros
  • PipPip
  • 21 posts
  • LocationLima, Peru

Posted 26 November 2014 - 02:20 PM

Hola

Y te envía algún mensaje de error???
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 26 November 2014 - 05:55 PM

Parece que después del borrado la tabla  Table_RC_Cables queda bloqueada, yo intentaría cerrar y abrir la tabla antes del primer "Last",  quedaría algo así;



delphi
  1. Repeat
  2. With ListViewCables.Items[index] do
  3. Begin
  4. With DataModule1.Table_RC_Cables do
  5. Begin
  6. close;
  7. open;
  8. Last;
  9. Insert;
  10. FieldByName('ID').AsInteger:=identificador;
  11.  
  12. //....



Prueba y comentas.

Saludos.
  • 0

#4 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 posts
  • LocationMisiones, Argentina

Posted 27 November 2014 - 02:51 PM

Deberías ver donde se ejecutan los commits, quizá los ejecutes en un caso y no en el otro.
Quizás escribes y borras las mismas filas sin querer en una misma transacción.

  • 0

#5 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 27 November 2014 - 08:16 PM

Hola

una pregunta al respecto, es necesario en Access ir hasta el último registro? no se podría hacer un append y ya está?

Lamentablemente no es para ayudarte a resolver el problema, pero me asaltó esta duda y no puedo dejar pasar la oportunidad.

Saludos.
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 01 December 2014 - 12:19 PM

Hola

una pregunta al respecto, es necesario en Access ir hasta el último registro? no se podría hacer un append y ya está?

Lamentablemente no es para ayudarte a resolver el problema, pero me asaltó esta duda y no puedo dejar pasar la oportunidad.

Saludos.


Eso mismo pensé, pero que pasa si se utilizan llaves primarias. :)  *-)

Saludos
  • 0

#7 alvarod2014

alvarod2014

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 19 December 2014 - 08:30 AM

Lo que seguramente te pasa es que abriste la tabla en modo no compartido es el campo "lock Type" en el ttable, cambialo a optimistic.

Si lo tienes en ese valor, entonces aplica la sugerencia de activar y desactivar en cada ciclo :wink:
  • 0




IP.Board spam blocked by CleanTalk.