Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Paginazione con Oracle db

    ciao a tutti,
    da tempo sto sbattendo la testa su una paginazione di un recordset con db oracle.. il problema sono i cursori.
    sul server dove sviluppiamo funzia una cosa del genere:

    codice:
    ...
    rs.CursorLocation = adUserClient
    rs.Open strSql, connessione
    ...
    cosa che invece non gira sul server dove deve andare in esercizio lo script.. per passarlo in esercizio dobbiamo modificare i cursori in questo modo:
    codice:
    ...
    rs.Open strSql, connessione, 3, 3
    ...
    qualcuno può svelarmi l'arcano (e possibilmente suggerirmi un modo per far funzionare la paginazione in ogni caso)?

    dimenticavo, l'errore è su absolutepage
    xxx

  2. #2
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Ado ti consente di paginare un recordset con determiati cursori.
    Questa accade perchè per paginare un set di records , l'oggetto ado deve creare ed alimentare variabili come i bookmarks e l'absoluteposition.

    Ricorda che la paginazione ado è lenta e sovraccarica il db. Quando fai una paginazione con ado su una tabella di un milione di records, sia che chiedi la pagina 1 sia 2 che la n , estrae sempre e comunque un milione di records. Questo per dire che la paginazione con ado è comoda, ma va usata con parsimonia su tabelle non eccessivamente grandi.

    Comunque la paginazione può essere resa anche senza il supporto ado.

  3. #3
    sapresti suggerirmi come effetturare una paginazione senza usare ado? ti riferisci a qualcosa tipo la clausola LIMIT di mySql?
    xxx

  4. #4
    Esatto , con Oracle però il limit mi pare che non ce l'hai ,
    devi usare il ROWNUM in questo modo :

    AND ROWNUM = 30



    Se cerchi paginazione nel forum trovi tanti topic !

  5. #5
    beh, intanto grazie. ho provato a cercare "paginazione oracle" sul forum ma non ho trovato nulla..
    se ho capito bene dici che con rownum emulo l'absolutepage del recordset (detto alle brutte), ma come faccio per il pageSize?
    xxx

  6. #6
    ops, forse ho capito: si pagina con qualcosa del tipo:

    pagina = request("pagina")
    pageSize = 4
    codice:
    sql = "SELECT * FROM tabella WHERE ROWNUM BETWEEN " & (pagina * pageSize) & " AND " & (((pagina+1) * pageSize) - 1)
    ??
    xxx

  7. #7
    girando un po' ho trovato questo, in caso servisse a qualcuno:
    codice:
    SELECT * 
      FROM ( SELECT a.*, ROWNUM rnum
               FROM (SELECT * FROM miaTabella ORDER BY mioCampo DESC) a
              WHERE ROWNUM <= MAX_VAL )
     WHERE rnum >= MIN_VAL
    xxx

  8. #8
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Di a quello che l'ha scritto che hanno invatato l'and

    codice:
    SELECT * 
    FROM (SELECT * FROM miaTabella ORDER BY mioCampo DESC)
    WHERE rnum >= MIN_VAL And ROWNUM <= MAX_VAL

  9. #9
    Originariamente inviato da Baol74
    Di a quello che l'ha scritto che hanno invatato l'and

    codice:
    SELECT * 
    FROM (SELECT * FROM miaTabella ORDER BY mioCampo DESC)
    WHERE rnum >= MIN_VAL And ROWNUM <= MAX_VAL
    così non funzia.. non è così semplice
    in quello postato sopra viene creata una tabella alla quale viene aggiunto un campo rownum che ha rnum come alias, quindi su questa nuova tabella viene fatta una select dove ora è disponibile un campo rnum sul quale è possibile imporre la condizione >= che rownum di suo non supporta
    xxx

  10. #10
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Hai ragione. Anch'io avevo sbattuto la testa. Io faccio così:
    codice:
    case "ORACLE":
    	GetPaging = "SELECT * FROM (" & Me.Value & ") AST00002 WHERE ROWNUM<=" & TopValue
    E muovo il puntatore all'inizio della pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.