Autore Topic: errore #11 su un message  (Letto 1636 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
errore #11 su un message
« il: 17 Settembre 2010, 19:07:47 »
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.
Codice: [Seleziona]
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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #1 il: 17 Settembre 2010, 19:41:22 »
nel message manca il testo del button
Codice: gambas [Seleziona]
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

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: errore #11 su un message
« Risposta #2 il: 17 Settembre 2010, 20:12:35 »
Il pulsante non è obbligatorio, se non espressamente indocato ce lo mette gambas.

Riguardo all'errore, dovresti controllare che la variabile M1.MyNamA non sia per caso NULL, ovvero non valorizzata, oppure che non contenga caratteri strani (cosa da controllare anche sul codice, magari hai premuto qualche combinazione di tasti per puro caso...).

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #3 il: 17 Settembre 2010, 20:14:10 »
Citazione
Il pulsante non è obbligatorio, se non espressamente indocato ce lo mette gambas.
vero mi è venuto in mente giusto qualche secondo prima che lo scrivessi tu :)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore #11 su un message
« Risposta #4 il: 17 Settembre 2010, 20:28:11 »
x la variabile M1.MynamA non è nulla, all'interno c'è il nome dell'operatore (es. mario), ho provato anche a toglierla.
il message di Catch non interferisce e ho provato anche a toglierlo.

per la combinazione di tasti strani non è possibile, non premo nessun tasto.

La cosa strana è che il mio programma è pieno di message e nessuno mi da errore.

ho provato anche ad usare tutti i message, info, Question, Warning ecc.. niente da fare.

Non può essere legato nemmeno alla connessione in quanto ho provato a togliere tutto e lasciare all'interno della Function solo il message ma sempre errore 11.

La Function si trova nel Form Main, il Main non è la classe di avvio ma viene avviato da un altro form, questo è il codice che si trova nell'altro form:

Codice: [Seleziona]
ME.close     
      FMain.Show

Vorrei più che altro capire perchè succede, in quanto per andare avanti posso anche fare a meno del message, ma non vorrei che poi cominci a darmi errori su altri message.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: errore #11 su un message
« Risposta #5 il: 17 Settembre 2010, 22:22:42 »
La guida http://gambasdoc.org/help/error/nsymboldice che l'errore #11 = Unknown symbol in class. Hai provato ad eseguire la funzione message escludendo la variabile M1.MyNamA. Che sia proprio quella a crearti il problema?
Ciao.
:ciao:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore #11 su un message
« Risposta #6 il: 17 Settembre 2010, 23:02:43 »
La guida http://gambasdoc.org/help/error/nsymboldice che l'errore #11 = Unknown symbol in class. Hai provato ad eseguire la funzione message escludendo la variabile M1.MyNamA. Che sia proprio quella a crearti il problema?
Ciao.

si ho provato anche a togliere la variabile, nada.

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: errore #11 su un message
« Risposta #7 il: 17 Settembre 2010, 23:11:22 »
Mi sembra di ricordare che una volta ebbi un problema simile. Il Message non appariva perché la Form non veniva inizializzata. Per caso capita così nella tua applicazione? chiami il Message, prima che la form che lo contiene
sia visualizzata?

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: errore #11 su un message
« Risposta #8 il: 17 Settembre 2010, 23:40:42 »
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
 
Codice: [Seleziona]
IF MyRSr.Available THEN
          m1.MySede = MyRSr!sedelocale
      ELSE
          'Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda")
 ENDIF
potrebbero ridursi alla sola
Codice: [Seleziona]
 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 ?
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #9 il: 17 Settembre 2010, 23:54:13 »
Citazione
ME.close    
  FMain.Show
sarebbe meglio

Codice: [Seleziona]
   
  FMain.Show
ME.close  

o al limite

Codice: [Seleziona]
  
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
« Ultima modifica: 17 Settembre 2010, 23:59:18 da fsurfing »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore #11 su un message
« Risposta #10 il: 18 Settembre 2010, 00:16:55 »
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
 
Codice: [Seleziona]
IF MyRSr.Available THEN
          m1.MySede = MyRSr!sedelocale
      ELSE
          'Message.Warning(M1.MyNamA & " Non ho trovato il Record Azienda")
 ENDIF
potrebbero ridursi alla sola
Codice: [Seleziona]
 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.

Codice: [Seleziona]
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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #11 il: 18 Settembre 2010, 00:23:10 »
che il form non si apra mettendo:
   
fmain.load
  FMain.Show
ME.close 

mi sembra molto strano...

prova ancora a togliere il me sostituendolo con il nome del form e poi prima apri il nuovo form e poi chiudi quello vecchio

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #12 il: 18 Settembre 2010, 00:29:44 »
credo che faresti meglio ad avviare il programma tramit eun modulo che puoi chamare avvio con all' interno questa funzione:
Codice: gambas [Seleziona]

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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: errore #11 su un message
« Risposta #13 il: 18 Settembre 2010, 00:40:43 »
naturalmente il codice scritto sotto è solo un idea , in realta dovresti avviare tramite un modulo , effettuare i controlli , avviare un form per l' immissione dei parametri e quindi fmain.

il codice nella schell ti serve per vedere se l' applicazione è già stata avviata?

in questo caso puoi utilizzare

Desktop.Find(nome_applicazione) che ti ritorna l' id dell' apllicazione , se è 0 o  non è ancora avviata.

gli errori #11 sono i più fastidiosi da risolvere e a volte possono anche dipendere da bug di gambas

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore #11 su un message
« Risposta #14 il: 18 Settembre 2010, 10:09:37 »
raga fsurfing mi ha messo la pulce e dopo alcune prove ho risolto.
sicuramente è un bug di gambas, ho compilato il progetto e ora funziona, quasi sicuramente il problema c'è sempre stato ma dato che lavoravo su database con dati preesistenti il message non veniva chiamato in causa, ora che sono partito con un database vuoto ho notato la cosa.
Non so se è un bug di gambas 2.20 oppure generale, ho mandato un messaggio a beinot.

fsurfing come si usa Desktop.Find(nome_applicazione)?
ho visto che carica l'id dell'applicazione e come indice ha 0