26 messaggi dal 14 ottobre 2002
Ciao a tutti; il mio problema era riuscire a generare un elenco di codici in successione partendo da un valore iniziale e uno finale che recupero da un form (es. valore 1= 10; valore2=20 e mi serve che inserisca nella tabella per ogni record il codice in successione, quindi 10,11,12,13 fino a 20)
Ecco il codice

WHILE val1<=val2
strSql="INSERT INTO Codici_Nuovi(Codice) VALUES ('"& val1 &"'')"
objConn.Execute strSql
val1=val1+1
WEND

Access mi genera più o meno 12000 record partendo con 1,10,100,1000,1001,1002,1003 ecc.....

Chi mi aiuta??
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
il problema sta nel fatto che le variabili val1 e val2 sono numeriche ma non sono numeri. E' un gioco di parole ma la questione è proprio questa: i dati che ti provengono dal form sono tutte stringhe e aggiungere 1 ad una stringa provoca questo risultato:

var1 = "10"
var1 = var1 + 1

var1 ora non vale 11, ma 101
per cui capisci che la condizione var1 = var2 non potrà mai essere vera.
Per risolvere ti basta fare il casting della variabile, cioè devi cambiarne il tipo da stringa a numero. La funzione Cint() trasforma appunto delle stringhe in numeri, vediamo come:

var1 = Cint(var1)
var2 = Cint(var2)
WHILE val1<=val2
strSql="INSERT INTO Codici_Nuovi(Codice) VALUES ('"& val1 &"'')"
objConn.Execute strSql
val1=val1+1
WEND

Ora che var1 e var2 sono NUMERI (e non stringhe numeriche) il codice dovrebbe funzionare

Enjoy learning and just keep making
26 messaggi dal 14 ottobre 2002
Grande...in effetti il codice funziona!
Ora, andiamo sul difficile; i codici in genere sono così strutturati:
AH-200, AH-201, AH-202 ecc
Cint fa il suo lavoro anche in questo caso?
Ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
no, Cint si usa solamente nel caso di una stringa numerica. Se lo usassi in questo modo:

var1 = "AH-201"
var1 = Cint(var1)

riceveresti l'errore "Type mismatch" (tipi incompatibili) dal momento che var1 contiene anche una parte non numerica (AH-)

Quello che devi fare è estrarre da var1 la parte numerica e usare solo quella nel ciclo while. Come sono strutturati i tuoi codici? hanno sempre due lettere all'inizio, il trattino e un numero di tre cifre? Conoscere il "pattern", cioè la forma dei codici è fondamentale per estrarre la parte che vuoi. In questo caso è semplice perchè la parte numerica è separata dal resto dal trattino, allora fai:

var1 = Cint(Split(var1,"-")(1))
var2 = Cint(Split(var2,"-")(1))
WHILE val1<=val2
strSql="INSERT INTO Codici_Nuovi(Codice) VALUES ('"& val1 &"'')"
objConn.Execute strSql
val1=val1+1
WEND

La funzione Split crea un array in cui ogni elemento è una parte della stringa (il primo parametro) delimitata dal separatore (il secondo parametro).
Così dovrebbe andare, purche tutti i codici abbiano la stessa "forma" di quelli che hai postato, ciaoo

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.