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/

Responder a