Pagina 1 di 1

[vb6] errori nel salvataggio su db access

MessaggioInviato: gio dic 02, 2004 2:01 pm
da sonep
ho quasi completato un bel programmino nel quale posso visualizzare dei dati,modificarli ed aggiungerne nuovi su un db!
il problema è questo:
quando vado ad aggiungere un nuovo record ad una tabella (studenti)
il record viene riempito solo di nome, cognome e id studente;
i campi restanti(cioè voto orale, voto scritto,ecc.) rimangono null!
capita che successivamente io voglia modificare i voti di uno studente ma non tutti(nel senso che voglio aggiungere solo i voti di italiano ma non quelli di matematica) e quindi mi da il seguente errore: studenti.rel_voto_or non può contenere una stringa di valore zero
avevo pensato di fare una if che controllava se la text fosse = a "":

if rel_voto_or.text <> "" then
rs!rel_voto_or = rel_voto_or.text
end if

ma dovete sapere che sono circa 70 text box e che diventa una cosa un po' pesante controllarle tutte!
mi chiedevo se esistesse una qualche funzione che convertisse una stringa di valore zero a null; un po' il processo inverso di
Cstr(rs("nome_campo") & "")

questo era il primo problema, il secondo credo sia meno complicato!
quando vado a fare una somma di numeri presi da db mi da valori assurdi.
cioè se rs!rit è uguale a 5 me lo da' uguale a 35678987 e succede che mi va in overload!
ho pensato che fosse a causa del fatto che il campo rit è di tipo testo, ma devo tenerlo per forza sotto quel tipo!
saluti

MessaggioInviato: gio dic 09, 2004 12:30 pm
da Robby78
riguardo al primo problema, devi verificare che nella struttura del tuo database i campi che devono ammettere valori "null" siano configurati correttamente (ammetti valori null oppure campo non richiesto o qualcosa di simile); se nn puoi modificare la struttura del database, inserisci sempre un valore in tutti i campi; al posto di null mettici ad esempio 0.
Riguardo al secondo problema, a mio avviso hai impostato male la select; tuttavia se vuoi toglierti la "paranoia del campo di testo" basta usare questa sintassi Val(numecampo) nel caso utilizzi access o sql server.
Se vuoi informazioni + precise, dai informazioni + precise... [fischio]
Ciao

MessaggioInviato: gio dic 09, 2004 1:44 pm
da sonep
grazie per la risposta....comunque ho dovuto completare il programma,nel modo in cui non avrei voluto, e consegnarlo!
cioè ho messo una serie di if per controllare che, una per una, tutte le text box non fossero vuote e quindi salvare su db.
per la conversione a integer invece ho dovuto convertire i campi del database da testo a numerico!
p.s. avevo già provato con val(x) ma mi dava lo stesso numeri assurdi!

Spero che ti sia di aiuto

MessaggioInviato: lun mar 21, 2005 5:46 pm
da dogenglish
Questa funzione converte un valore gestendo il caso null
Esempio di utilizzo:
Dim rs As recordset
dim var1 as string
.... apri il recordset
var1 = ""
rs("campo1") = CNull(var1,Null) 'mette null nel campo1
Function CNull(Value As Variant, ValueIfNull As Variant) As Variant
If IsNull(Value) Or IsEmpty(Value) Then
CNull = ValueIfNull
Else
If VarType(Value) = vbString Then
If Len(Value) = 0 Then
CNull = ValueIfNull
Else
CNull = Value
End If
Else
CNull = Value
End If
End If
End Function