01 aprile 2007 alle 13:48:44 Sto cercando di definire uno strumento di paginazione per un sistema di carrello della spesa che poggia su un db esterno a aspnuke. il db contiene circa 40.000 records e, quindi, quando la ricerca è molto ampia il problema è reale. cercando in giro ho trovato una funzionalità che si basa sulla clausola LIMIT da aggiungere alla SELECT, ma non sono ancora riuscito a farla funzionare. le domande sono due: 1)che voi sappaite, ci sono dei problemi specifici con l'ulitilizzo della clausola LIMIT in aspnuke? 2) l'errore che al momento mi produce è il seguente:
ErroreSQL -2147217900: [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query '( TitoloOfferta LIKE '%laser%' AND TitoloOfferta LIKE '%a4%' OR InfoOfferta LIKE '%laser%' AND InfoOfferta LIKE '%a4%' LIMIT 0, 20 )'. SQL : SELECT * FROM tbl_Offerte WHERE ( TitoloOfferta LIKE '%laser%' AND TitoloOfferta LIKE '%a4%' OR InfoOfferta LIKE '%laser%' AND InfoOfferta LIKE '%a4%' LIMIT 0, 20 )
01 aprile 2007 alle 16:32:21 Se vuoi per impaginare io uso questa sub che non mi ricordo dove ho trovato...
Sub DisplayFormPoli() Dim oCn, oRs, SQL, iLine, iPageSize, iPageCount, iPageCurrent, strOrderBy, iRecordsShown, i iPageSize = 4
If Request.QueryString("page") = "" Then iPageCurrent = 1 Else iPageCurrent = CInt(Request.QueryString("page")) End If If Request.QueryString("order") = "" Then strOrderBy = "id" Else strOrderBy = Request.QueryString("order") End If
Set oCn = Server.CreateObject("ADODB.Connection") oCn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/mdb-database/*.mdb") Set oRs = Server.CreateObject("ADODB.Recordset") SQL = "SELECT * FROM feedback ORDER BY " & strOrderBy & " DESC;" oRs.Open SQL, oCn, adOpenKeyset oRs.PageSize = iPageSize oRs.CacheSize = iPageSize iPageCount = oRs.PageCount
If iPageCurrent > iPageCount Then iPageCurrent = iPageCount If iPageCurrent < 1 Then iPageCurrent = 1 If iPageCount = 0 Then Response.Write("Nessun record visualizzato!") Else oRs.AbsolutePage = iPageCurrent iRecordsShown = 0 CreateTopTable "Form" , "Form" Response.Write "<table cellspacing=""0"" cellpadding=""0"" width=""100%"">" & vbCRLF
iRecordsShown = iRecordsShown + 1 oRs.MoveNext Loop End If Response.Write "</table>" & vbCRLF %><p align="center">Pagina <%= iPageCurrent %> di <%= iPageCount %><br><% If iPageCurrent <> 1 Then %><a href="xxx.asp?page=<%= iPageCurrent - 1 %>&order=<%= Server.URLEncode(strOrderBy) %>"> Indietro</a> <% End If
For I = 1 To iPageCount If I = iPageCurrent Then %> <%= I %> <% Else %> <a href="xxx.asp?page=<%= I %>&order=<%= Server.URLEncode(strOrderBy) %>"><%= I %></a> <% End If Next
If iPageCurrent < iPageCount Then %><a href="xxx.asp?page=<%= iPageCurrent + 1 %>&order=<%= Server.URLEncode(strOrderBy) %>">Avanti</a> <% End If
CreateBottomTable ""
oRs.Close Set oRs = Nothing oCn.Close Set oCn=Nothing
End sub %>
mennella Avanzato
155 Discussioni
01 aprile 2007 alle 17:29:55 tentativi del genere li ho già provati, ma ci sono problemi di cursore e di compatibilità generale con il codice di aspnuke. io sto cercando di sviluppare uno strumento che sia perfettamente compatibvile con il resto del portale
--------------- Questi li ho fatti io! http://www.digirolamoeditore.com http://www.sferaufficio.com
piosky_to2003 Esperto
2291 Discussioni
02 aprile 2007 alle 06:49:26 Modificato il 02 aprile 2007 alle 06:54:14secondo me sbagli la query chiudendo la tonda dopo il limit
in breve SELECT campi FROM Tabelle WHERE filtro LIMIT valori
tradotto SELECT * FROM tbl_Offerte WHERE ( TitoloOfferta LIKE '%laser%' AND TitoloOfferta LIKE '%a4%' OR InfoOfferta LIKE '%laser%' AND InfoOfferta LIKE '%a4%') <<<<<<<<<<-chiusa LIMIT 0, 20
02 aprile 2007 alle 12:45:11 niente da fare. ricordavo di avere fatto un tentativo del genre, am nel dubbio ho riprovato. l'errore è praticamente uguale. da premettere che senza il LIMIT tutto funziona perfettamente, solo che a volte ho pagine con centinaia di risultati. comunque, l'errore è questo:
ErroreSQL -2147217900: [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query '( TitoloOfferta LIKE '%laser%' OR TitoloOfferta LIKE '%a4%' OR InfoOfferta LIKE '%laser%' OR InfoOfferta LIKE '%a4%' ) LIMIT 0, 20'. SQL : SELECT * FROM tbl_Offerte WHERE ( TitoloOfferta LIKE '%laser%' OR TitoloOfferta LIKE '%a4%' OR InfoOfferta LIKE '%laser%' OR InfoOfferta LIKE '%a4%' ) LIMIT 0, 20
02 aprile 2007 alle 16:46:42 Modificato il 02 aprile 2007 alle 19:19:12Se usi Access, l'istruzione LIMIT non è riconosciuta (LIMIT 1, 20 è un'istruzione per MySql), la visualizzazione di un N di recorsa con Access è richiamabile dall'istruzione TOP (che non funziona con MySql), ad esempio: SELECT TOP 20 FROM tabella WHERE....
mennella Avanzato
155 Discussioni
03 aprile 2007 alle 00:11:19 Ok, Dj, grazie... se ho ben capito, però (ho fatto un giretto sui vari forum) l'istruzione TOP non consente, come il LIMIT, una paginazione reale senza impegnare troppe risorse, non potendo dare un valore d'inizio. quindi lascio così, per adess, tanto voglio passare ad SQL...
03 aprile 2007 alle 08:11:17 Modificato il 03 aprile 2007 alle 08:12:40Ti conviene sempre sviluppare codice standard che giri su qualsiasi database ( MySql o access indifferente)
specialmente se intendi rilasciare alla comunity qualche modulo, tipo il carrello --------------- Silvio Andrighetti Formaggini (Piosky)
03 aprile 2007 alle 08:41:13 Effettivamente l'istruzione TOP N non serve per paginare ma per estrarre un numero ben definito di records, così come non serve LIMIT in MySql, la paginazione va effettuata tramite script, altrimenti il risultato sarà che vedrai sempre quel numero di records e non un numero di records per pagina.
--------------- A lavare la testa ai somari, ci si rimette l'acqua e il sapone!
03 aprile 2007 alle 14:21:17 io sto provando a creare un sistema stabile da rilasciare come modulo e sto cercando di utilizzare un codice più standard possibile. in access (se si eccettua il problema della paginazione della ricerca) il sistema sembra funzionare. sto ricomponendo un mod (avevo già fatto qualcosa del genere, ma i test on line mi hanno portato a riscrivere gran parte del codice) Al momento il carrello è visibile sul sito http://www.sferaufficio.com e per funzionare, funziona. Fino a 10/15 utenti contemporanei regge, ma se si supera questo limite cominciano i problemi (Too may client task) e quindi per questo voglio passare ad sql ed anche cambiare server. tra l'altro, se qualcuno ha qualche suggerimento sulle caratteristiche di un server che possa reggere più o meno tranquillamente traffici consistenti, sarebbe gradito . Una domanda su SQL. Ho scaricato tutti i tutorial e gli articoli che ho trovato e sto "studiando la lezioncina" ma prima di inziziare a "mettere mano" alla cosa volevo capire se, oltre alla trasformazione del dtabase, devo mettere mano seriamente anche al codice. Se ho ben capito, per quanto riguarda aspnuke in se, non ci sono particolari problemi, ma per quanto riguarda il codice che ho sviluppato io? avendo, in generale, ho usato soltanto codice derivato da strumenti aspnuke pensate che dovrebbe andare o ci sono differenze particolarmente sostanziali?