German SQLdaten in Scrollview Zeile selektieren

Paulsche

Well-Known Member
Licensed User
Vorab, ich habe mehrere Beispiele der Scrollviews angeschaut und rumprobiert,
komme abe nicht zum richtigen Ergebnis.

Ich möchte in meiner Scrollview-Liste eine Zeile markieren und die Daten in der SQL-DB editieren.

Mein Gedanke: Man müsste doch einfach in der markierten Zeile den Wert des Labels "LBL02tachostand" (Eindeutig) auslesen, über eine Select-Abfrage die DB nach dem Wert durchsuchen, Daten des aktuellen Cursors in eine Maske füllen und editieren.

Aber wie am einfachsten des Wert des Labels "LBL02tachostand" auslesen ?

Vielleich ist mein Gedankenweg ja auch falsch und jemand kann mir auf den richtigen Weg helfen ?
 

Attachments

  • Spritverbrauch.zip
    20 KB · Views: 134

klaus

Expert
Licensed User
Hallo Paulsche,
Könntest Du auch die Datanbank posten den ohne der ist es schwer zu helfen. Um die Zeile zu finden auf die geklickt wurde musst Du die Routine
Sub
scv02cell_Click benutzen mit dem Sender Schlüsselwort. In der Routine Sub BTN00Tabelle_Click musst Du den Tag Parameter für alle Labels auf i setzen. Besser auf rc setzen, siehe SQLiteDB Programm AddRow Routine.

rc ist eine Typevariable mit dem Row (Zeile) und Col (Spalte) Wert.
TypeRowCol (Row AsInt, Col AsInt)

Dim rc AsRowCol
rc.Initialize
rc.Col = i
rc.Row = NumberOfRows

Du kannst auch mal in dieses Program SQLiteDB reinschauen das macht genau das was Du machen willst in Sub EditDispItem(Row AsInt).

Beste Grüsse.
 

Paulsche

Well-Known Member
Licensed User
Hi Klaus, danke, im Anhang die DBs. Ich schau mir das mal genauer an und teste nochmal.
 

Attachments

  • DBs.zip
    3.3 KB · Views: 131

Paulsche

Well-Known Member
Licensed User
Bekomme nun mit folgender Änderung zumindest mal den wert für COL zurück,
der ROW ist aber immer auf 19 (anzahl der Datensätze), obwohl die Labels die Schleifenvariable i bekommen, die mit jedem Datensatz erhöht wird.
Der Sender ist immer vom letzte Datensatz, warum auch immer.

