Deberías dejar de usar el buffering en 3, porque te graba un registro en forma 
automática apenas movés el puntero. Lo mejor es que todas las tablas tengan el 
buffering en 5, que solamente permite la grabación cuando le mandás el 
tableupdate.

Entonces, supongamos el caso de una factura, con cabecera y detalles. La 
cabecera es de un solo registro, la tabla de detalles puede tener uno o varios. 
En ambos casos, pones el buffering en 5 y solamente te graba al darle 
tableupdate.

Ahora bien, si tenés campos autoincrementales, lo primero que tenés que hacer 
es impedir que trate de grabar sobre dicho campo, porque es readonly y te va a 
dar error, a menos que uses autoincerror.

Ejemplo:

set multilocks on


use cabecera in 0     && cabeceraid es el campo autoincremental de esta tabla
use detalles in 0        && detallesid es el campo autoincremental de esta 
tabla (tiene ademas un campo cabeceraid, como clave foránea)

select * from detalles into cursor curDetalles readwrite where 1=0  && creas un 
cursor auxiliar para poner los detalles

cursorsetprop('buffering',5,'cabecera')
cursorsetprop('buffering',5,'detalles')

begin transaction

select cabecera
append blank
replace (cada uno de los campos excepto el campo cabeceraid) with 
loquecorrresponda

lOK = tableupdate(1,.t.,'cabecera')


if lOK = .t.


   local nCabeceraId

   nCabeceraId = getautoincvalue()     && capturás el valor del incremento en 
el campo cabeceraid

   select curDetalles  
   
  scan all
           scatter memvar
           release m.detallesid
           m.cabeceraid  = nCabeceraId       && es el campo de clave foránea 
(que debe tener la tabla de detalles)
           insert into detalles from memvar
   endscan
   lOK = tableupdate(1,t.,'detalles')
endif

if lOK = .t.
   end transaction
else
   rollback
   tablerevert('cabecera')
   tablerevert('detalles')
endif

Saludos
Rafael Copquin










  ----- Original Message ----- 
  From: Sergio Lescano 
  To: GUFA List Member 
  Sent: Monday, October 05, 2009 11:30 AM
  Subject: [GUFA] AUTOINCREMENTAL


  El duplicado se grabó desde la misma pc en el mismo proceso de transacción, 
el campo incremental lo obvio por supuesto en una grabación sino te saldría un 
mensaje de error.

   

  Saludos y gracias

   

  Lic. Lescano Luis Sergio

  Informatica y Teleccomunicaciones

  ELECTROINGENIERIA S.A.

  División Nuclear

  Tel.: 0054-03487-481880

  Fax: 0054-03487-481880 Int. 120/121

  E-mail: [email protected]

  Web: www.eling.com.ar

   

  De: [email protected] [mailto:[email protected]] En nombre de Julio C. Lascano
  Enviado el: Lunes, 05 de Octubre de 2009 11:27 a.m.
  Para: GUFA List Member
  Asunto: [GUFA] AUTOINCREMENTAL

   

  Si en algunos casos puedes grabar más de un registro ¿no te convendría 
buffering en 5?, de todos modos me parece que en los "insert into . . ." debes 
obviar ese campo autoincremental, no enviarle ningún valor ni mencionarlo, se 
hace solo el incremento. ¿Cuando creas la tabla con el Diseñador indicas que es 
un campo entero autoincremental con paso 1?. 

   

  Julio

   

   

  Julio

    ----- Original Message ----- 

    From: Sergio Lescano 

    To: GUFA List Member 

    Sent: Monday, October 05, 2009 8:30 AM

    Subject: [GUFA] AUTOINCREMENTAL

     

    Hola Julio gracias por responder, te cuento estoy usando transacciones y 
estoy grabando con el tableupdate (1,".T.", "nombretabla") y son muchos los 
casos en que tengo que grabar mas de un registro en la transacción. El 
buffering que uso es de 3.

     

    El tema es que cuando se me repite los ids , que son 2 registros 
consecutivos, son insert correctos, válidos .. Con el mismo numero de id.

     

     

     

    De: [email protected] [mailto:[email protected]] En nombre de Julio C. Lascano
    Enviado el: Domingo, 04 de Octubre de 2009 05:45 p.m.
    Para: GUFA List Member
    Asunto: [GUFA] AUTOINCREMENTAL

     

    Perdon me expresé mal, debes estar haciendo 2 veces append blank o insert 
into y en uno de ellos incrementas el campo código o como se llame mediante 
código. Yo lo uso siempre pero me olvido de ese campo autoincremental y hasta 
ahora no he tenido problemas.

     

    Espero aclarar el anterior.

     

    Saludos

     

    Julio

      ----- Original Message ----- 

      From: Sergio Lescano 

      To: GUFA List Member 

      Sent: Friday, October 02, 2009 9:45 AM

      Subject: [GUFA] AUTOINCREMENTAL

       

            Hola gente, tengo un par de tabla que tienen registros 
autoincrementales, pero resulta que me estoy golpeando la cabeza cuando veo que 
hay 2 registros con el mismo número, estoy trabajando con buffering.

             

            A alguien le pasó esto?

             

            Saludos y gracias

             

             
           

       


--------------------------------------------------------------------------


      Encontra las mejores recetas con Yahoo! Cocina. 
      http://ar.mujer.yahoo.com/cocina/



    __________ Información de NOD32, revisión 4479 (20091004) __________

    Este mensaje ha sido analizado con NOD32 antivirus system
    http://www.nod32.com



  __________ Información de NOD32 4412 (20090909) __________

  Este mensaje ha sido analizado con NOD32 Antivirus System
  http://www.nod32.com

Responder a