Autore Topic: [Risolto]invalid object  (Letto 1116 volte)

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
[Risolto]invalid object
« il: 10 Luglio 2012, 13:39:58 »
Salve a tutti; qualcuno di lor dotti signori può spiegarmi perchè, aprendo una form toobox, su una form FMain, per richiuderla con il pulsante "btnQuit", il comando ME.Close funziona, invece con il pulsante "btnOK", dopo aver eseguito vario codice, il comando ME.Close mi dà l'errore "invalid object".
Eliminando il comando di cui sopra, la form si chiude senza errori.

 
Codice: gambas [Seleziona]

    
    sql = "SELECT id FROM tclienti ORDER BY id"
    MyRes = modConn.$Conn.Exec(sql)
    FOR EACH MyRes
      FMain.tbContCli.Text = MyRes!id
    NEXT

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE
'  ME.Close
  
END


PUBLIC SUB btnQuit_Click()

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE
  ME.Close

END



Grazie.
« Ultima modifica: 24 Luglio 2012, 19:21:15 da clabe69 »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: invalid object
« Risposta #1 il: 10 Luglio 2012, 14:08:37 »
Intanto non offendiamo... dotto lo dici a ceskho... e signori si nasce...  ;D


Da quello che vedo, hai provato a inserire il Close un pò dappertutto...  ;D

Intanto dai un'occhiata alle proprietà della Form (a destra dell'ide).
Poi, in realtà, il ME.Close() chiude la form stessa, e se non lo fà hai qualche cosa che è sbagliata da qualche parte, e che provoca l'errore che hai segnalato, e quindi non credo sia il metodo a provocarlo.

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
Re: invalid object
« Risposta #2 il: 24 Luglio 2012, 19:19:55 »
Salva a tutti; ho risolto cambiando ME con il nome della form.
Non sò perchè, ma così và.

Codice: gambas [Seleziona]

   
    sql = "SELECT id FROM tclienti ORDER BY id"
    MyRes = modConn.$Conn.Exec(sql)
    FOR EACH MyRes
      FMain.tbContCli.Text = MyRes!id
    NEXT

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE

  NewCli.Close
 
END


PUBLIC SUB btnQuit_Click()

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE
  ME.Close

END

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #3 il: 24 Luglio 2012, 19:57:28 »
Dipende dall'impostazione del progetto, ovvero per default gli oggetti sono privati.

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #4 il: 25 Luglio 2012, 00:00:37 »
OK; ma perchè se clicco sul pulsante btnQuit, si chiude e invece se clicco sul pulsante btnOk, che prevede prima della chiusura tutta una serie di operazioni, mi da l'errore, tanto che ho dovuto sostituire ME.Close con NewCli.Close (NewCli è il nome della form)?
Inoltre, nel mio programma ci sono 24 form, tutte impostate toolbox = true ed una FMain: tutte e 23 funzionano, mentre la NewCli no.  :hard:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #5 il: 25 Luglio 2012, 00:57:49 »
Forse se posti il codice completo del metodo che non funziona, ci capiamo qualcosa...

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #6 il: 26 Luglio 2012, 22:50:14 »
Codice: gambas [Seleziona]

PUBLIC SUB btnOK_Click()

  DIM sql AS String
  DIM iListino AS Integer

    IF FMain.gridModo = FALSE THEN
      IF txtCogn.Text = "" THEN
        Message.Error("<b>Il campo Cognome è vuoto!</b>")
      ELSE IF txtNome.Text = "" THEN
        Message.Error("<b>Il campo Nome è vuoto!</b>")
      ELSE
        IF FMain.gridModo = FALSE THEN
            Inserisci
        ELSE
          sql = "SELECT id FROM tclienti WHERE cogn = '" & FMain.gridCogn & "' AND nome = '" & FMain.gridNome & "'"
          MyRes = modConn.$Conn.Exec(sql) 
          sql = "DELETE FROM tclienti WHERE id = " & MyRes!id
          MyRes = modConn.$Conn.Exec(sql)
          FMain.gridModo = FALSE
          Inserisci
        ENDIF
      ENDIF
     
    ELSE
      IF FMain.bLogin THEN
        IF RadioButton1.Value THEN
          iListino = 1
        ELSE IF RadioButton2.Value THEN
          iListino = 2
        ELSE IF RadioButton3.Value THEN
          iListino = 3
        ELSE IF RadioButton4.Value THEN
          iListino = 4
        ENDIF 
        sql = "UPDATE tclienti SET cogn = '" & txtCogn.Text & "', nome = '" & txtNome.Text & "', indir = '" & txtIndir.Text & "', cap = '" & txtCap.Text & "', citta = '" & txtCitta.Text & "', prov = '" & txtProv.Text & "', cell = '" & txtCell.Text &
        "', tel = '" & txtTel.Text & "', fax = '" & txtFax.Text & "', email = '" & txtEmail.Text & "', pi = '" & txtPi.Text & "', cf = '" & txtCf.Text & "', note = '" & txtNote.Text & "', nlist = " & iListino &
        ", pnt = 0, cred = 0.00 WHERE cogn = '" & FMain.gridCogn & "' AND nome = '" & FMain.gridNome & "'"
        MyRes = modConn.$Conn.Exec(sql)
      ENDIF
    ENDIF
   
    sql = "SELECT id FROM tclienti ORDER BY id"
    MyRes = modConn.$Conn.Exec(sql)
    FOR EACH MyRes
      FMain.tbContCli.Text = MyRes!id
    NEXT

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE
  NewCli.Close
 
END


PUBLIC SUB btnQuit_Click()

  FMain.Enabled = TRUE
  FMain.gridModo = FALSE
  ME.Close

END



Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #7 il: 27 Luglio 2012, 18:31:09 »
Quindi, secondo quanto dici, il metodo che và in errore è il metodo btnOK_Click(), in corrispondenza del Close() della form.

Mmmmmm....

Vedo nel codice alcune cose che non capiso:

1) dei message.error, che non bloccano l'esecuzione del pulsante ok;
2) non c'è un controllo degli errori. Con l'accesso ad un database potresti averne...
3) imposti alcune proprietà della form, e poi la chiudi. Qual'è il senso?
4) la form come è impostata ? Parlo delle proprietà, in particolare se la chiusura elimina la form.
5) se la form è impostata come una normale form, che si autoelimina in chiusura, le sue proprietà scompaiono con lei...

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #8 il: 30 Luglio 2012, 12:22:21 »
Questo è il codice di una toolbox (NewCli appunto), aperta su una form FMain, per qui quando la chiudo per tornare alla FMain, mi sistemo prima alcune proprietà.....della FMain.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #9 il: 30 Luglio 2012, 12:26:55 »
Ma il codice è dentro la FMain o la toolbox?

Offline clabe69

  • Gambero
  • **
  • Post: 50
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #10 il: 30 Luglio 2012, 23:51:43 »
Il codice è nella form, impostata come toolbox, che si chiama NewCli.
Questa si apre tramite un pulsante che stà sulla form FMain ed andrebbe richiusa o tramite il pulsante btnQuit o tramite btnOK, che stanno sulla NewCli.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [Risolto]invalid object
« Risposta #11 il: 31 Luglio 2012, 18:51:29 »
Quindi, avendo il codice di chiusura in NewCli, devi indirizzare i metodi e le proprietà di FMain tramite il suo nome.
Tieni conto che, dipendentemente dalle impostazioni del progetto, gli oggetti contenuti in una form sono definiti privati, quindi non visibili all'esterno dello stesso.