Ho sempre avuto difficoltà ad inserire istruzioni del formato seguente:
TRY Result = DB_Connection.Exec(Sql)
IF Result.Available = TRUE THEN
print "Risultato non valido"
ENDIF
all'esecusione della "if" ricevo sempre il messaggio di ERRORE "NULL Object"
però se utilizzo "TRY" nel modo seguente:
TRY Result.MoveNext
IF Result.Available = FALSE THEN
print "Risultato non valido"
ENDIF
--- funziona benissimo ---
Personalmente entrambi i gruppi di istruzioni mi sembrano scritti correttamente, eppure nel primo esempio ottengo sempre un comportamento anomalo del programma; quindi devo aver scritto qualcosa di sbagliato, ma dove?
Cia a tutti.
e se fai
TRY Result.MoveNext
IF NOT Result.Available = FALSE THEN
print "Risultato non valido"
ENDIF
come si comporta?
Grazie ad entrambi per il sollecito suggerimento, tuttavia, mi sono reso conto di avere sbagliato a riportare la giusta citazione; riscrivo pertanto l'istruzione che ha prodotto l'errore:
Sql = "SELECT * FROM $_NomeTab;" ' $_NomeTab contiene sempre il nome valido di una delle tabelle del DB
TRY Result = DB_Connection.Exec(Sql)
IF Result.Available = TRUE THEN
print "Risultato non valido"
ENDIF
@ fsurfing :
il problema è proprio il try, nel primo caso non è necessario e nel caso in cui la query ritorni null hai un errore ad inizio IF . Togli pure il try che non serve
Originariamente avevo preparato l'istruzione
Result = DB_Connection.Exec(Sql)
senza il parametro "Try", ma ricevevo, proprio sulla query, il seguente errore: Query failed; SQL error or missing database.
Ecco perché aggiunto "Try", ma purtroppo non é cambiato, molto.
Avrei bisogno di gestire la condizione di tabella vuota, ma non ci riesco. Ho superato l'ostacolo in questo modo:
Result = DB_Connection.Find($_NomeTab)
i = Result.Count
IF i <> 0 THEN
Esegui_Tabella_Popolata
ENDIF
Però sono rimasto ignorante e, quindi, rischio una solenne bocciatura. :)
Ciao.
una query che dia errore deve essere corretta per prima cosa, mettere un try è solo una piccola pezza per tappare un buco enorme!
o metti un try e poi vai a ricevere l' errore con un cach oppure ancora meglio non lometti proprio e fai funzionare la query come si deve!
se hai un query failed su una query di questo tipo:
Sql = "SELECT * FROM $_NomeTab;"
o non ti sei connesso al db oppure non esiste la tabella che vuoi leggere
potresti quindi prima verificarne l' esistenza con:
if DB_connection.tables.exist($_NomeTab)=true then
Sql = "SELECT * FROM $_NomeTab;" ' $_NomeTab contiene sempre il nome valido di una delle tabelle del DB
Result = DB_Connection.Exec(Sql)
IF Result.Available = FALSE THEN
print "TABELLA VUOTA"
ENDIF
ELSE
PRINT "TABELLA NON ESISTENTE
END IF
@ fsurfing:
Penso di aver capito. Partendo dall'istruzione che da errore:
sql = "SELECT * FROM $_NomeTab"
RecTab = DB_Connection.Exec(sql)
ho rilevato che, sostituendo a $_NomeTab, cioé alla variabile-stringa, il nome effettivo della tabella, l'errore non si verifica più; allora ho pensato di portare il nome della variabile-stringa fuori dalla stringa SELECT, in questo modo:
sql = "SELECT * FROM " & $_NomeTab
Ecco, in queste condizioni l'errore "Query failed; SQL error or missing database" non si verifica più. In effetti, pensandoci bene, come avevo scritto prima, richiedevo una query su una tabella di nome $_NomeTab, inesistente.
Grazie per avermi acceso la lampadina. ;D
Ciao.