Newsgroup: it.comp.www.asp
Titolo: spostare il cursore

ciao a tutti.
Non sono un gran esperto di ADO.
Carrello degli acquisti.
Faccio una query ad un db (access per il momento, ma sarà MS SQL server) 
che mi ritorna gli articoli nel carrello.
Il problema è che ovviamente il db mi ritorna gli articoli ordinati per 
come li trova, io invece li vorrei per come li ho chiamati nella select.
Se dico WHERE ID = 5 Or ID = 3 OR ID = 7 me li dovrebbe elencare 
nell'ordine 5, 3, 7. Invece ovviamente trova prima il 3, poi 5 e 7.
Immagino che devo far spostare il cursore.
Qual'è la funzione meno dispendiosa per il server?

Ciao
E' decisamente una richiesta strana :)
Allora, non ho mai provato perche non ne ho mai avuto la necessità (ed
effettivamente mi sfugge l'utilità) ma così su due piedi ti posso dare
alcune soluzioni..
1: perche non fare tre select separate? in questo caso forse forse ti
conviene ancora!
2: un po macchinoso, manovri all'interno del recordset (disconnesso, per
favore:)) giocando di movefirst e movenext, ma francamente non credo che
convenga e poi non è nemmeno tanto bello :)
Altre idee francamente non mi vengono in mente, ma sarei curioso di sapere
come mai ti serve, così per pura curiosità!
Ciao
--
Alessandro
UGIdotNET - 
http://www.ugidotnet.org

 convenga e poi non è nemmeno tanto bello :)
Infatti! Per questo chiedevo se c'era qualche altra possibilità, 
riguardante ADO, che non conoscevo. Anche perchè l'ideale sarebbe stato 
sincronizzare il record con un valore che prendo da un array, e non 
sfogliare su e giù fino a che non coincidono, ma proprio sincronzzare 
come farei con una select.
Il concetto è questo: in querystring ho un array con i codici prodotto e 
le quantità scelte. Con i codici faccio una select "WHERE codice =" & 
IDarray(0) & " OR codice=....e via via.
Ora, i codici prodotto nell'array NON sono ordinati; le uscite recordset 
sì (appunto per come li trova nel db). Quindi, facendo un normale ciclo 
per stampare CODICE - TITOLO - QTA' non c'è coordinamento tra codice-
quantità (array) e titolo (recordset).
Ovviamente ho risolto facendo il contrario di quello che chiedevo, cioè 
stampando il valore del recordset e, con un sottociclo sull'array, fino a 
trovare la sincronia.
Ma anche questo non mi piace granchè, a questo punto chiaramente è 
comunque molto meglio, ma insomma.

 IDarray(0) & " OR codice=....e via via.
RI-ARGH!!
Scusa, ma non mi sembra proprio un metodo decente...
Scusa, tu hai i tuoi prodotti, e per gestire gli ordini glieli passi ogni
volta in querystring? ma non ti conviene usare una tabella separata "ordini"
in cui metti l'ID del prodotto, la quantita e dopo fai una join con la
tabella prodotti all'atto di stampare? è la soluzione migliore (io direi
l'unica...), hai la possibilità di stabilire l'ordine direttamente nella
tabella prodotti, non ti serve cercare una sincronia tra gli elementi della
collection querystring ed il recordset, che mi sembra una cosa da pazzi.
Fammi capire se poi sono io a non aver capito il problema, può anche essere
:)


 soluzione migliore (io direi l'unica...), hai la possibilità di
non l'unica ma decisamente tra le migliori soluzioni...
ciao
--
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
Le tue scelte sono scommesse. Come quelle di chiunque altro.

 collection querystring ed il recordset, che mi sembra una cosa da pazzi.
Dimmi che ne pensi, ora che forse mi sono spiegato meglio.

 In poche righe è fatto tutto, controlli e recovery compreso.
Dalle esperienze che ho avuto, credi male :)
Fai una tabella carrello, o una tabella ordini temporanei, o chiamala come
ti pare, dove memorizzi gli ordini temporanei, e che viene svuotata dal
global.asa all'application_onEnd e comunque che abbia una procedura che ad
ogni accesso controlli ed elimini i carrelli piu vecchi di tot giorni, e
dopo quando sono confermati li metti in una tabella ordini definitiva....
Non ho mai sentito che qualcuno usasse un'array in querystring o in session
che dir si voglia per memorizzare i dati di acquisto. E se uno ti vuole
comprare una trentina di prodotti? la lunghezza della querystring è
limitata, gli impedisci di comprare perche hai finito il pacchetto HTTP di
richiesta? mi sembra poco produttivo....


 svuotata dal global.asa all'application_onEnd e comunque che abbia
e' sicuramente la soluzione migliore... dove aggiungerei che con le tabelle
e' possibile implementare anche la possibilit'a di salvare il carrello per
tot giorni... cosa molto utile in un sito e-commerce...


 
Forse è meglio che vi racconti cosa ci sta dietro.
E' stato fatto, un bel po' di tempo fa, un semplicissimo catalogo e 
shopping bag per un'associazione culturale. Oggi il sito va abbastanza 
bene, anche se non raggiunge le 100000 pagine mese.
Grosso modo il sistema è come dite voi, anche perchè compravano solo gli 
iscritti. Nessuna procedura nel global, non serviva. Confermavo un ordine 
cambiandogli uno valore di stato nel db. Se un ordine non veniva 
confermato, lo cancellava lo staff (vogliono così).
Il db è Access2000. 1,5 Mb su 5 tabelline. 
Man mano all'aumentare degli accessi, il servizio di IIS si piantava. 
Bisognava chiamare il ISP che lo ripristinava (in hosting presso un 
providerino locale). Ho provato a spostare (redirect) il tutto sul mio 
spazio su un altro ISP (serio), funziona e non si pianta mai.
NON ditemi di cambiare ISP perchè quello (che si pianta) gli dà lo spazio 
a gratis. NON ditemi di SQLserver, stessa cosa. Io stesso lavoro a 
gratis.
Ora, devo cercare di alleggerire TUTTI i calcoli che il server fa. 
Connessioni al db comprese.
Ho visto fare cose del genere (array etc) su Session.
Ecco perchè ho pensato di fare querystring con session solo come 
recovery. Mai nessuno acquista più di 3-4 prodotti (libri e gadget) alla 
volta, dunque non finirò mai lo spazio in query.
Voi che fareste? Io credo che la mia idea sia l'unica.
Ma attendo vostre.

 Qual'è la funzione meno dispendiosa per il server?
Puoi seguire i suggerimenti che ti hanno oppure puoi utilizzare la proprietà
'filter' del recordset.
In poche parole, una volta popolato il tuo recordset con il comando sql:
rs=connnessione.execute("select * from tabella WHERE ID = 5 Or ID = 3 OR ID
= 7")
puoi visualizzarli uno alla volta con:
- s.filter="id=5"
- Leggi primo record.
- s.filter="id=3"
- Leggi primo record.
- s.filter="id=7"
- Leggi primo record.
ecc...
E' un'altra possibile soluzione...
--
Ciao,
Andrea Z.

 
OK grazie! Provo

A questa stregua, utilizza dei file per ogni utente con FSO. E' piu sicuro,
meno macchinoso e forse forse anche meno oneroso (ma non sono cosi' sicuro
:))!
Io non passerei mai quel genere di informazioni, troppo macchinoso, anche
perche dopo ogni parte del sito deve tenersi in memoria la querystring...
non mi ispira :)
