Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2

    VB6 Modificare un record

    Salve a tutti
    sono nuovo del forum e vi scrivo per chiedervi aiuto su un codice di visual basic 6 che dovrebbe farmi modificare un record di un database access 2000.
    Questo è l'errore che mi da:
    Errore di run-time91
    Variabile oggetto o variabile del blocco with non impostata.

    questo è il codice:
    --------------------------------------------------------------------------------------
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim stringa As String
    Dim stringa2 As String
    Dim Cn2 As ADODB.Connection
    Dim rs2 As ADODB.Recordset
    Dim sw As Integer
    Dim codiceM As String
    Dim annoM As Integer
    Dim importoM As Integer
    Dim conta As Integer
    Dim conta2 As Integer

    Private Sub Command1_Click()

    Cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\Documents and Settings\BarbaraG\Desktop\Progetto Stage\Programma\Movimentazioni.mdb"
    Rs.Open "Select * from Movimenti", Cn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect
    Cn.CursorLocation = adUseClient
    Cn2.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\Documents and Settings\BarbaraG\Desktop\Progetto Stage\Programma\LibroCespiti.mdb"
    rs2.Open "Select * from LibroCespiti", Cn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect
    Cn2.CursorLocation = adUseClient

    Set Cn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    Set Cn2 = New ADODB.Connection
    Set rs2 = New ADODB.Recordset

    'contare tutti i record presenti
    While Not rs2.EOF
    conta = conta + 1
    rs2.MoveNext
    Wend
    rs2.MoveFirst

    If Rs("Inserimento") = "" Then
    Rs("Inserimento") = Text1.Text
    Rs.Update
    codiceM = Rs("Codice_Cespite")
    annoM = Rs("Anno")
    importoM = Rs("Importo")
    Rs.MoveNext
    conta2 = conta2 + 1
    Else
    Rs.MoveNext
    conta2 = conta2 + 1
    End If
    -------------------------------------------------------------------------------------


    ecco l'immagine dell'errore


    ecco l'immagine di dove sorge l'errore

    spero di essere stato il più chiaro possibile

    grazie per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    come puoi aprire un oggetto inesistente?
    prima vanno le new, poi le open
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2
    io sono arrivato a questo punto..
    codice:
    ---------------------------------------------------------------------------------------
    Private Sub Command1_Click()

    Set Cn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    Set Cn2 = New ADODB.Connection
    Set Rs2 = New ADODB.Recordset

    Cn.CursorLocation = adUseClient
    Cn.Open "Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Documents and Settings\BarbaraG\Desktop\Progetto Stage\Programma\Movimentazioni.mdb"
    Rs.Open "Select * from Movimenti", Cn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect

    Cn2.CursorLocation = adUseClient
    Cn2.Open "Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Documents and Settings\BarbaraG\Desktop\Progetto Stage\Programma\LibroCespiti.mdb"
    Rs2.Open "Select * from LibroCespiti2", Cn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect

    'contare tutti i record presenti
    'While Not rs2.EOF
    'conta = conta + 1
    'rs2.MoveNext
    'Wend
    conta = Rs2.RecordCount
    'rs2.MoveFirst

    If Rs("Inserimento") = "" Then
    Rs("Inserimento") = "Inserito"
    Rs.Update
    codiceM = Rs("Codice_Cespite")
    annoM = Rs("Anno")
    importoM = Rs("Importo")
    Rs.MoveNext
    conta2 = conta2 + 1
    Else
    Rs.MoveNext
    conta2 = conta2 + 1
    End If
    ---------------------------------------------------------------------------------------


    e avviene in questa riga:
    ---------------------------------------------------------------------------------------
    Rs2.Open "Select * from LibroCespiti2", Cn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect
    ---------------------------------------------------------------------------------------
    eppure io ce l'ho quella tabellaqualche suggerimento??
    grazie
    PS: insieme vi metto anche il link dove poter scaricare il progetto se vi va meglio darci un'occhiata lì:
    http://rapidshare.com/files/24843687...ramma.zip.html
    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ho guardato il tuo progetto, e sinceramente non saprei da dove iniziare, visti i numerosi errori di progettazione, codifica, ecc... VVoVe:
    A tal punto che è impossibile eseguire il progetto.

    Comunque ci provo.


    Esempio

    1. Nomi degli oggetti non conformi alle specifiche:
    Hai usato i nomi predefiniti per gli oggetti: Form1, Form2, Command1, Command2, Text1, Text2 ecc. che non hanno alcun significato, e quei pochi che hai definito sono sbagliati:
    frmMenu pressupone che il form contenga un menu, invece non c'è. Per giunta nel form hai messo un pulsante con scritto Torna la Menu (che invece torna al Form1).

    2. Hai creato 3 database MDB ognuno con una tabella:
    Si deve creare UN SOLO database che include le 3 tabelle.
    Sfido poi che non trovi la tabella se la cerchi nel database sbagliato.

    3. ADODC valorizzato in progettazione che ha il percorso assoluto :
    C:\Documents and Settings\BarbaraG\Desktop\Progetto Stage\Programma\Movimentazioni.mdb
    A parte il fatto che il database, in progettazione va posizionato nella stessa cartella del progetto, la proprietà dell' ADODC (che comunque non andrebbe MAI usato perchè è una ciofeca) va valorizzata in fase di esecuzione, ovvero da codice.
    Spero che tu non abbia intenzione di distribuire il tuo programma perchè darebbe errore ancora prima di avviarsi.


    4. Manca Option Explicit su tutti i moduli
    Aggiungilo e poi in Opzioni di VB6 attiva: 'Dichiarazione variabili obbligatoria '


    5. Troppe connessioni inutili:
    Crei un nuova connessione in ogni routine in cui esegui l'accesso ai dati.
    Se ne deve creare UNA SOLA (globale), all'inizio del programma, e la si chiude al termine dello stesso.


    6. Pianificazione e Progettazione dell'applicazione inesistente.
    Hai creato form 'a caso' senza un struttura logica ben definita.
    Invece di chiudere i form li nascondi, e questo creerà i conseguenti ovvi problemi durante l'esecuzione.


    7. Uso di differenti Driver/Provider di accesso ai dati
    Stai usando sia il driver di Access, che il Provider Jet 4.0.
    Addirittura usati nello stesso form (frmRicerca) per aprire 2 connessioni!!!
    Niente di più sbagliato: si usa solo il Jet 4.0.

    8. Uso contemporaneo di ADO 2.8 e DAO 3.60
    Insomma, vuoi proprio farti del male da solo!


    Mi fermo qui perchè mi sembra che basti, per il momento.
    Ci sarebbe da analizzare
    - la 'logica' dell'applicazione in fase di esecuzione
    - Gestione degli errori (completamente inesistente)
    - ecc. ecc. ecc. ecc.

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.