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

    [VB] Database --> ListBox -->TextBox

    Espongo subito il mio problema:

    Sto realizzando una Rubrica collegata ad un DataBase Access tramite DAO.
    Tutto funzionava perfettamente fino a quando non mi venne la bella idea di mettere una ComboBox con l'elenco di tutti i contatti presenti nel DB.
    Fino a qui nessun problema.
    Ci sono anche 2 bottoni che fanno scorrere il recorset ed è proprio su questi 2 bottoni che nasce il mio problema.
    Prima di inserire la ComboBox funzionava tutto bene ma ora mi da un bell'erroraccio!! Run-time error '3420': Oggetto non valido o non impostato
    e il debug mi porta a questa linea sul bottone che ho cliccato If rs.EOF = False Then

    in pratica dopo gli dicevo di scorrere il recorset con rs.MoveNext

    Vi posto il codice della ComboBox

    Do While Not rs.EOF
    ComboBox1.AddItem rs!Nome
    rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing

    Qualcuno sa dirmi perchè mi da quell'errore?? Perchè se tolgo il codice della ComboBox funziona tutto perfettamente????? (sono disperato!!)

    Grazie

    Gigi
    www.masterdiego.too.it

    mi chiedevo... ma se mi chiamo Diego perchè come nick ho Gigi? e sopratutto perchè 's-', che vuol dire?
    Boh... Forse fa male passare 16 ore al giorno davanti al pc!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    prova così:
    codice:
    If rs.EOF = 0 then
    altrimenti posta un po di più codice, che non si è capito molto...

    Hey hey, my my Rock and roll can never die!

  3. #3

    mmm

    non funziona neanche con lo "0". Cmq hai ragione non è che si capiva molto... provo a spiegarmi meglio:

    Ho il classico Form con le classiche textBox in cui ci sono Nome, Cognome, Indirizzo ecc ecc

    Al Form_Load si connette al DB e mette nella ComboBox tutti i contatti presenti nel DB

    Private Sub Form_Load()
    'si collega al DB
    Set db = OpenDatabase(App.Path & "\rubricadb.mdb")
    With db
    Set rs = .OpenRecordset("Campi")
    End With
    'mettendo il codice qui sotto mi crea problemi!!
    Do While Not rs.EOF
    Indice.AddItem rs!Nome
    rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    End Sub



    Poi ho 2 bottoni che cliccandoli mi scorrono il database inserendo nei textBox del form i dati dei contatti presenti nel DB

    Private Sub Down_Click()
    ' la prossima riga di codice viene segnalata nel debug
    If rs.EOF = 0 Then
    rs.MoveNext
    'se è una riga vuota torna al primo recordset
    If rs.EOF Then
    rs.MoveFirst
    End If
    End If
    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note
    End Sub


    in pratica se non ometto il codice nel Form_Load Do While Not rs.EOF ecc, nel momento in cui premo il bottone per spostarmi nel DB mi genera l'errore di cui ho parlato nel primo post!!

    Spero di essere stato chiaro stavolta

    Grazie

    Gigi
    www.masterdiego.too.it

    mi chiedevo... ma se mi chiamo Diego perchè come nick ho Gigi? e sopratutto perchè 's-', che vuol dire?
    Boh... Forse fa male passare 16 ore al giorno davanti al pc!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    Private Sub Down_Click()
    ' la prossima riga di codice viene segnalata nel debug
    If rs.EOF = 0 Then
    rs.MoveNext
    'se è una riga vuota torna al primo recordset
    If rs.EOF Then
    rs.MoveFirst
    End If
    End If
    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note
    End Sub
    ma questa parte di codice è completa? non ti connetti al DB
    prova a postare tutto.

    Ps: nel Form_load ricordati di chiudre la connessione a DB che non si sa mai...

    Hey hey, my my Rock and roll can never die!

  5. #5
    Mi connetto si al DB!!!!!!!!! Anche perchè altrimenti non funzionerebbe comunque se togliessi quelle poche righe di codice che mi danno il problema.

    Ma che devo fare, te lo devo postare tutto tutto il codice?? E' abb lunghetto!!
    Provo a postare solo il codice necessario:

    Option Explicit
    Public db As Database
    Public rs As Recordset

    Private Sub Form_Load()
    'si collega al DB
    Set db = OpenDatabase(App.Path & "\rubricadb.mdb")
    With db
    Set rs = .OpenRecordset("Campi")
    End With
    'mettendo il codice qui sotto mi crea problemi!!
    Do While Not rs.EOF
    Indice.AddItem rs!Nome
    rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    End Sub

    'Bottone che scrolla il DB in giu'

    Private Sub Down_Click()
    ' la prossima riga di codice viene segnalata nel debug
    If rs.EOF = 0 Then
    rs.MoveNext
    'se è una riga vuota torna al primo recordset
    If rs.EOF Then
    rs.MoveFirst
    End If
    End If
    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note
    End Sub

    'Bottone che scrolla il DB in su
    Private Sub Down_Click()
    ' la prossima riga di codice viene segnalata nel debug
    If rs.BOF = 0 Then
    rs.MovePrevious
    'se è una riga vuota torna al primo recordset
    If rs.BOF Then
    rs.MoveLast
    End If
    End If

    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note
    End Sub



    Posto pure il bottone che aggiunge i Record ma non credo che sia indispensabile:


    Private Sub Add_Click()
    If Nome.Text = "" Then
    Exit Sub
    End If
    With rs
    .AddNew
    'Aggiunge i dati nel DB
    !Nome = Nome.Text
    !Cognome = Cognome.Text
    !Indirizzo = Indirizzo.Text
    !Telefono = Telefono.Text
    !Email = Email.Text
    !Note = Note.Text
    .Update
    .Close
    MsgBox "Il nuovo contatto è stato aggiunto", vbOKOnly + vbInformation, "Information"
    'Svuota tutti i campi
    Nome.Text = ""
    Cognome.Text = ""
    Indirizzo.Text = ""
    Telefono.Text = ""
    Email.Text = ""
    Note.Text = ""
    End With
    Call Form_Load
    End Sub


    Metto pure il codice del tasto di ricerca:


    Private Sub Search_Click()
    On Error GoTo handle
    Set rs = db.OpenRecordset("SELECT * FROM Campi WHERE Nome ='" & Trova.Text & "' OR Cognome = '" & Trova.Text & "' OR Telefono = '" & Trova.Text & "' OR Email = '" & Trova.Text & "' OR Note = '" & Trova.Text & "'", dbOpenDynaset)


    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note

    rs.Close
    Call Form_Load

    handle:
    Select Case Err.Number
    Case 3021
    MsgBox "Non esiste nessun contatto: " & Trova.Text
    End Select
    Trova.Text = ""
    End Sub


    Il resto del codice non c'entra niente con il problema che mi da. Spero che ora qualcuno mi sappia aiutare perchè devo risolvere assolutamente quel problema

    Grazie

    Gigi
    www.masterdiego.too.it

    mi chiedevo... ma se mi chiamo Diego perchè come nick ho Gigi? e sopratutto perchè 's-', che vuol dire?
    Boh... Forse fa male passare 16 ore al giorno davanti al pc!!!

  6. #6
    Credo di aver capito come mai mi genera quell'errore ma non so come risolverlo.
    In pratica quando nel Form_Load() mi fa il ciclo While alla fine mi mette nella listBox tutti i recordset, ma nel momento in cui clicco uno di questi lui non sa in che posizione si trova quindi quando, dopo clicco sulla freccia, non puo' sapere se il campo è EOF o BOF perchè non parte da nessuna parte!!! (chissa' se mi sono spiegato!!)

    Ora il problema è: come faccio a comunicare al bottone il recordset da cui partire??

    quando seleziono un nome dalla comboBox gli dico di inserirmi i dati nella TextBox con questo Sub:


    Private Sub ComboBox1_Click()
    Set rs = db.OpenRecordset("SELECT * FROM Campi WHERE Nome ='" & ComboBox1 & "'", dbOpenDynaset)
    Nome.Text = rs!Nome
    Cognome.Text = rs!Cognome
    Indirizzo.Text = rs!Indirizzo
    Telefono.Text = rs!Telefono
    Email.Text = rs!Email
    Note.Text = rs!Note

    rs.Close



    CHE CASINO!!!!!

    Gigi
    www.masterdiego.too.it

    mi chiedevo... ma se mi chiamo Diego perchè come nick ho Gigi? e sopratutto perchè 's-', che vuol dire?
    Boh... Forse fa male passare 16 ore al giorno davanti al pc!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    ce la fai a comprimere il tutto e a spedirmelo?

    paoloperletti@virgilio.it

    Hey hey, my my Rock and roll can never die!

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    codice:
    Private Sub Form_Load()
    'si collega al DB
    Set db = OpenDatabase(App.Path & "\rubricadb.mdb")
    With db
    Set rs = .OpenRecordset("Campi")
    End With
         
    'aggiunge i dati nella ComboBox
        
            Do While Not rs.EOF    'Finchè non raggiungi la fine del recordset
                Indice.AddItem rs!Nome    'Aggiungo il valore del campo alla ListBox
                rs.MoveNext
            Loop
    'aggiungendo dinuovo il with non mi da + errore se prima clicco sulla Combobox
    'pero' i bottoni in questo modo non fanno assolutamente nulla
    'altrimenti se non ho cliccato prima sulla combobox mi genera un errore
    With db
    Set rs = .OpenRecordset("Campi") '-----> PUNTO 1
    End With
            
      rs.Close         '----> PUNTO 2          
      Set rs = Nothing '----> PUNTO 2  
            
    End Sub
    L'errore sta nel fatto che apri una connessionne al recordeset "Campi" (punto 1) e poi la chiudi subito (punto 2).

    elimina le 2 righe PUNTO2


    Hey hey, my my Rock and roll can never die!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    Ti consiglio di fare così:

    codice:
    Private Sub Form_Load()
    'si collega al DB
    Set db = OpenDatabase(App.Path & "\rubricadb.mdb")
    With db
    Set rs = .OpenRecordset("Campi")
    End With
         
    'aggiunge i dati nella ComboBox
        
            Do While Not rs.EOF    'Finchè non raggiungi la fine del recordset
                Indice.AddItem rs!Nome    'Aggiungo il valore del campo alla ListBox
                rs.MoveNext
            Loop
    rs.MoveFirst ' !!!!!
    '---------------->Da quì in giù cancelli tutto fino a "end sub"
    With db
    Set rs = .OpenRecordset("Campi") '-----> PUNTO 1
    End With
            
      rs.Close         '----> PUNTO 2          
      Set rs = Nothing '----> PUNTO 2    
            
    End Sub

    Hey hey, my my Rock and roll can never die!

  10. #10
    Ho risolto oggi pomeriggio ma come l'hai scritto tu il codice non mi funziona lo stesso io, dopo il ciclo While, prima del rs.MoveFirst, ho dovuto aggiungere una condizione, cioè


    If rs.EOF Then
    rs.MoveFirst
    End If


    In teoria è ovvio che sia rs.EOF dopo il ciclo ma se non glielo dico non se ne rende conto!! BOH
    Cmq ora funziona tutto.

    Grazie ancora!!

    Gigi
    www.masterdiego.too.it

    mi chiedevo... ma se mi chiamo Diego perchè come nick ho Gigi? e sopratutto perchè 's-', che vuol dire?
    Boh... Forse fa male passare 16 ore al giorno davanti al pc!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.