B4X:
Sub BTN00Tabelle_Click                                          ' Tankdaten als Tabelle zeigen
   Dim datensaetze As Int
   datensaetze = cr_Tankdaten.RowCount -1
   pnl00Startseite.Visible      = False
   scv02Tabelle.Visible      = True
   scv02Tabelle.Panel.Visible   = True
   pnl02Tabelle.Visible      = True
   pnl02scroll.Visible         = True
   yabstand    = 30dip
   ypos      = 0dip
   For i = 0 To datensaetze
      cr_Tankdaten.Position = i
      LBL02fznr.Initialize("scv02cell")
      LBL02datum.Initialize("scv02cell")
      LBL02ort.Initialize("scv02cell")
      LBL02tachostand.Initialize("scv02cell")
      LBL02liter.Initialize("scv02cell")
      LBL02literpreis.Initialize("scv02cell")
      LBL02verbrauch.Initialize("scv02cell")
      LBL02rechnung.Initialize("scv02cell")
      LBL02tankart.Initialize("scv02cell")
      LBL02fznr.Text          = cr_Tankdaten.GetString("fznr")
      LBL02datum.Text         = cr_Tankdaten.GetString("datum")
      LBL02ort.Text          = cr_Tankdaten.GetString("ort")
      LBL02tachostand.Text    = convert.ToGerman(cr_Tankdaten.GetString("tachostand"),0)
      LBL02liter.Text       = convert.ToGerman(cr_Tankdaten.GetString("liter"),2)
      LBL02literpreis.Text    = convert.ToGerman(cr_Tankdaten.GetString("literpreis"),2)
      LBL02verbrauch.Text    = convert.ToGerman(cr_Tankdaten.GetString("verbrauch"),1)
      LBL02rechnung.Text       = convert.ToGerman(cr_Tankdaten.GetString("rechnung"),2)
      LBL02tankart.Text      = cr_Tankdaten.GetString("tankart")
      Dim rc As RowCol
      rc.Initialize
      rc.Col = 0
      rc.Row = i
      LBL02fznr.Tag = rc

      Dim rc As RowCol
      rc.Initialize
      rc.Col = 1
      rc.Row = i
      LBL02datum.Tag = rc

      Dim rc As RowCol
      rc.Initialize
      rc.Col = 2
      rc.Row = i
      LBL02ort.Tag = rc

      Dim rc As RowCol
      rc.Initialize
      rc.Col = 3
      rc.Row = i
      LBL02tachostand.Tag = rc

      Dim rc As RowCol
      rc.Initialize
      rc.Col = 4
      rc.Row = i
      LBL02liter.Tag = rc
      
      Dim rc As RowCol
      rc.Initialize
      rc.Col = 5
      rc.Row = i
      LBL02literpreis.Tag = rc
      
      Dim rc As RowCol
      rc.Initialize
      rc.Col = 6
      rc.Row = i
      LBL02verbrauch.Tag = rc

      Dim rc As RowCol
      rc.Initialize
      rc.Col = 7
      rc.Row = i
      LBL02rechnung.Tag = rc
      
      Dim rc As RowCol
      rc.Initialize
      rc.Col = 8
      rc.Row = i
      LBL02tankart.Tag = rc
      
      scv02Tabelle.Panel.AddView(LBL02fznr,0,ypos,40dip,20dip)
      LBL02fznr.Gravity         = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02datum,LBL02fznr.Left+LBL02fznr.Width+6,ypos,65dip,20dip)
      LBL02datum.Gravity         = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02ort,LBL02datum.Left+LBL02datum.Width+6,ypos,100dip,20dip)
      LBL02ort.Gravity         = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02tachostand,LBL02ort.Left+LBL02ort.Width+6,ypos,65dip,20dip)
      LBL02tachostand.Gravity      = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02liter,LBL02tachostand.Left+LBL02tachostand.Width+6,ypos,40dip,20dip)
      LBL02liter.Gravity         = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02literpreis,LBL02liter.Left+LBL02liter.Width+6,ypos,55dip,25dip)
      LBL02literpreis.Gravity      = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02verbrauch,LBL02literpreis.Left+LBL02literpreis.Width+6,ypos,70dip,20dip)
      LBL02verbrauch.Gravity      = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02rechnung,LBL02verbrauch.Left+LBL02verbrauch.Width+6,ypos,70dip,20dip)
      LBL02rechnung.Gravity      = Gravity.RIGHT
      scv02Tabelle.Panel.AddView(LBL02tankart,LBL02rechnung.Left+LBL02rechnung.Width+6,ypos,80dip,20dip)
      LBL02tankart.Gravity      = Gravity.RIGHT
      ypos = ypos + yabstand
   Next   
   pnl02scroll.Height = ypos
End Sub

B4X:
Sub scv02cell_click
   Dim rc As RowCol
   Dim l As Label
   l = Sender
   rc = l.Tag
Msgbox(rc&"  "&rc.Row&","&rc.Col,"")   
End Sub
 
Last edited:

klaus

Expert
Licensed User
Hallo Paulsche,

Beiliegend findest Du eine geänderte Version des Programms.

In der Sub BTN00Tabelle_Click Routine müssen alle Labels auch neu mit Dim deklariert werden damit die Labels in jeder Zeile andere sind. Ohne der Dim Deklaration haben alle Zeilen die gleichen Labels, hatte nach der ersten Änderung das gleiche Problem.

Beste Grüsse.
 

Attachments

  • SpritVerbrauch1.zip
    23.2 KB · Views: 146

Paulsche

Well-Known Member
Licensed User
Hi Klaus, jetzt funktioniert es, danke Dir sehr für die Mühe :sign0098:.
Muss mir die Optimierungen die Du noch gemacht hast mal genauer ansehen,
spart zwar ein paar Zeilen Code, macht es für mich aber etwas unüberschaubarer. Ich mache wahrscheinlich schon manche Zeilen aufwändiger,
damit ich den Code auf den ersten Blick schneller blicke.

Aber man ist ja lernfähig ;-)
 
Top