PDA

View Full Version : [SQL & ACCESS]Pulizia Contatore


immakx
24-06-2008, 10:14
Salve a tutti,
sto sviluppando una piccola utility ad uso personale per la gestione del mio lavoro e mi servirebbe una manina, se possibile, su un problema di sovradimensionamento del db; il problema è che per la natura del programma ci sono molti record che vengono cancellati mentre ovviamente sempre di nuovi vengono aggiunti, ora, è possibile fare in modo di ripulire tutti quegli id ( campo contatore ) che non sono più utilizzati per risparmiare sulle dimensioni del file ?

Il programma è sviluppato in VB6, il database ( come da oggetto ) è in Access e il collegamento tra i due avviene tramite SQL.

Grazie a tutti,
( e speriamo si possa fare ).

MarcoGG
24-06-2008, 14:22
è possibile fare in modo di ripulire tutti quegli id ( campo contatore ) che non sono più utilizzati per risparmiare sulle dimensioni del file ?


Il "ripulire" comporta lo shifting di molti id, quindi non la vedo un'operazione consigliabile. Quello che ti consiglio è invece di riempire i buchi nella numerazione progressiva, lasciati dai record cancellati.
Esempio: questa mia semplice Function, da richiamare ad ogni nuova Insert fornisce il più basso tra gli id disponibili :

Public Function NUOVO_ID() As Long

Dim CN As ADODB.Connection
Set CN = CurrentProject.AccessConnection
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
With RS
Set .ActiveConnection = CN
.Source = "SELECT id FROM Tabella1"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With
MsgBox RS.RecordCount
Dim valPre As Long
Dim val As Long
RS.MoveFirst
Do While Not RS.EOF
valPre = RS(0).Value
RS.MoveNext
On Error GoTo EX
val = RS(0).Value
If (val - valPre) > 1 Then
NUOVO_ID = valPre + 1
Exit Do
End If
Loop
EX:
RS.Close
CN.Close
Set RS = Nothing
Set CN = Nothing

End Function
Access non dovrebbe fare storie anche se poi inserisci il valore restituito in un campo contatore. ;)
Prova...

immakx
24-06-2008, 16:01
Soluzione ottimale grazie per la dritta!

:yeah:

MarcoGG
24-06-2008, 16:09
Soluzione ottimale grazie per la dritta!

:yeah:

:cool: