Vorrei darti due piccoli spunti per aumentare la coerenza.
Dim iKeyAd As Integer = CInt(DataBrowser1.View[DataBrowser1.View.Row, 0].Text)
Questa riga funziona perfettamente ma tisuggerirei questa soluzione
Dim iKeyAd As Integer = CInt(DataSource1.Current[0])
Current restituisce sempre il campo chiave del record selezionato.
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
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:
Vedo che hai lavorato sodo.
Io modificherei questa sub così
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:
Io modificherei questa sub così
...
in linea con il resto del codice.
Si sono d'accordo
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:
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:
Volevo proporti questa idea
' 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: