Autore Topic: Test con il componente gb.db.form  (Letto 2481 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Test con il componente gb.db.form
« il: 10 Maggio 2020, 23:05:12 »
Allego uno dei tentativi fatti per cercare di capire come funziona gb.db.form.
Questo è l'unico modo che non mi restituisce qualche tipo di errore.
Apparentemente funziona in quanto mostra i contatti giusti di quanto già inserito nel database col codice.
Il problema non risolto è quello di poter inserire nuovi contatti e non mi riesce di andare avanti.
Qualche idea?
Naturalmente intendo soluzioni inerenti al componente gb.db.form e non di tipo "tradizionale".

 :ciao:

P.S. Non fate caso agli indirizzi stranieri si ma diciamo all'italiana...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline markZ

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #1 il: 12 Maggio 2020, 15:50:15 »
Secondo me la tabella tmedi con i campi nel record e non in sequenza.
Mostrare i dati con i datacontrol come per taddr e non in dataview.
Per inserire un nuovo record cliccare sull'icona nuovo nel databrowser e riempire i campi.
Per salvare i dati clicca su save.
Tenendo conto che si tratta di due tabelle distinte.
Saluti.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #2 il: 12 Maggio 2020, 16:13:13 »
Ciao markZ,
grazie, ma non può essere una soluzione in quanto verrebbe a mancare la possibilità di aumentare i tipi di contatto e i contatti e non avremmo più la relazione molti a molti.
Tanto varrebbe inserire i campi direttamente nella tabella taddr
Sempre che io abbia capito correttamente...

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline markZ

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #3 il: 13 Maggio 2020, 15:41:49 »
Un'altra possibilità è inserire un pulsante  Nuovo contatto  con cui creare un record vuoto in taddr e tanti record in tmad quanti sono irecord in ttype, quindi posizionare taddr sul record vuoto e rendere editabile dataview ed editare il tutto.
Questo dovrebbe essere idoneo se ho compreso bene la tua richiesta.
Saluti.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #4 il: 13 Maggio 2020, 17:11:39 »
Penso che non ci sia altra possibilità che quella di inserire un pulsante.
Ma vorrei cercare di rimanere coerente ai data source.
Allego un nuovo passetto in avanti, con alcune scoperte credo interessanti.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline markZ

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #5 il: 14 Maggio 2020, 20:36:05 »
Vorrei darti due piccoli spunti per aumentare la coerenza.
Codice: [Seleziona]
Dim iKeyAd As Integer = CInt(DataBrowser1.View[DataBrowser1.View.Row, 0].Text)
Questa riga funziona perfettamente ma tisuggerirei questa soluzione
Codice: [Seleziona]
Dim iKeyAd As Integer = CInt(DataSource1.Current[0])
Current restituisce sempre il campo chiave del record selezionato.
Codice: [Seleziona]
DataSource2.Table = "SELECT ttype.tytyp, tmedi.memed FROM ttype INNER JOIN (taddr INNER JOIN tmedi ON taddr.adkey = tmedi.adkey) ON ttype.tykey = tmedi.tykey WHERE taddr.adkey = " & iKeyAd
anche questa funziona perfettamente ma questa
Codice: [Seleziona]
DataSource2.Table = "SELECT ttype.tytyp, tmedi.memed FROM ttype, tmedi WHERE ttype.tykey=tmedi.tykey And tmedi.adkey=" & iKeyAd
è molto più semplice e leggibile.
 :ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #6 il: 14 Maggio 2020, 23:12:22 »
Vorrei darti due piccoli spunti per aumentare la coerenza.
...

wow, interessante.
Ora sono stanco domani me le studio con calma
notte :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #7 il: 23 Maggio 2020, 19:57:21 »
@markZ,

Allego progetto di cui sei diventato coautore, pertanto se non vuoi fare brutte figure ti conviene controllarlo bene e riferire  :P

 :ciao:

Mi ero dimenticato di alcuni pulsanti  :)
« Ultima modifica: 25 Maggio 2020, 11:49:18 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline markZ

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #8 il: 28 Maggio 2020, 15:24:04 »
Vedo che hai lavorato sodo.
Io modificherei questa sub così
Codice: [Seleziona]
Public Sub btnAddType_Click()
' Aggiunge un nuovo tipo di contatto alla tabella ttype e aggiorna la lista della combo.
  Dim sValue As String = cbxType.Text
  Dim hResult As Result

  If IsNull(sValue) Then Return
  If sValue Not Ends ": " Then sValue &= ": "
  hResult = $hConn.Find("ttype", "tytyp = &1", sValue)
  If hResult.Available Then Return
  ' hResult = $hConn.Find("ttype")
  ' If Not hResult.Available Then Return
  ' hResult.MoveFirst
  ' For i As Integer = 0 To hResult.Max
  '   If hResult!tytyp = sValue Then Return
  '   hResult.MoveNext
  ' Next
  hResult = $hConn.Create("ttype")
  hResult!tytyp = sValue
  hResult.Update
  FillComboType()

