[ pmiroslav @ 23.02.2007. 08:33 ] @
| Imama tablicu u kojoj je polje ID sa slijedečim svojstvima
ID = AutoNumber + Primary Key
Fild Size = Long Integer
Format = prazno
Caption = prazno
Indexey = Yes (No Duplicates)
u tablici imama več preko 10000 podataka, zadnji ID je 20160
I sada kada upisujem novi zapis ID tj Autonumber upiše se 7974 a taj broj več postoji.
Izađem sa Esc i pokušam ponovo upiše se 7975 itd
U čemu je problem.
Do sad nisam imao takvih problema
|
[ Fanta @ 26.02.2007. 14:20 ] @
Ne znam u čemu je nastao problem, ali mogu ti predložiti riješenje.
Nedavno sam se susreo sa sličnim problemom, ali ja sam morao spojiti podatke iz dvije tablice u jednoj su mi bili integer, a u drugoj tipa double, a ja sam trebao omogučiti daljni upis podataka po ID-u. Riješenje sam našao u Zidarevoj staroj funkciji:
Poziv funkcije bi otprilike glasio:
Private Sub Form_BeforeUpdate(Cancel As Integer)
'Za novi rekord, automatskis se izracunava broj protokola
If Me.NewRecord Then
Me!PoljekojetiIduformi = fNoviBroj(strTableName:="Imetabele", strFieldName:="Imepoljautabeli")
End If
End Sub
A sama funkcija ti glasi:
Function fNoviBroj(strTableName As String, strFieldName As String) As Variant
'Izracunava novi broj, da bude PK
'u tabelama gde je PK numericki podatak (ne Autonumber)
'Treba pozivati sa BeforeUpdate za formu
'da se izbegne stvaranje duplikata u multi user rezimu
On Error GoTo fNoviBroj_ERROR:
'Koristicemo DMax funkciju, koja moze da vrati i NULL (prazna tabela)
'pa nam treba VARIANt tip (NULL ne moze u numeric data type)
Dim varNoviBroj As Variant
varNoviBroj = 1 + Nz(DMax(strFieldName, strTableName), 0)
'Napomena: ne proveravamo nigde da li je data tip od strFieldName dobar.
'Ako posaljete polje koje je text tipa, dobicete 0 natrag
fNoviBroj = varNoviBroj
fNoviBroj_EXIT:
Exit Function
fNoviBroj_ERROR:
Select Case Err.Number
Case 2001
MsgBox "Pogresan parameter (strFieldName) prosledjeno funkciji", title:="fNoviBroj, Error " & Err.Number
Case 3078
MsgBox "Pogresan parameter (strTableName) prosledjeno funkciji", title:="fNoviBroj, Error " & Err.Number
Case Else
MsgBox prompt:=Err.Description, title:="fNoviBroj Error " & Err.Number
End Select
Resume fNoviBroj_EXIT:
End Function
Ono što sam bio napravio je da sam nakon toga polja autonumber u tablici promijenio u Number, a zadnji broj koji sam unio u polje u tablici je bio cijeli broj pa mi je dalje nastavilo zbrajati sa varNoviBroj = 1 + Nz(DMax(strFieldName, strTableName), 0), tj. imitiralo je autonumber od polja gdje sam stao.
U tvom slučaju predlažem da malo prilagodiš si funkciju po pravilu koji ti odrediš umjesto 1 koja je u mom slučaju.
Nadam se da sam ti pomogao
[ Pike79 @ 26.02.2007. 17:20 ] @
Ja koristim slican kod koji imitira autonumber i desava mi se ponekad da preskoci neki broj, mislim da je to zbog toga sto mi se desi da ne unesem sve podatke u formi i slucajno izadjem iz nje.
Ima li neko ovakav slican kod koji ce dodeljivati redne brojeve, ali da dozvoljava rucnu izmenu ako se desilo neko preskakanje rednog broja.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.