Campo autoincremental en DBF

Campo autoincremental en DBF

Postby horacio » Thu Oct 27, 2022 10:06 pm

Colegas, estoy creando una base de datos dbf con un campo incremental pero cuando lo genero el mismo tiene una longitud de cuatro enteros por mas que le ponga un número mayor en la longitud. Hay alguna manera de incrementar esa longitud?. Desde ya muchas gracias.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Campo autoincremental en DBF

Postby carlos vargas » Thu Oct 27, 2022 10:40 pm

* src/rdd/dbf1.c
+ added support for autoincrement fields with counter longer then 4 bytes
Warning: if someone created tables with such fields i.e. { "I:+", 8, 0 }
after my modification which added support for AutoInc flags in
all numeric DBF fields then he should update counters manually
using DBS_COUNTER flag. New code uses 64bit counters for suuch
field located in different part of DBFFIELD structure.

* src/rdd/dbf1.c
+ finished support for AutoInc flag (+) for all numeric fields (N, F, I, B)
in DBF* RDDs. Now user can define field like:
{ "COUNTER", "I:+", 4, 0 }
and they will work like autoincrement fields but without any assign
restrictions.

* harbour/src/rdd/dbf1.c
+ added new dbFieldInfo() actions:
DBS_COUNTER - get/set autoincrement field counter
DBS_STEP - get/set autoincrement field step
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Campo autoincremental en DBF

Postby karinha » Fri Oct 28, 2022 2:35 pm

Buen día. Muestre la fuente de cómo lo está haciendo y explique para qué sirve este campo incremental. ¿Es para controlar la numeración de algo que estás haciendo? En caso afirmativo, en HARBOUR, ¿RecNo() + 1 no funciona? En xHarbour funciona bien.

Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Campo autoincremental en DBF

Postby horacio » Mon Oct 31, 2022 1:19 pm

Hola, en realidad me pidieron una aplicación en base de datos DBF que hace mucho que no trabajo y estoy experimentando con las nuevas características pensando que esta funcionaba como un campo autoincremental tipo SQL. Si mal no recuerdo Recno() me indica el ordinal de un registro pero si hago un Pack ese valor varía cosa que no sucede con este campo. Si alguien no me puede echar luz sobre como variar su longitud usaré un numerador externo. Muchas gracias por tu respuesta

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Campo autoincremental en DBF

Postby FiveWiDi » Mon Oct 31, 2022 8:18 pm

horacio wrote:Hola, en realidad me pidieron una aplicación en base de datos DBF que hace mucho que no trabajo y estoy experimentando con las nuevas características pensando que esta funcionaba como un campo autoincremental tipo SQL. Si mal no recuerdo Recno() me indica el ordinal de un registro pero si hago un Pack ese valor varía cosa que no sucede con este campo. Si alguien no me puede echar luz sobre como variar su longitud usaré un numerador externo. Muchas gracias por tu respuesta

Saludos


Hola Horacio,

A mi así {"NUMEUNIC","N:+",6,0 } me funciona, de momento ya tengo numerados con 5 cifras.

Entiendo que así {"NUMEUNIC","I:+",6,0 } no debe ser la misma longitud/tipo de dato.

Prueba con "N:+" en vez de "I:+".
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1060
Joined: Mon Oct 10, 2005 2:38 pm

Re: Campo autoincremental en DBF

Postby carlos vargas » Tue Nov 01, 2022 11:43 pm

si no estoy mal, entiendo que por defecto
{ "COUNTER", "I:+", 4, 0 }
se le asigna 4 byte para almacenar el numero contador de la fila o registro, esto no es 4 digitos "1234" como si de una cadena se tratara, si no que se asigna 128 bit (8bit x 4 len) para almacenar el numero, lo cual da para un numero muy muy grande. n o hay necesidad de mayor longitud al menos para la mayoria de los casos.


alguien con mas conocimientos pudiera aclararlo por favor.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Campo autoincremental en DBF

Postby carlos vargas » Tue Nov 01, 2022 11:48 pm

como comentario adicional, una vez utilice en una tabla ads un campo de tipo ROW, el cual se incrementa automaticamente cada vez que el registro era modificado, lo cual sumado a un campo de tipo timestamp que se actualiza cada vez que el registro se modificada nos servia para darnos cuantas si los datos eran modificados (alteravan la info para que cuadrara a la fuerza), y efectivamente asi era. :-) auditoria de datos.

veo que harbour tambien ya lo implementa, asi hay muchisimas cosas ya implementadas en harbour que no sabemos que existen y que no las usamos por desconocimiento.

; Current field type mappings are:
C; Character,n HB_FT_STRING,n ADS_STRING
N; Numeric,n,d HB_FT_LONG,n,d ADS_NUMERIC
D; Date,n HB_FT_DATE,3 or 4 or 8 ADS_COMPACTDATE; ADS_DATE
ShortDate HB_FT_DATE,3 ADS_COMPACTDATE
L; Logical HB_FT_LOGICAL,1 ADS_LOGICAL
M; Memo,n HB_FT_MEMO,4 or 9 or 8 ADS_MEMO
B; Double,,d HB_FT_DOUBLE,8,d ADS_DOUBLE
I; Integer,n HB_FT_INTEGER, 2 or 4 or 8 ADS_SHORTINT; ADS_INTEGER; ADS_LONGLONG
ShortInt HB_FT_INTEGER,2 ADS_SHORTINT
Longlong HB_FT_INTEGER,8 ADS_LONGLONG
P; Image HB_FT_IMAGE,9 or 10 ADS_IMAGE
W; Binary HB_FT_BLOB,4 or 9 or 10 ADS_BINARY
Y; Money HB_FT_CURRENCY,8,4 ADS_MONEY
Z; CurDouble,,d HB_FT_CURDOUBLE,8,d ADS_CURDOUBLE
T,4; Time HB_FT_TIME,4 ADS_TIME
@; T,8; TimeStamp HB_FT_TIMESTAMP,8 ADS_TIMESTAMP
+; AutoInc HB_FT_AUTOINC,4 ADS_AUTOINC
^; RowVersion HB_FT_ROWVER,8 ADS_ROWVERSION
=; ModTime HB_FT_MODTIME,8 ADS_MODTIME
Raw,n HB_FT_STRING,n (+HB_FF_BINARY) ADS_RAW
Q; VarChar,n HB_FT_VARLENGTH,n ADS_VARCHAR; ADS_VARCHAR_FOX
VarBinary,n HB_FT_VARLENGTH,n (+HB_FF_BINARY) ADS_VARBINARY_FOX; ADS_RAW
CICharacter,n HB_FT_STRING,n ADS_CISTRING
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Campo autoincremental en DBF

Postby nageswaragunupudi » Fri Nov 04, 2022 11:12 pm

To create an auto-increment field,
just use datatype "+"
{ "ID", "+", 4, 0 }
That is enough. Please try it.

Do not worry about the width of "4". They do not represent decimal digits. The value is stored as 4 hex bytes. The maximum value in hex is 0xFFFFFFFF = 4,294,967,295. This is a lot more than enough.

For Date of last update of the record use datatype :
{ "UPDATE", "=", 8, 0 }

For Version number use
{ "NVERSION", "V", 10, 0 }
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 91 guests