Newsgroup: it.comp.lang.visual-basic
Titolo: [?] [lungo] DAO e OrdinalPosition

Ciao ragazzi, e un grazie a Lupo per la consulenza di ieri.....
ho bisogno ancora di qualche chiarimento. Effettivamente per lavorare con
Access, soprattutto per modificarne la struttura, è molto meglio DAO, perciò
uso questo.
(Non esultare, Lupo, in tutte le atre cose è molto meglio ADO :-)
torniamo a noi. Allora, io devo creare un campo nella stessa posizione di un
altro campo. Mi spiego meglio. Supponiamo una tabella fatta così:
Testo
Quantità
IDUnivoco
Peso
Note
supponiamo che IDUnivoco sia la mia chiave primaria e voglio renderlo
contatore. lancio la mia procedura. La prima cosa che fa questa procedura è
aggiungere tramite DAO un campo contatore; questo nuovo campo deve essere
aggiunto nella stessa posizione di IDUnivoco (questo è il motivo per cui non
uso ALTER TABLE che me lo aggiunge in fondo).
allora ho fatto una funzione che scandisce la tabella:
Private Function DAO_getIndiceCampo(Tabella As DAO.TableDef, ByVal NomeCampo
As String) As Long
Dim lng As Long
NomeCampo = UCase$(NomeCampo)
DAO_getIndiceCampo = 0
For lng = 0 To Tabella.Fields.Count - 1
    If UCase$(Tabella.Fields(lng).Name) = NomeCampo Then
        DAO_getIndiceCampo = lng
        Exit Function
    End If
Next
End Function
poi richiamo un'altra function che aggiunge il campo, settando la
.OrdinalPosition:
Private Function DAO_creaCampo(db As DAO.Database, nomeTabella As String,
NomeCampo As String, Optional Posizione As Long = 0)
Dim Tabella As DAO.TableDef
Dim Campo As DAO.Field
Dim lng As Long
Set Tabella = db.TableDefs(nomeTabella)
Set Campo = New DAO.Field
Campo.Name = NomeCampo
Campo.OrdinalPosition = Posizione
Campo.Type = dbLong
Campo.Attributes = dbAutoIncrField
Tabella.Fields.Append Campo
End Function
il codice di per sè funziona, solo che, non capisco, a volte il nuovo campo
appare nella posizione giusta, a volte va a finire nella prima posizione,
insomma, c'è qualcosa che non va......
ne sapete qualcosa? Lupacchiotto, ti risulta qualcosa, per favore?
grazie a tutti!!!
good coding!!!
-- 
Alletun
Sorry, ask me if you want to get my e-mail!

 ne sapete qualcosa? Lupacchiotto, ti risulta qualcosa, per favore?
Prova con quello che ti ho già consigliato nell'altro 3d. Non garantisco sul
perfettissimissimo funzionamento, garantisco che di suo non ci mette nulla.
Inoltre, fermo restando che OP è in base 0, non so cosa accada (ma forse la
guida lo spiega) se si assegna una OP già esistente, non so cioè se va in
coda a quelli di quel "gruppo" o in testa. Con quel che ti dicevo, quando
cambio OP, riassegno esplicitamente OP a tutti i campi (senza cancellarli e
ricrearli, ovviamente, ne perderei i contenuti) risolvendo anche eventuali
"buchi" di numerazione.

         DAO_getIndiceCampo = lng
Rileggendo mi viene un dubbio atroce: Questo (lng) è l'indice nell'insieme
Fields (e può cambiare anche dinamicamente), non è l'OrdinalPosition del
campo
Se ti serve OP, fai:
         DAO_getIndiceCampo = Tabella.Fields(lng).OrdinalPosition


 "buchi" di numerazione.
sì, l'ho letto adesso, grazie!!! effettivamente quello di riassegnare tutti
gli OP ai campi mi era venuto in mente, però è sempre meglio chiedere
qualche conferma......
mamma mia, tra ieri e oggi sto diventando con DAO....
vabbè, grazie, ciao Lupo!!!!


 > End Function
AAAARRRRGGGGHHHHH!!!!!!
non funziona comunque, a quanto pare, ma precisazione assolutamente e
incontestabilmente giusta........uff, mi era proprio sfuggito, il venerdě
sta cominciando a farsi sentire.....
sto percorrendo la strada del ri-assegnamento di tutti gli OrdinalPosition,
poi vediamo.......
grazie di tutto, sei proprio un Lupo!!!