End
in linea con il resto del codice.
Poi ti consiglierei di evitare l'evento MouseDown nei DataBrowser è preferibile usare MouseUp.
Nel mio gestionale scritto diversi anni fà ancora con i primi Gambas2 ci ho litigato parecchio pechè l'evento è intercettato prima che altri controlli collegati siano aggiornati e porta a conseguenze difficili da interpretare per capire dove stà l'inghippo.

Adesso con calma me lo spulcio.

 :ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #9 il: 28 Maggio 2020, 19:57:02 »
Io modificherei questa sub così
...
in linea con il resto del codice.
Si sono d'accordo
Citazione
Poi ti consiglierei di evitare l'evento MouseDown nei DataBrowser è preferibile usare MouseUp.
Nel mio gestionale scritto diversi anni fà ancora con i primi Gambas2 ci ho litigato parecchio pechè l'evento è intercettato prima che altri controlli collegati siano aggiornati e porta a conseguenze difficili da interpretare per capire dove stà l'inghippo.

Qui sembra funzionare... comunque ne terrò conto, grazie.

Controllando il tuo codice mi sono accorto di un malfunzionamento che mi era sfuggito, se aggiungi un Tipo di contatto per usarlo subito, la tabella ttype non si aggiorna e di conseguenza il nuovo contatto non viene aggiunto alla tabella tmedi.

Ho creato questo escamotage, funziona ma non sono soddisfatto:
Codice: [Seleziona]
Public Sub btnAddType_Click()
' Aggiunge un nuovo tipo di contatto alla tabella ttype e aggiorna la lista della combo.
  Dim sValue As String = cbxType.Text
  Dim hResult As Result
  Dim hTable As Table

  If IsNull(sValue) Then Return
  If sValue Not Ends ": " Then sValue &= ": "
  $hConn.Begin
  hResult = $hConn.Find("ttype", "tytyp = &1", sValue)
  If hResult.Available Then Return
  hResult = $hConn.Create("ttype")
  hResult!tytyp = sValue
  hResult.Update
  $hConn.Commit
  '' l'escamotage :-(
  Reload(sValue)
  FillComboType()
Catch
  Print Error.Text
  $hConn.Rollback

End

Private Sub Reload(value As String)

  If $iCurrentRow > 0 Then
    btnPrevious_Click
    btnNext_Click
  Else
    btnNext_Click
    btnPrevious_Click
  Endif
  btnEdit_Click
  cbxType.Text = value
  cbxType_Click

End

 :ciao:
« Ultima modifica: 28 Maggio 2020, 20:01:11 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #10 il: 28 Maggio 2020, 23:05:57 »
Come al solito era una svista, non ho tenuto conto dei due punti e spazio aggiunti al tipo di contatto.
Ora il nuovo file allegato dovrebbe funzionare correttamente.

 :ciao:

P.S. Per la miseria che ora indecente, spero almeno che funzioni a dovere  :evil:
« Ultima modifica: 29 Maggio 2020, 02:02:20 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #11 il: 02 Giugno 2020, 12:54:44 »
Ultima versione con una guida spero più comprensibile e l'uso della proprietà Connection.LastInsertId che adesso funziona bene senza warning.

 :ciao:
« Ultima modifica: 02 Giugno 2020, 14:31:25 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline markZ

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
Re:Test con il componente gb.db.form
« Risposta #12 il: 05 Giugno 2020, 14:23:50 »
Volevo proporti questa idea
Codice: [Seleziona]
  ' hResult = $hConn.Find("ttype")
  ' If Not hResult.Available Then Return
  ' hResult.MoveFirst
  ' For i As Integer = 0 To hResult.Max
  '   If Comp(hResult!tytyp, sValue, gb.IgnoreCase) = 0 Then Return
  '   hResult.MoveNext
  ' Next
  If $hConn.Find("ttype", "tytyp ILIKE &1", sValue) Then Return

ma poi mi sono reso conto che sono abituato a Postgres e i più grandi hanno qualcosa in più.
Comunque te lo lascio qui magari ti viene voglia di salire di un gradino.

 :ciao: