PDA

View Full Version : [visual basic]controllo query


dario84m
09-07-2008, 12:49
ciao a tutti ho un problema sto facendo un programma in visual basic ma ho un problema quando provo a fare il controllo sulla query... mi spiego io visualizzo il risultato della query in una label se la query è vuota e io non metto nessun controllo va in errore...io ho fatto queste dichiarazioni:

Public DB As Database
Public RS As Recordset
Public RS1 As Recordset
Public Record As Recordset
Public Record1 As Recordset
Public Campo As Field
Public Filtro As QueryDef
Public Filtro1 As QueryDef

e questa query

Set DB = OpenDatabase("c:\prova\anomalie.mdb")
Set RS = DB.OpenRecordset("guasti", dbOpenTable)
query_finale = "select guasti.collegamento from guasti where guasti.parte_causale='" & list_guasti.Text & "'"
Set Filtro = DB.CreateQueryDef("idGuastiQuery", query_finale)
Set Record = Filtro.OpenRecordset(dbOpenForwardOnly)
If query_finale <> Null Then ho provato con questa ma non mi funziona

Do While Not Record.EOF
For Each Campo In Record.Fields
label_elettrico.Caption = Campo
Next Campo
Record.MoveNext
Loop
End If

Record.Close
DB.QueryDefs.Delete "idGuastiQuery"

motogpdesmo16
09-07-2008, 17:06
La variabile query_finale sarà sempre valorizzata e non sarà mai null perchè list_guasti.Text, ammettendo che sia una textbox, al massimo avrà valore vuoto e cioe '' (apice apice).
query_finale varrebbe dunque "select guasti.collegamento from guasti where guasti.parte_causale=''"

Riguardo i null, premettendo che in VB e con i recordset di VB non ci lavoro da almeno 3 anni, la sintassi corretta dovrebbe essere
IF NOT IS NOTHING query_finale THEN
...
...
ENDIF



Vedi un po' se funziona così...

dario84m
09-07-2008, 17:29
La variabile query_finale sarà sempre valorizzata e non sarà mai null perchè list_guasti.Text, ammettendo che sia una textbox, al massimo avrà valore vuoto e cioe '' (apice apice).
query_finale varrebbe dunque "select guasti.collegamento from guasti where guasti.parte_causale=''"

Riguardo i null, premettendo che in VB e con i recordset di VB non ci lavoro da almeno 3 anni, la sintassi corretta dovrebbe essere
IF NOT IS NOTHING query_finale THEN
...
...
ENDIF



Vedi un po' se funziona così...
mi da errore su isnothing (scritto tutto attaccato) mi dice sub or function non definite!!!:mad:

motogpdesmo16
09-07-2008, 17:36
mi da errore su isnothing (scritto tutto attaccato) mi dice sub or function non definite!!!:mad:

cavolo hai ragione. Oramai son abituato all'ambiente .net. In VB non esiste Isnothing

Prova così: o ti crei la function (magari la inserisci in un modulo e la riutilizzi tutte le volte che vuoi)
Public Function IsNothing(ByVal valore) As Boolean
IsNothing = False
If valore Is Nothing Then
IsNothing = True
End If
End Function

oppure, seguendo l'esempio presente appunto nella function che ti ho appena scritto su:
If valore Is Nothing Then
...
...
ENDIF

dario84m
09-07-2008, 17:44
cavolo hai ragione. Oramai son abituato all'ambiente .net. In VB non esiste Isnothing

Prova così: o ti crei la function (magari la inserisci in un modulo e la riutilizzi tutte le volte che vuoi)
Public Function IsNothing(ByVal valore) As Boolean
IsNothing = False
If valore Is Nothing Then
IsNothing = True
End If
End Function

oppure, seguendo l'esempio presente appunto nella function che ti ho appena scritto su:
If valore Is Nothing Then
...
...
ENDIF


scusami non ho capito bene se io non volessi metterlo nel modulo cosa faccio??

motogpdesmo16
09-07-2008, 17:50
perdonami, mi son espresso non benissimo:

Se vuoi creare la nuova funzioncina Isnothing la inserisci nell'ambito del codice vb della pagina.
Tieni conto però che quella funzione avrà visibilità solo ed esclusivamente in quella form (ad esempio form1.vb). Inserendola, invece, in un modulo collegato al progetto, avresti visiblità di quella funzione in TUTTO il progetto.
Quindi in form1.vb, form2.vb ecc ecc tu potrai utilizzare la funzione.

Se invece pensi di non avere necessità di una funzione che testi il valore nothing/null di una variabile, puoi seguire la seconda tipologia di codice che ti ho postato.

dario84m
09-07-2008, 17:54
perdonami, mi son espresso non benissimo:

Se vuoi creare la nuova funzioncina Isnothing la inserisci nell'ambito del codice vb della pagina.
Tieni conto però che quella funzione avrà visibilità solo ed esclusivamente in quella form (ad esempio form1.vb). Inserendola, invece, in un modulo collegato al progetto, avresti visiblità di quella funzione in TUTTO il progetto.
Quindi in form1.vb, form2.vb ecc ecc tu potrai utilizzare la funzione.

Se invece pensi di non avere necessità di una funzione che testi il valore nothing/null di una variabile, puoi seguire la seconda tipologia di codice che ti ho postato.

ho usato il secondo metodo tanto ho solo 1 form adesso mi da object required!!io sto per lanciare il pc giu dalla finestra

motogpdesmo16
09-07-2008, 17:56
ma banalmente se facessi


IF query_finale <> '' THEN
...
...
ENDIF

che cosa succede?


poi un'altra cosa: mi confermi che list_guasti.Text punta ad una textbox, vero?

dario84m
09-07-2008, 18:04
ma banalmente se facessi


IF query_finale <> '' THEN
...
...
ENDIF

che cosa succede?


poi un'altra cosa: mi confermi che list_guasti.Text punta ad una textbox, vero?


allora ci sn quasi riuscito... praticamente ho if not(campo is nothing) then
.....
end if

dove campo e dichiarato come
dim campo as field

ma non mi funziona non da nessun errore ma mi trova il campo sempre vuoto
anche se la query funziona correttamente!
punta ad una label

motogpdesmo16
09-07-2008, 18:14
campo non c'entra nulla e giustamente ti ritorna sempre vuoto.Devi invece fare il controllo sulla tua variabile query_finale e quindi la porzione di codice diventa:

if not(query_finale is nothing) then
.....
end if

La fase di valorizzazione della label non volutamente omessa nel codice che hai riportato nel messaggio di apertura del thread, vero?
No perchè altrimenti non mi spiego assolutamente in base a cosa avviene la valorizzazione di list_guasti.

dario84m
10-07-2008, 09:33
campo non c'entra nulla e giustamente ti ritorna sempre vuoto.Devi invece fare il controllo sulla tua variabile query_finale e quindi la porzione di codice diventa:

if not(query_finale is nothing) then
.....
end if

La fase di valorizzazione della label non volutamente omessa nel codice che hai riportato nel messaggio di apertura del thread, vero?
No perchè altrimenti non mi spiego assolutamente in base a cosa avviene la valorizzazione di list_guasti.

allora list_guasti è una lista dove io clicco e mi esegue la query...adesso ho provato a mettere il codice che mi hai dato ma mi da questo errore: object required

motogpdesmo16
10-07-2008, 09:44
allora usa il codice che ti ho postato due reply fa:

IF query_finale <> '' THEN
...
...
ENDIF

e ti conviene, a mio avviso, testare anche che nell'oggetto lista l'utente abbia effettivamente selezionato un valore.