Gentilissimo Brainjar
ti ringrazio per il tuo aiuto.
A questo punto devo dirla tutta......
Penso che per chi ha dimestichezza con access e VB questo è un quesito stimolante.
In pratica, sto cercando di lavorare con un database access aperto sfruttando codice VBA per operazioni complesse. Le operazioni di routine le faccio con le "pronte" querry, maschere ecc.
L'operazione complessa è la seguente:
Dentro una tabella (dello stesso DB aperto) ho un campo ("Interpretazione_limiti") di tipo stringa che può avere diverse informazioni. Queste informazioni sono racchiuse da virgolette e separate da una virgola ("xx","xxx","x"). Il numero di informazioni (separate da virgola) è variabile per ogni record.
Lo scopo è: in base al valore di un campo numerico "DefaultValue" (dello stesso record) devo compilare il campo "Interpretazione_default" (dello stesso record) con la stringa "abbinata".
Per "abbinata" faccio un chiaro esempio di un record:
se Interpretazione_limiti vale -> "italiano","inglese","francese"
e se DefaultValue = 1 -> Interpretazione_default dovrà essere -> italiano
o se DefaultValue = 2 -> Interpretazione_default dovrà essere -> inglese
o se DefaultValue = 3 -> Interpretazione_default dovrà essere -> francese
In sostanza devo prelevare una stringa in base alla "posizione" indicata.
La difficoltà è che la lunghezza delle stringhe varia e varia il numero.
Questo codice volevo metterlo dentro un bottone in una maschera dello stesso database.
Io ho pensato di risolvere il rilevamento stringhe nel seguente modo:
- per ogni record, campionare il campo "Interpretazione_limiti"e calcolare quante volte compare il carattere doppio apice (") e salvare il numero calcolato nella var. NumSeparatori.
- se NumSeparatori = 0 saltare il record
- verificare se NumSeparatori è dispari e visualizzare l'errore "Controllare Interpretazioni dei limiti"
- Se NumSeparatori è pari, trovare quante stringhe ci sono (semplicemente dividendolo per due) NumInterpretazioni = NumSeparatori / 2
- Calcolare per ogni stringa, la prima e l'ultima posizione dei caratteri in essa contenuti (per poterla poi estrarre), partendo dagli estremi del campo e via via restringendo la ricerca:
PosRicerca := 1
For I:=1 to NumInterpretazioni do
PosizStartInterpr[I] = Instr(PosRicerca,Interpretazione_Limiti, """, VbTextCompare) 'Ricerca della posizione del primo carattere " che trova (funziona """ ??)
PosRicerca := PosRicerca + 1 'esclude primo carattere per cercare il prossimo "
PosizEndInterpr[I] = Instr(PosRicerca,Interpretazione_Limiti, """, VbTextCompare) 'Ricerca della posizione del prossimo carattere " che trova che corrisponde alla fine della prima stringa
LunghStringa[I]= PosizEndInterpr[I] - PosizStartInterpr[I] - 2 ' Calcolo della lunghezza della stringa escludendo due caratteri per la posizione di " in testa ed in coda
PosizStartInterpr[I] = PosizStartInterpr[I] + 1 'per evitare il primo carattere "
Interpretazione(I) : = MID (Interpretazione_Limiti, PosizStartInterpr[I], LunghStringa[I]) 'estrazione della prima stringa contenuta tra doppie virgolette
DB_Monocircuito. DefaultValue := Interpretazione(I) ' popolamento campo del DB
End
- Resettare tutti gli indici
ciao e grazie
Davide

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando