German SQLite Problem

Webster

Member
Licensed User
Hallo miteinander,

ich arbeite gerade an einem kleinen Programm, das folgender Maßen funktionieren soll:
Der User wählt aus einer ComboBox Werte aus.
Diese erste ComboBox erhält ihre Werte aus einer SQLite Datenbank.
Soweit so gut.
Nun sollen aber in einer zweiten ComboBox nur Werte aus einer anderen Tabelle der Datenbank eingetragen werden, die eine sinnvolle Kombination mit der ersten ComboBox ergeben.
D.h. also ein Filter muss gesetzt werden.
Und genau da liegt mein Problem, egal was ich mache ich bekomme entweder gar keine Einträge in der zweiten ComboBox, oder ich bei komme beim SelectionChanged Event der ersten ComboBox für die zweite ComboBox die Fehlermeldung: "...no such column..."

Hier mal der dazugehörige Code:
B4X:
Sub Globals
   'Declare the global variables here.
   Dim linea As String
   
End Sub

Sub App_Start
   frmdata.Show
   con.New1
   dtr.New1
   cmd.New1 ("",con.Value)
   Con.Open ("Data Source = " & AppPath & "\Fahrplan.db3")
   cmd.CommandText = "Select Linie From tbl_lines order by Linie"
   dtr.Value = cmd.ExecuteReader
      Do While dtr.ReadNextRow = True
         cboline.Add (dtr.GetValue(0))
      Loop
   dtr.Close
End Sub
Sub cmdtest_Click
   cmd.CommandText = txttest.Text 
   cmd.executeTable ("tblfahrplan", 500)
End Sub
Sub cboLine_SelectionChanged (Index, Value)
   linea = cboline.Item(cboline.SelectedIndex )
   label1.Text = linea
   cmd.CommandText = "SELECT Ziel, Linie From tbl_goals where Linie like " & linea
      dtr.Value = cmd.ExecuteReader
      Do While dtr.ReadNextRow = True
         cbogoal.Add (dtr.GetValue(0))
      Loop
   dtr.Close
End Sub
Sub frmMain_Close
   Con.Close
End Sub

Vielleicht sehe ich ja nur den Wald durch die ganzen Bäume nicht...
Gruß
Thomas
 

Webster

Member
Licensed User
Ja, da hab ich den Wald wohl wirklich vor lauter Bäumen den Wald nicht gesehen!
Ich habe meinen Code nun wie folgt abgeändert:
B4X:
cmd.AddParameter ("Share")
   cmd.SetParameter ("Share", linea)
   cmd.CommandText = "SELECT Ziel From tbl_goals where Linie like @share"
und schon funktioniert er!:sign0089:
 

klaus

Expert
Licensed User
Longtime User
Der Anfang Deiner Routine
Sub cboLine_SelectionChanged (Index, Value)
linea = cboline.Item(cboline.SelectedIndex )
label1.Text = linea

könnte auch so aussehen:
Sub cboLine_SelectionChanged (Index, Value)
linea = cboline.Item(Index)
label1.Text = linea

aber einfacher so:
Sub cboLine_SelectionChanged (Index, Value)
linea = Value
label1.Text = linea

Beste Grüsse.
 

Webster

Member
Licensed User
...

aber einfacher so:
Sub cboLine_SelectionChanged (Index, Value)
linea = Value
label1.Text = linea

Beste Grüsse.
Watt, so einfach geht das auch, naja, man lernt halt immer dazu!
Danke schön:sign0098:
Da hab ich doch gleich noch eine Frage.
Der User soll später mal auswählen können, zu welchen Minuten ein Bus fährt, hierzu habe ich 60 Checkboxen gemacht!
Der User soll also die Checkboxen aktivieren, zu deren Minuten der Bus fährt.
Diese möchte ich dann für weitere Zwecke mit in der SQLite Datenbank speichern.
Meine ist also wie ich am besten die Auswertung dieses Checkboxen-"Arrays" mache, über eine Schleife, über eine SelectCase Anweisung, oder wie ist da der beste Weg?

Gruß
Thomas
 

klaus

Expert
Licensed User
Longtime User
Ich bin nicht sicher ob Ich richtig verstanden habe.
Mit den 60 Checkboxen, entspricht da jede Checkbox einer Minute ?

Wenn ja, Ich würde es mit einer ComboBox machen mit den Minuteneinträgen von 0 bis 59.
Ich finde 60 CheckBoxen platzverschwendend und auch komplizeirter zu programmieren.
Falls Du doch eine CheckBox ähnliche Umgebung beibehalten willst, wären RadioButtons eine bessere Lösung denn wenn man einen RadioButton wählt werden die Anderen gelöscht. Mit den CheckBoxen kann der User mehrere wählen.

Beste Grüsse.
 

Webster

Member
Licensed User
Ich bin nicht sicher ob Ich richtig verstanden habe.
Mit den 60 Checkboxen, entspricht da jede Checkbox einer Minute ?

... Mit den CheckBoxen kann der User mehrere wählen.

Beste Grüsse.
Doch doch, du hast schon richtig verstanden, jede CheckBox entspricht einer Minute!
Und der User soll die Möglichkeit haben mehrere CheckBoxen aktivieren zu können (womit RadioButtons dann leider ausscheiden)!
Beispiel: Buslinie A fährt in der Stunde 15 um 15:11 um :22 um :33 und um :45, also muss der User die CheckBoxen 11, 22, 33 und 45 aktivieren um die Abfahrtzeiten in den Fahrplan einzupflegen!
Nachteil ist natürlich, dass ich dann auch maximal 24 Zeilen*60 Spalten in der Tabelle brauche, aber so oft fährt ja kein Bus ;-)
 

klaus

