Ampliando un poquito Juan:
Hay muchas situaciones distintas. Si necesitás ese número correlativo al
comienzo tipo para proponerle el siguiente no usado en un código, o si es
efectivamente el último grabado. Permitirás o no retroceder el número, siempre
y cuando otro no se te haya adelantado y tomado el siguiente al tuyo. Otro caso
sería el de comprobantes donde el número lo tomaría al momento de grabar o no,
dependiendo si se trata de una impresora de red o una local donde cadal usuario
tendría su propio talonario.
En principio el archivo lo tenés buffereado en 1, lo lockeas, tomás el valor,
lo guardás y lo deslockeas. El caso de que admita reversión, en el método donde
deshacés, si es el que está en el archivo más 1, se lo restás y listo.
=CURSORSETPROP("Buffering", 1, "setup") && Desactiva el almacenamiento de
tablas en búfer
sele setup
set order to key_name
seek "SPESCVN.DBF"
DO while !rlock()
ENDDO
xcodigo=valor+1
repla valor with xcodigo
unlock
Esto trabaja multiusuario.
Saludos
Estela Lázaro
D&SIP
Desarrollo y Servicios Informáticos Profesionales
www.dsip.com.ar
________________________________
De: Juan Luis Calcagno <[email protected]>
Para: GUFA List Member <[email protected]>
Enviado: jueves, 26 de noviembre, 2009 13:29:18
Asunto: [GUFA] Campo Autoincremental
Estela,
Que pasa si otro usuario esta intentando hacer lo mismo?
A menos que me haya perdido una parte, tu logica funciona unicamente para un
solo usuario a la vez accediendo a la base de datos.
Saludos,
Juan Luis Calcagno
----- Original Message -----
From: Estela Lázaro
>To: GUFA List Member
>Sent: Thursday, November 26, 2009 8:50 AM
>Subject: [GUFA] Campo Autoincremental
>
>
>Hola
>
>Yo uso una tablita auxiliar con todos los campos "autoincrementales" y le voy
>sumando 1 y si revierto y es el mismo - 1, se lo resto.
>
>Me parece más rápido si tenés muchs registros
>
>Saludos
>
>Estela Lázaro
>D&SIP
>
>Desarrollo y Servicios Informáticos Profesionales
>
>www.dsip.com.ar
>
>
>
>
>
>
________________________________
De: Norberto Mario Alvarez <[email protected]>
>Para: GUFA List Member <[email protected]>
>Enviado: jueves, 26 de noviembre, 2009 9:59:13
>Asunto: [GUFA] Campo Autoincremental
>
>
>Ok, muchas gracias, voy a cambiar la lógica!!!. Voy a tomar de un select el
>valor máximo en el momento de guardar. Desde ya muchas gracias.
>
>Norberto Alvarez
>
>
>De:[email protected] [mailto:[email protected]] En nombre de Rafael Copquin
>Enviado el: jueves, 26 de noviembre de 2009 09:17 a.m.
>Para: GUFA List Member
>Asunto: [GUFA] Campo Autoincremental
>
>Esa es una de las razones por las cuales los campos autoincrementales se
>deberían utilizar solamente como claves primarias surrogadas. Si por ejemplo
>las usamos para generar números de facturas (que deberían coincidir con el
>número del formulario preimpreso), en caso de error o de que, como dice
>Antonio, alguien grabe antes que vos, se te puede armar una galleta infernal.
>
>Deberías considerarlas equivalentes a un número de registro. Pero a diferencia
>de recno(), que te da el número de registro y permanece constante a menos que
>borres algunos registros y le hagas un pack a la tabla, dicho número es
>absolutamente independiente del número de registro. En otras palabras, si
>tenés una tablita con 10 registros y borrás el último, por ejemplo, le hacés
>un pack y después agregás otro registro, dicho nuevo registro va a tener el
>número 10 de recno(), pero en el caso de la clave autoincremental va a tener
>el 11. Si vos hubieras basado tu lógica en el recno() tendrías un resultado
>que no es el correcto. En cambio, con el número autoincremental podés borrar
>todos los registros que quieras, pero el registro siempre conserva su
>identidad inalterable. Las relaciones entre tablas no se te modifican, en
>fin......
>
>Rafael Copquin
>
>
>----- Original Message -----
>>From:Antonio M. Castaño
>>To:GUFA List Member
>>Sent:Wednesday, November 25, 2009 8:27 PM
>>Subject:[GUFA] Campo Autoincremental
>>
>>Hola Norberto:
>>
>>Es así. Es lo que hacen todos los motores de base de datos. Cuando vos hacés
>>el append te "reserva" el número siguiente de el campo autoncremental. Hace
>>eso, porque en ese mismo momento, alguien podría estar haciendo otro append.
>>Si no tiene reservado una para vos, qué número le asignaría si el otro graba
>>primero?. Lo que te garantiza el motor es que sean todos diferentes. NO que
>>sean consecutivos.
>>
>>Si necesitás un campos incremental, todos consecutivos, lo tenés que manejar
>>de otra manera, con lógica programada por vos.
>>
>>Saludos!
>________________________________
>Encontra las mejores recetas con Yahoo! Cocina.
>http://ar.mujer.yahoo.com/cocina/
Yahoo! Cocina
Encontra las mejores recetas con Yahoo! Cocina.
http://ar.mujer.yahoo.com/cocina/