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