Grazie!Originariamente inviato da optime
ottimo ale!![]()
![]()
Grazie!Originariamente inviato da optime
ottimo ale!![]()
![]()
xxx
Ciao a tutti. Grazie come sempre dei suggerimenti!!!
Non sono morto. Il lavoro mi sta ammazzando!
Vi descrivo la mia soluzione un pò forse da macellaio. E vi dico anche una piccola anomalia riscontrata (per me davvero strana).
Function priminumeri(strText,intLimite)
Dim intPosSpace, arrExitChars, i
'Array con i caratteri da controllare.
arrExitChars = Array(".",";",":","?","!")
If Not IsNumeric(intLimite) THEN
priminumeri = strText
ElseIf (Len(strText) <= intLimite) Or (intLimite <= 0) Then
priminumeri = strText
Else
For i=0 To Ubound(arrExitChars)
intSpace = inStrRev(Left(strText,intLimite),arrExitChars(i))
If intSpace > 0 Then
priminumeri = Left(strText,intSpace)
Exit For
Else
priminumeri = Left(strText,intLimite)
End If
Next
End If
End Function
x=request.Form("totale_vie")
dim vie()
ReDim vie(x)
dim vieordinate
ReDim vieordinate(x)
for i = 0 to x
viaform=request.Form("via"&i)
distanzaform=request.Form("distanza"&i)
vie(i)=distanzaform&"@"&viaform
numero = priminumeri(distanzaform,4)
num = cInt(replace(numero,"&",""))
sql = "INSERT INTO ordinarearray (distanza,via,valore) values ('" & distanzaform & "','" & viaform & "','" & num & "')"
dbc.execute(sql)
NEXT
sql = "select * FROM ordinarearray order by valore ASC"
Set querya=Server.CreateObject("ADODB.Recordset")
querya.Open sql, dbc, 3
for i = 0 to x
vieordinate(i) = querya("via")
querya.movenext
NEXT
sql = "DELETE FROM ordinarearray"
dbc.execute(sql)
In pratica cosa faccio.
Ho un elenco di stringhe del tipo 10,9 km (circa 2 minuti)...
Prendo i dati dell'array e li inserisco nel db.
Prendo il numero che da stringa diventa un numero approssimato e lo inserisco in un campo della tabella.
Ordino la tabella in base a quel valore.
Ripopolo l'array ordinato con le stringhe iniziali
Svuoto il db.
Funziona perfettamente, ma ho solo un problema.
Ho notato che la prima volta che si esegue il codice mi da un errore nella funzione cInt.
Ricaricando la pagina l'errore non lo da più.
Succede sempre in ogni pc. L'ho testato su 5 pc differenti e ognuno mi da l'errore.
Da cosa dipende???![]()
Tutto succede, nulla capita.
Secondo me in questo modo ti complichi inutilmente la vita, passare da un db per ordinare un array è un po come andare ad ammazzar zanzare con un fucile da caccia grossa.
Se comunque vuoi mantenerla come soluzione il CInt che dici puoi anche toglierlo, messo dov'è non serve a nulla.
![]()
xxx
ciao Ale..
Questa è la soluzione che sono riuscito a frullare nella mia testa. E l'ho voluta condividere (com'è giusto che sia) con tutti voi per capire se ho fatto bene o male.
Sicuramente funziona e altrettanto sicuramente ci sarà una soluzione più leggera. Anche perchè, se tutto va bene, prevedo non 10 risultati da ordinare ma anche 200. E allora mi metto le mani nei capelli. E peròquando arriverò ai 200 risultati magari il sito sarà rifatto da capo, in un altro server.. non so prevedere ancora nulla.
Tolgo il cInt allora..![]()
Tutto succede, nulla capita.
Aggiornamento:
Se tolgo il cInt non mi ordina nulla.
Ed è chiaro:
Nella porzione di codice dico che numero da stringa diventa un numero. Nel db poi ordino tutto in dal più piccolo al più grande operando sul campo num.
Devo ordinare numeri non lettere.
viaform=request.Form("via"&i)
distanzaform=request.Form("distanza"&i)
vie(i)=distanzaform&"@"&viaform
numero = priminumeri(distanzaform,4)
num = cInt(replace(numero,"&",""))
sql = "INSERT INTO ordinarearray (distanza,via,valore) values ('" & distanzaform & "','" & viaform & "','" & num & "')"
dbc.execute(sql)
Il problema che non capisco è come mai la prima ricerca effettuata su un pc "vergine" ti da questo errore SOLO per la prima. Per le successive no.![]()
![]()
Tutto succede, nulla capita.