Expert
Licensed User
Longtime User
Die Checkboxverwaltung könnte wie im beiliegenden Programm aussehen, als Anregung.
Die Fahrplananzeige bräuchte natürlcih eine andere Anzeige.
Die Details kommen natürlich darauf an wie Du das Ganze verwalten willst.

Beste Grüsse.
 

Attachments

  • TestMinuten.sbp
    2.7 KB · Views: 272

Webster

Member
Licensed User
Jaa, das sieht doch schon gut aus, zumindest den Teil der Erzeugung der CheckBoxen habe ich übernommen!
Die Auswertung habe ich etwas anders gemacht, denn ich will ja wissen welche CheckBoxen true sind, nicht wie viele! ;-D
So, die Auswertung sieht wie folgt aus:
B4X:
Sub cmdsave_Click   
   label5.Text = ""
   Dim i
   For i=0 To 59
      If i<10 Then
         If CheckBox ("chkMinuten0"&i).Checked=True Then
            d(i) = "0"&i
               If label5.Text ="" Then
                  label5.Text = d(i)
               Else
                  label5.Text=Label5.Text & ";" & d(i)
               End If
         End If
      Else
         If CheckBox ("chkMinuten"&i).Checked=True Then
            d(i) = i
               If label5.Text ="" Then
                  label5.Text = d(i)
               Else
                  label5.Text=Label5.Text & ";" & d(i)
               End If
         End If
      End If
      
   Next
   textbox1.text = linea & " " & goala & "; " & dowa & " " & houra & "-" & hourb & ";" &label5.Text
   cboLine.SelectedIndex = 0
   cbogoal.Clear
   cbogoal.Insert (0,"")
   cbogoal.SelectedIndex =0
   
   cbodow.SelectedIndex =0
   
   cbohour1.SelectedIndex = 0
   
   cbohour2.SelectedIndex = 0
   For i =0 To 59
      If i<10 Then
         CheckBox ("chkMinuten0"&i).checked =False
      Else
         CheckBox ("chkMinuten"&i).checked=False
      End If
   Next
End Sub

BTW Kann das sein, dass in deinem Code ein Fehler ist?
Du dimensionierst MinutenAnzahl als Array mit 10 Elementen, müsste es nicht ein Array mit 24 Elementen sein, damit ich hier:
B4X:
Sub cbxStunde_SelectionChanged (Index, Value)
   For i=0 To MinutenAnzahl(Stunde)-1
      If Minuten(Stunde,i)<10 Then
         Control("chkMinuten0"&Minuten(Stunde,i),CheckBox).Checked=False      ' B4PPC Version 6.80
'         CheckBox("chkMinuten0"&Minuten(Stunde,i)).Checked=False                  ' B4PPC Version 6.90
      Else
         Control("chkMinuten"&Minuten(Stunde,i),CheckBox).Checked=False
      End If
   Next
   Stunde=Index
   For i=0 To MinutenAnzahl(Stunde)-1
      If Minuten(Stunde,i)<10 Then
         Control("chkMinuten0"&Minuten(Stunde,i),CheckBox).Checked=True
      Else
         Control("chkMinuten"&Minuten(Stunde,i),CheckBox).Checked=True
      End If
   Next
End Sub
Werte größer 9 eingeben kann???

Gruß und DANKESCHÖN
Thomas
 

klaus

Expert
Licensed User
Longtime User
Du dimensionierst MinutenAnzahl als Array mit 10 Elementen, müsste es nicht ein Array mit 24 Elementen sein, damit ich hier:
Du hast vollkommen Recht es muss ein Array mit 24 Elementen sein !

Die Auswertung habe ich etwas anders gemacht, denn ich will ja wissen welche CheckBoxen true sind, nicht wie viele!
Welche CheckBoxen true sind hast Du in meinem Program auch, die werden im Array Minuten gespeichert. Das Array hat zwei Dimensionen: die Erste Dimension mit 24 Möglichkeiten für die Stunden, und die Zweite Dimension mit 10 Möglichkeiten für maximal 10 Bushalte in der gleichen Stunde.
Beispiel:
MinutenAnzahl(10)=6
Minuten(10,0)=0 -> Stunde 10 1ter Halt Minute 0
Minuten(10,1)=10 -> Stunde 10 2ter Halt Minute 10
Minuten(10,2)=20 -> Stunde 10 3ter Halt Minute 20
Minuten(10,3)=30 -> Stunde 10 4ter Halt Minute 30
Minuten(10,4)=40 -> Stunde 10 5ter Halt Minute 40
Minuten(10,5)=50 -> Stunde 10 6ter Halt Minute 50

MinutenAnzahl(11)=3
Minuten(11,0)=5 -> Stunde 11 1ter Halt Minute 5
Minuten(11,1)=25 -> Stunde 11 2ter Halt Minute 25
Minuten(11,2)=45 -> Stunde 11 3ter Halt Minute 45

MinutenAnzahl speichert die Anzahl der Bushalte für jede Stunde.

Beiliegent eine neue Version mit einem benutzerfreundlicherem Layout.

Best Grüsse.
 

Attachments

  • TestMinuten1.zip
    2 KB · Views: 313

Webster

Member
Licensed User
Jetzt verstehe ich 's


AAAhh, jetzt hab ich das auch verstanden! *mitderflachenhandaufdiestirnschlag*
Hab halt noch nicht so viel mit Arrays gearbeitet!
Die Idee mit den Imagebuttons an Stelle der CheckBoxes ist ja Klasse!
Werde ich gleich mal mit einbauen, danke dafür!

Gruß
Thomas

p.s. Jetzt aber Keine Neuen Grafikideen mehr schicken Klaus, sonst muß ich ob der tollen Sachen die Du schickst schon wieder meinen Code ändern!
*ganzdollmitdenAugenzwinker!!!*:wav:
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…