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

    [VB6] Limiti esauriti per l'indice

    Scusate in anticipo per il problema che pongo, sicuramente sarà banale
    nella soluzione ma a me sta facendo venire il norvoso...

    Ho problemi a popolare una listview con dei record estratti da un file
    access, posto il codice:

    questo è l'sql
    risp = select * from movimenti where cdate(data) >=
    cdate('03/07/2010') order by data, magazzino, causale

    col risultato faccio
    Set rs = New ADODB.Recordset
    rs.LockType = adLockReadOnly
    rs.CursorLocation = adUseClient
    rs.CursorType = adOpenStatic
    rs.Open (risp), cnn
    If rs.RecordCount <> 0 Then
    DoEvents
    'cancello le colonne
    Main_eu.Listview3.ListItems.clear
    Main_eu.Listview3.ColumnHeaders.clear
    'aggiungo le colonne per l'intestazione della lista
    Main_eu.Listview3.ColumnHeaders.Add , , "Magazzino", 2300
    Main_eu.Listview3.ColumnHeaders.Add , , "Data", 800
    Main_eu.Listview3.ColumnHeaders.Add , , "Movimento", 1600
    Main_eu.Listview3.ColumnHeaders.Add , , "Colli", 800
    d = 1
    Do While Not rs.EOF
    DoEvents
    Main_eu.Listview3.ListItems.Add , , rs("magazzino")
    Main_eu.Listview3.ListItems(d).ListSubItems.Add , , rs("data")
    Main_eu.Listview3.ListItems(d).ListSubItems.Add , , rs("causale")
    Main_eu.Listview3.ListItems(d).ListSubItems.Add , , rs("imballi")
    Main_eu.Listview3.ListItems(d).ForeColor = QBColor(1)
    Main_eu.Listview3.ListItems(d).Bold = True
    rs.MoveNext
    d = d + 1
    Loop


    Il problema è che ogni volata mi da errore per "superati limiti
    dell'indice" e si blocca.
    Eppure è una routine che mi ha sempre funzionato e non capisco perché
    adesso non ne voglia sapere!!

    Grazie in anticipo per gli eventuali aiuti.

    Cordialità

  2. #2
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    perchè ti ritorna una cosa come 66000 righe(un po' meno)! devi usare la paginazione*, tanto di una listview con così tante righe non te ne fai nulla

    *: se ti intendi un minimo di ASP puoi usare questo
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Alcune considerazioni preliminari riguardo al codice postato:
    - racchiudilo tra gli appositi tag (pulsante [CODE])
    - applica una corretta indentazione
    - non trascriverlo a mano, ma copia-incolla le righe dal tuo programma

    Poi:
    così com'è l'assegnazione della query sql alla variabile risp è chiaramente sbagliata e la query stessa è sbagliata nello specificare la data nella clausola WHERE; ma probabilmente questi errori sono dovuti alla ritrascrizione manuale (vedi sopra).

    Anche il commento "col risultato faccio..." è inappropriato, in quanto a quel punto non hai ancora alcun risultato.

    Non è dato di sapere il tipo delle variabili d e risp.

    Non si capisce l'utilità dei due DoEvents.

    Venendo all'errore "superati limiti per l'indice", come dici tu il programma si blocca. Indica su quale riga si blocca e, in debug, esamina il valore della variabile d.

  4. #4
    Originariamente inviato da Grumpy

    Non è dato di sapere il tipo delle variabili d e risp.

    Non si capisce l'utilità dei due DoEvents.

    Venendo all'errore "superati limiti per l'indice", come dici tu il programma si blocca. Indica su quale riga si blocca e, in debug, esamina il valore della variabile d.
    Intanto grazie per i commenti e le risposte.
    d=integer risp=string
    il programma si bloccava talvolta con d=23 talvolta con d=13...
    Il recordset era di circa 200 record e lo stesso identico codice, su un'altra form che interrogava un'altra tabella funzionava...
    comunque ho risolto usando la sintassi:


    Do While Not rec.EOF
    Set Item = lsthd.ListItems.Add(, , rec!presidio)
    With Item
    .SubItems(1) = rec!ID_hd
    .SubItems(2) = rec!descrizione
    .SubItems(3) = rec!processore
    .SubItems(4) = rec!memoria
    .SubItems(5) = rec!hard_disk
    .SubItems(6) = rec!disco
    .SubItems(7) = rec!note
    .SubItems(8) = rec!utente
    .SubItems(9) = rec!pwd
    End With
    rec.MoveNext
    Loop

    Che ho trovato su questo forum.

    Grazie a tutti.

    Buon We

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Ciao allora io usavo il dataenvironment per una connessione con i database, comunque ho letto il tuo codice per vedere dove poteva essere un possibile errore .. Prima cosa che mi verrebbe da chiederti e su quale riga di inserimento ti da errore ? Hai controllo i tipi dei campi del database se sono corretti ? e che "data" sia del formato "date"

    codice:
    format = 'dd/mn/yyyy')
    .. e come ultima cosa per quello che mi ricordo io quando apri una connessione con il database prima di caricare, inserire, interrogare .. o altro, si apriva la connessione con la tabella e ti muovi al primo record.
    Come apri la tabella dal tuo codice non l'ho capito e come seconda cosa mi sembra che manchi

    codice:
    rs.MoveFirst

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da gprox
    Ciao allora io usavo il dataenvironment per una connessione con i database,
    Spero per te che non lo usi più...

    Originariamente inviato da gprox
    Prima cosa che mi verrebbe da chiederti e su quale riga di inserimento ti da errore ?
    Questa è infatti la prima cosa da sapere...

    Originariamente inviato da gprox
    Hai controllo i tipi dei campi del database se sono corretti ? e che "data" sia del formato "date"
    codice:
    format = 'dd/mn/yyyy')
    E cosa c'entra questo? Non ha alcuna importanza dato che lui sta leggendo il valore (non scrivendo) quindi è ininfluente il formato di una data.

    Originariamente inviato da gprox
    .. e come ultima cosa per quello che mi ricordo io quando apri una connessione con il database prima di caricare, inserire, interrogare .. o altro, si apriva la connessione con la tabella e ti muovi al primo record.
    Come apri la tabella dal tuo codice non l'ho capito e come seconda cosa mi sembra che manchi
    codice:
    rs.MoveFirst
    I tuoi ricordi probabilmente risalgono a DAO...
    dariocda invece usa ADO, quindi questi concetti sono superati.


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.