ciao raga
il mio programma improvvisamente si blocca su errore #11.
da premettere che ha sempre funzionato, non ho fatto nessuna variazione di codice ed ho individuato il problema è un message.
PUBLIC FUNCTION leggiAzienda()
DIM sqlr AS String
DIM MyRSR AS Result
IF MODMain.MyConn THEN
sqlr = "select * from azienda order by idazienda"
MyRSR = MODMain.MyConn.Exec(sqlr)
IF MyRSr.Available THEN
m1.MySede = MyRSr!sedelocale
ELSE
'Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda")
ENDIF
ENDIF
CATCH
Message.Error(Error.Text)
END
come potete vedere ho messo l'apice al message e adesso funziona, ma appena lo tolgo mi si blocca su errore #11
nel message manca il testo del button
Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda", "OK")
poi al limite prova a utilizzare un altro tipo di message.
controlla anche che non si verifichi un evento per cui vengano richiamati 2 message
ad esempio potresti avere un evento message generato dal codice del message ed un altro message generato dal catch
Ho riletto le righe di codice e ricordo che la presenza dell'istruzione catch determini la sua schedulazione allorquando si dovesse verificare un errore. Perciò la condizione ELSE per NOT MyRSr.Available non si dovrebbe mai verificare perché la if stessa non dovrebbe, in quel caso, essere eseguita.
Se é come ricordo (per detto motivo ho fino ad ora scartato l'uso della CATCH), le istruzioni
IF MyRSr.Available THEN
m1.MySede = MyRSr!sedelocale
ELSE
'Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda")
ENDIF
potrebbero ridursi alla sola
m1.MySede = MyRSr!sedelocale
Ora sto notando un'altra cosa:
m1.MySede e M1.MyNamA sono entrambi corrette o dovrebbe essere m1.MySede e m1.MyNamA ?
ME.close
FMain.Show
sarebbe meglio
o al limite
me.hide
FMain.Show
ME.close
in alcuni casi se chiudi il form di avvio non avendone aperti altri prima, gambas termina con x11
tempo fa inoltre mi pare di ricordare che chiudendo il form di avvio terminasse anche l' applicazione, non posso esserne sicuro al 100% perchè solitamente avvio tramite moduli
Ho riletto le righe di codice e ricordo che la presenza dell'istruzione catch determini la sua schedulazione allorquando si dovesse verificare un errore. Perciò la condizione ELSE per NOT MyRSr.Available non si dovrebbe mai verificare perché la if stessa non dovrebbe, in quel caso, essere eseguita.
Se é come ricordo (per detto motivo ho fino ad ora scartato l'uso della CATCH), le istruzioni
IF MyRSr.Available THEN
m1.MySede = MyRSr!sedelocale
ELSE
'Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda")
ENDIF
potrebbero ridursi alla sola
m1.MySede = MyRSr!sedelocale
Ora sto notando un'altra cosa:
m1.MySede e M1.MyNamA sono entrambi corrette o dovrebbe essere m1.MySede e m1.MyNamA ?
sono entrambe corrette, cm come ho detto su un post precedente per provare nella function ho tolto tutto tranne:
message.info("non ho trovato l'azienda") e anche in questo caso errore 11.
Non credo che sia il message a bloccarmi il programma ma non riesco a capire dove toppa.
xfsurfing
modificando con i codici che hai suggerito Fmain non si apre.
vi posto il codice del form classe avvio dove apro il main ho messo dei commenti dove fuziona e dove non và, come potete vedere in entrambi i casi l codice è identico.
DIM Risposta AS String
SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
IF (Val(Risposta)) > 1 THEN
Message.Info("VisualGold è già Aperto")
ME.close
ELSE
IF RadioButton1.value THEN
m1.LeggiFile ' qui funziona
ME.close
FMain.Show
ELSE
IF labnome.Caption = NULL THEN
Message.Info("Non hai inserito il nome")
ELSE IF TextBox1.Text = NULL THEN
Message.Info("Non hai inserito la password")
TextBox1.SetFocus
ELSE IF TextBox1.Text <> Mpaswd THEN
Message.Error("Password Sbagliata")
TextBox1.text = ""
TextBox1.SetFocus
ELSE IF (label11.caption = NULL) OR NOT $conness.Databases.Exist(M1.NamDb) THEN
IF Message.Error(M1.MyNamA & " Nessun Database selezionato \noppure database inesistente", "Crea Nuovo Database", "Entra Ugualmente") = 1
CreaDatabase
ELSE
m1.LeggiFile
ME.close
FMain.Show
END IF
ELSE
m1.LeggiFile 'qui non funziona
ME.close
FMain.Show
END IF
END IF
ENDIF
credo che faresti meglio ad avviare il programma tramit eun modulo che puoi chamare avvio con all' interno questa funzione:
public sub main_()
DIM Risposta AS String
SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
IF (Val(Risposta)) > 1 THEN
Message.Info("VisualGold è già Aperto")
ME.close
ELSE
IF RadioButton1.value THEN
m1.LeggiFile ' qui funziona
fmain.load
FMain.Show
ELSE
IF labnome.Caption = NULL THEN
Message.Info("Non hai inserito il nome")
ELSE IF TextBox1.Text = NULL THEN
Message.Info("Non hai inserito la password")
TextBox1.SetFocus
ELSE IF TextBox1.Text <> Mpaswd THEN
Message.Error("Password Sbagliata")
TextBox1.text = ""
TextBox1.SetFocus
ELSE IF (label11.caption = NULL) OR NOT $conness.Databases.Exist(M1.NamDb) THEN
IF Message.Error(M1.MyNamA & " Nessun Database selezionato \noppure database inesistente", "Crea Nuovo Database", "Entra Ugualmente") = 1
CreaDatabase
ELSE
m1.LeggiFile
fmain.load
FMain.Show
END IF
ELSE
m1.LeggiFile 'qui non funziona
fmain.load
FMain.Show
END IF
END IF
ENDIF
end
che versione di gambas utilizzi?
alcune versioni di gambas +gnome necessitano di nomeform.load prima di nomeform.show altrimenti gambas crascha con #11
puoi usarlo così:
DIM P AS NEW Pointer[]
P = Desktop.find(Application.Name)
if p.count=1 then
message.info("applicazione non ancora avviata")
else if p.count>1 then
message.info("applicazione già avviata")
end if
praticamente ti ritorna i puntatori dell' applicazione indicata
se tu vuoi vedere se la tua apllicazione è già avviata ti troverà comunque un puntatore (l' applicazione che sta facendo il find) se un altra è già avviata in antecedenza troverà + di un puntatore