View Full Version : [VB6] errore "Oggetto non valido o non impostato"
roby1483
19-01-2005, 16:44
Salve a tutti, oggi mentre portavo avanti un programmetto mi sono imbattuto in questo spiacevole errore. Premetto che sul sito Microsoft ho trovato che la causa di questo errore è Microsoft Jet 4.0 e dicevano appunto di aggiornarlo alla versione Service Pack 6. L'ho aggiornato, adesso la versione della libreria che ho è la 4.0.8618.0 e quella del SP6 è 4.0.6807.0 quindi è ultra aggiornato ma il problema persiste.
Praticamente ho un form con un controllo DBCombo che prende le ragioni sociali dal DB. Al Change di questo DBCombo parte la sub associata che fa una query con il valore inserito nel DBCombo e se trova qualcosa riempie i campi del form. La cosa funziona perfettamente se scrivo da tastiera il valore nel DBCombo, ma se seleziono il valore cliccandoci, a seconda del valore selezionato, salta fuori l'errore in oggetto. L'errore lo da sul controllo data che accede al DB ma la cosa strana è che l'errore non salta fuori al primo riferimento al controllo data, ma dopo che ha già scorso buona parte le recordset. A questo, punto dirrete voi, starò tentando di fare riferimento a qualcosa che nel DB non c'è ma non è così perchè se io metto un break point in un qualsiasi punto della sub funziona tutto alla perfezione :eek: !
Chiedo aiuto a voi, sperando di essere riuscito a spiegarmi, perchè una cosa del genere non mi era mai accaduta e non so più cosa fare!
Grazie a tutti ;)
Argosoft
19-01-2005, 16:59
anche io ci ho :muro: :muro: :muro: per una settimana :D
Non so se può funzionare anche per te, ma... il database chiudilo ALLA FINE :) dopo che hai fatto tutte le operazioni sul recordset
spero che sia d'aiuto :)
roby1483
19-01-2005, 17:11
Mi sono dimenticato di dirvi una cosa abbastanza importante, credo. I dati che il controllo data va a tirar fuori dal DB comprendono 3 campi con valore vero/falso e 3 campi di testo così che se il primo dei tre campi vero/falso è vero nel form viene inserito il valore del campo testo corrispondente. Detto questo il problema si presenta in un caso particolare, quando dopo aver selezionato un cliente che ha tutti e tre i campi vero/falso impostati su falso, vado a selezionare un cliente che ha almeno uno di questi tre campi impostato a vero. Nello specifico il problema si presenta non al momento del controllo se il campo è vero o falso, ma quando prendo dal controllo data il valore del campo associato a quello impostato a vero. La cosa strana è che quel valore sul DB c'è, come ho detto prima se metto un break point in un qualsiasi punto del codice funziona tutto.
roby1483
19-01-2005, 17:12
Originariamente inviato da Argosoft
anche io ci ho :muro: :muro: :muro: per una settimana :D
Non so se può funzionare anche per te, ma... il database chiudilo ALLA FINE :) dopo che hai fatto tutte le operazioni sul recordset
spero che sia d'aiuto :)
Non posso chiudere il DB perchè uso il controllo data, però chiudo il recordset così: nomeControlloData.Recordset.Close
Dici che mi conviene crearmi tutto da codice? Uso i controlli data perchè mi semplificano abbastanza la vita :D
roby1483
19-01-2005, 17:41
Ho provato anche a chiudere la connessione al DB tramite il controllo data ma fa uguale. Vi riporto il codice anche se è scritto alla mia maniera e magari non rispecchia le regole di buona stesura del codice :D
Private Sub dbcRagSoc_Change()
datControlloRagSoc.DatabaseName = App.Path & "\master.mdb"
datControlloRagSoc.RecordSource = "SELECT * FROM CLIENTI WHERE RAGIONE_SOCIALE='" & dbcRagSoc.Text & "' AND EFFETTIVO=true"
datControlloRagSoc.Refresh
txtCitta.Text = ""
txtCodFisc.Text = ""
txtEmail.Text = ""
txtFax.Text = ""
txtPiva.Text = ""
txtProvincia.Text = ""
txtReferente.Text = ""
txtTelefono.Text = ""
txtVia.Text = ""
txtWeb.Text = ""
txtCodice.Text = ""
txtnumcontratto.Text = ""
DTPicker1.Value = Date
chkOpz1.Value = 0
chkOpz2.Value = 0
chkOpz3.Value = 0
txtOpz1.Text = ""
txtOpz2.Text = ""
txtOpz3.Text = ""
optMensile.Value = False
optBimestrale.Value = False
optTrimestrale.Value = False
optSemestrale.Value = False
optLavoroEseguito.Value = False
cmbInizio.Text = "Inizio Fatturazione"
optRiba.Value = False
txtAbiriba.Text = ""
txtCabriba.Text = ""
optRid.Value = False
txtAbirid.Text = ""
txtCabrid.Text = ""
txtCcrid.Text = ""
txtCin.Text = ""
optDiretta.Value = False
lstCodici.ListItems.Clear
lstPrelievi.ListItems.Clear
chkModificato.Value = 0
abilitaModifica = False
indiceUnita = 0
unitaLegale = False
If datControlloRagSoc.Recordset.RecordCount = 0 Then
'nessun riscontro
txtCitta.Enabled = False
txtCitta.BackColor = &H8000000F
txtCodFisc.Enabled = False
txtCodFisc.BackColor = &H8000000F
txtEmail.Enabled = False
txtEmail.BackColor = &H8000000F
txtFax.Enabled = False
txtFax.BackColor = &H8000000F
txtPiva.Enabled = False
txtPiva.BackColor = &H8000000F
txtProvincia.Enabled = False
txtProvincia.BackColor = &H8000000F
txtReferente.Enabled = False
txtReferente.BackColor = &H8000000F
txtTelefono.Enabled = False
txtTelefono.BackColor = &H8000000F
txtVia.Enabled = False
txtVia.BackColor = &H8000000F
txtWeb.Enabled = False
txtWeb.BackColor = &H8000000F
txtCodice.Enabled = False
txtCodice.BackColor = &H8000000F
txtnumcontratto.Enabled = False
txtnumcontratto.BackColor = &H8000000F
DTPicker1.Enabled = False
chkOpz1.Enabled = False
chkOpz2.Enabled = False
chkOpz3.Enabled = False
txtOpz1.Enabled = False
txtOpz1.BackColor = &H8000000F
txtOpz2.Enabled = False
txtOpz2.BackColor = &H8000000F
txtOpz3.Enabled = False
txtOpz3.BackColor = &H8000000F
optMensile.Enabled = False
optBimestrale.Enabled = False
optTrimestrale.Enabled = False
optSemestrale.Enabled = False
optLavoroEseguito.Enabled = False
cmbInizio.Enabled = False
optRiba.Enabled = False
txtAbiriba.Enabled = False
txtAbiriba.BackColor = &H8000000F
txtCabriba.Enabled = False
txtCabriba.BackColor = &H8000000F
optRid.Enabled = False
txtAbirid.Enabled = False
txtAbirid.BackColor = &H8000000F
txtCabrid.Enabled = False
txtCabrid.BackColor = &H8000000F
txtCcrid.Enabled = False
txtCcrid.BackColor = &H8000000F
txtCin.Enabled = False
txtCin.BackColor = &H8000000F
optDiretta.Enabled = False
cmdInserisciCodice.Enabled = False
cmdInserisciPrelievo.Enabled = False
cmdElimina.Enabled = False
Else
'ho trovato un cliente potenziale corrispondente alla ragione sociale
'devo caricare i dati dal DB
txtCitta.Enabled = True
txtCitta.BackColor = &H80000005
txtCodFisc.Enabled = True
txtCodFisc.BackColor = &H80000005
txtEmail.Enabled = True
txtEmail.BackColor = &H80000005
txtFax.Enabled = True
txtFax.BackColor = &H80000005
txtPiva.Enabled = True
txtPiva.BackColor = &H80000005
txtProvincia.Enabled = True
txtProvincia.BackColor = &H80000005
txtReferente.Enabled = True
txtReferente.BackColor = &H80000005
txtTelefono.Enabled = True
txtTelefono.BackColor = &H80000005
txtVia.Enabled = True
txtVia.BackColor = &H80000005
txtWeb.Enabled = True
txtWeb.BackColor = &H80000005
txtCodice.Enabled = True
txtCodice.BackColor = &H80000005
txtnumcontratto.Enabled = True
txtnumcontratto.BackColor = &H80000005
DTPicker1.Enabled = True
chkOpz1.Enabled = True
chkOpz2.Enabled = True
chkOpz3.Enabled = True
optRiba.Enabled = True
optRid.Enabled = True
optDiretta.Enabled = True
cmdInserisciCodice.Enabled = True
cmdInserisciPrelievo.Enabled = True
cmdElimina.Enabled = True
'datControlloRagSoc.Recordset.MoveFirst
'carico le informazioni del cliente
With datControlloRagSoc
If IsNull(.Recordset![CODICE_CLIENTE]) Then
txtCodice.Text = ""
Else
txtCodice.Text = .Recordset![CODICE_CLIENTE]
End If
If IsNull(.Recordset![PARTITA_IVA]) Then
txtPiva.Text = ""
Else
txtPiva.Text = .Recordset![PARTITA_IVA]
End If
If IsNull(.Recordset![COD_FISC]) Then
txtCodFisc.Text = ""
Else
txtCodFisc.Text = .Recordset![COD_FISC]
End If
txtTelefono.Text = .Recordset![TELEFONO]
If IsNull(.Recordset![FAX]) Then
txtFax.Text = ""
Else
txtFax.Text = .Recordset![FAX]
End If
If IsNull(.Recordset![WEB]) Then
txtWeb.Text = ""
Else
txtWeb.Text = .Recordset![WEB]
End If
If IsNull(.Recordset![E_MAIL]) Then
txtEmail.Text = ""
Else
txtEmail.Text = .Recordset![E_MAIL]
End If
txtVia.Text = .Recordset![VIA]
txtCitta.Text = .Recordset![CITTA]
txtProvincia.Text = .Recordset![PROVINCIA]
If IsNull(.Recordset![REFERENTE]) Then
txtReferente.Text = ""
Else
txtReferente.Text = .Recordset![REFERENTE]
End If
txtnumcontratto.Text = .Recordset![NUMERO_CONTRATTO]
DTPicker1.Value = .Recordset![DATA_CONTRATTO]
If .Recordset![OPZIONE1] Then
chkOpz1.Value = 1
txtOpz1.Text = .Recordset![COSTO_OPZIONE1] <- questi sono i punti in cui mi salta fuori l'errore
End If
If .Recordset![OPZIONE2] Then
chkOpz2.Value = 1
txtOpz2.Text = .Recordset![COSTO_OPZIONE2] <- questi sono i punti in cui mi salta fuori l'errore
End If
If .Recordset![OPZIONE3] Then
chkOpz3.Value = 1
txtOpz3.Text = .Recordset![COSTO_OPZIONE3] <- questi sono i punti in cui mi salta fuori l'errore
End If
End With
'carico le unità locali del cliente
Dim queryUnita, queryCodici As String
queryUnita = "SELECT * FROM LUOGHI_RITIRO LR WHERE LR.ID_CLIENTE=" & datControlloRagSoc.Recordset![ID_CLIENTE]
With datCercaUnitaCliente
.RecordSource = queryUnita
.Refresh
If .Recordset.RecordCount <> 0 Then
'se ci sono più luoghi di ritiro allora li mostro tutti nella lista
.Recordset.MoveFirst
Do While Not .Recordset.EOF
lstPrelievi.ListItems.Add , , .Recordset![VIA_RITIRO]
lstPrelievi.ListItems(lstPrelievi.ListItems.Count).SubItems(1) = .Recordset![CITTA_RITIRO]
lstPrelievi.ListItems(lstPrelievi.ListItems.Count).SubItems(2) = .Recordset![PROVINCIA_RITIRO]
If .Recordset![VIA_RITIRO] = txtVia.Text And .Recordset![CITTA_RITIRO] = txtCitta.Text And .Recordset![PROVINCIA_RITIRO] = txtProvincia.Text Then
unitaLegale = True
indiceUnita = lstPrelievi.ListItems.Count
End If
.Recordset.MoveNext
Loop
End If
End With
'carico i codici del cliente
queryCodici = "SELECT C.ID_CODICE, C.CODICE_CER, CC.QUANTITA FROM CODICI_CLIENTE CC, CODICI C WHERE C.ID_CODICE=CC.ID_CODICE AND CC.ID_CLIENTE=" & datControlloRagSoc.Recordset![ID_CLIENTE]
With datCercaCodCliente
.RecordSource = queryCodici
.Refresh
.Recordset.MoveFirst
Do While Not .Recordset.EOF
lstCodici.ListItems.Add , , .Recordset![CODICE_CER]
lstCodici.ListItems(lstCodici.ListItems.Count).Tag = .Recordset![ID_CODICE]
lstCodici.ListItems(lstCodici.ListItems.Count).SubItems(1) = .Recordset![QUANTITA]
.Recordset.MoveNext
Loop
End With
chkModificato.Value = 0
abilitaModifica = True
datControlloRagSoc.Recordset.Close
datControlloRagSoc.Database.Close
End If
End Sub
Quando mi vene fuori l'errore ed entro nel debug se mi posiziono sopra alla riga dell'errore con il mouse mi viene fuori ".Recordset![COSTO_OPZIONE3]=<oggetto non valido o non impostato>" ma la stessa cosa me la scrive su tutti i riferimenti al recordset.
Aiutatemi vi prego :cry:
Per intanto nn usare mai il controllo data, perchè è una merda, usa sempre i metodi manuali come da esempio!
E' un consiglio, ma te lo consiglio vivamente, anzi, stravivamente!!
ehehhehe
Dopo la pappa leggo tutta la pappardella :)
PS: sarebbe meglio che posti anche il database, altrimenti uno nn può fare le prove :)
roby1483
19-01-2005, 19:03
Ho risolto!
Il problema stava (non chiedetemi il perchè) nel DBCombo, l'ho sostituito con una ComboBox e funziona tutto perfettamente!
Ho tolto il controllo data ma con la DBCombo il problema persisteva anche se in maniera diversa.
Grazie per i consigli ;)
roby1483
19-01-2005, 19:21
Cmq se vuoi fare delle prove il DB te lo allego ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.