Newsgroup: it.comp.appl.access
Titolo: Generare Stringa in modo automatico

Allora:
adattando quanto segue:
Public Function MkPwd(Optional Lunghezza As Integer, Optional Template As 
String) As String
'
' Lunghezza ->Lunghezza password
'
' Sintassi Template
' X -> carattere Maiuscolo o Minuscolo
' U -> carattere Maiuscolo
' L -> carattere Minuscolo
' 9 -> numero
' . -> segno di interpunzione
' ^ -> segno o simbolo
' se viene passato solo la lunghezza della password viene generato una 
conbinazione casuale di caratterni numeri segni e simboli
' Se viene passato solo il template viene preso come esempio della stringa 
da realizzare
' se viene passato lunghezza e template viene ripetuto il template nella 
Lunghezza richiesta
' se il template contiene caratteri diversi da quelli ammessi viene genarato 
casualmente u carattere
Dim Carattere As String
Dim Lettere As String
Dim Numeri As String
Dim Segni As String
Dim Simboli As String
Dim Tipologia As String
Dim Ciclo As Integer
Dim Ciclo1 As Integer
Dim Puntatore As Integer
Dim Campione As String
Dim Verifica As String
Dim Valido As Boolean
Randomize
Lettere = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Numeri = "0123456789"
Segni = "+-/*;,:."
Simboli = "!£$%&()=?^[]_<>+-/*;,:."
Tipologia = "X9.^UL"
If Lunghezza = 0 And Template = "" Then ' non è specificato niente!!!
    MkPwd = "Errore [Numero parametri]"
    Exit Function
End If
If Lunghezza <> 0 Then ' se è specificata la lunghezza
    If Template = "" Then ' se il template è vuoto lo creo
            For Ciclo = 1 To Lunghezza
                Campione = Campione & Mid(Tipologia, Int((Len(Tipologia) - 1 
+ 1) * Rnd + 1), 1)
            Next Ciclo
       Else
            Puntatore = 1 ' altrimenti replico il template nella lunghezza
            For Ciclo = 1 To Lunghezza
                Campione = Campione & Mid(Template, Puntatore, 1)
                Puntatore = Puntatore + 1
                If Puntatore > Len(Template) Then Puntatore = 1
            Next Ciclo
    End If
End If
If Lunghezza = 0 Then Campione = Template
' verifica sintassi campione
For Ciclo = 1 To Len(Campione) 'scorro la stringa camione
    Carattere = UCase(Mid(Campione, Ciclo, 1)) ' prendo un carattere del 
Campione
    Valido = False
        For Ciclo1 = 1 To Len(Tipologia)
            If Carattere = Mid(Tipologia, Ciclo1, 1) Then Valido = True 
'confronto il carattere con il campione se è valido ->true
        Next Ciclo1
    If Not Valido Then ' se il carattere non è valido lo metto a caso
        Carattere = Mid(Tipologia, Int((Len(Tipologia) - 1 + 1) * Rnd + 1), 
1)
    End If
    Verifica = Verifica & Carattere
Next Ciclo
For Ciclo = 1 To Len(Verifica) ' infine genero la password
    Select Case Mid(Verifica, Ciclo, 1)
        Case "X"
            Carattere = Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd + 1), 
1)
        Case "U"
            Carattere = UCase(Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd 
+ 1), 1))
        Case "L"
            Carattere = LCase(Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd 
+ 1), 1))
        Case "9"
            Carattere = Mid(Numeri, Int((Len(Numeri) - 1 + 1) * Rnd + 1), 1)
        Case "."
            Carattere = Mid(Segni, Int((Len(Segni) - 1 + 1) * Rnd + 1), 1)
        Case "^"
            Carattere = Mid(Simboli, Int((Len(Simboli) - 1 + 1) * Rnd + 1), 
1)
    End Select
    MkPwd = MkPwd & Carattere
Next Ciclo
End Function
*****
e gestendolo da click pulsante:
*****
Private Sub CambiaPSW_Click()
On Error GoTo Err_Sostituire
Dim MiaTabella As Recordset
Dim VCode As String
    MessaggioOK = "ATTENZIONE SI STA PER ATTRIBUIRE UN CODICE VIRTUALE " & _
                  "A TUTTI I PARTECIPANTI, VUOI PROCEDERE ????? !!!!!"
   VCode = Me.VCode_Tipo.Value
   Set MioDB = CurrentDb()
   Set MiaTabella = MioDB.OpenRecordset("tblConcorrente", dbOpenDynaset)
   Do Until MiaTabella.EOF()
      MiaTabella.Edit
      MiaTabella!ID = MkPwd(5, VCode)
      MiaTabella.Update
    MiaTabella.MoveNext
   Loop
    MiaTabella.Close
    Set MiaTabella = Nothing
    MioDB.Close
MsgBox "TERMINATO!"
Exit_Sostituire:
    Exit Sub
Err_Sostituire:
        MsgBox Err.Description
    Resume Exit_Sostituire
End Sub
vado a popolare il campo id della tabella tblConcorrente con un codice 
creatosi in automatico.
Problema:
il campo id non è in chiave *e non può esserlo*, ma, per mie esigenze, o 
meglio, per esigenze imposte, NON POSSO SCRIVERCI DUE VOLTE LO STESSO CODICE 
(quello che scrive la suddetta procedura).
Insomma dovrei generare random dei codici univici rispetto a quelli scritti 
di volta in volta.
Cosa mi suggerite di fare?
Grazie
-- 
**********
EmMeCi
********** 

[cut]
dimenticavo...
il codice mi č stato passato gentilmente da Riaudo e pubblicamente 
ringrazio.
Scusa se posto anche sul NG oltre ad averti scritto in privato, ma ho 
urgenza di risolvere il problema e non voglio caricare tutto su di te!
In buona fede ti saluto e ti ringrazio.
-- 
**********
EmMeCi
********** 

Problema risolto.
Grazie Marcello
-- 
**********
EmMeCi
**********