German SQL Datenbank Fragen

Blaupunkt

Member
Licensed User
Hallo Zusammen,

vorweg, bin in der Thematik "Basic for Android" noch ganz frisch, habe bisher per VBA programmiert.

Beim Thema Datenspeicherung habe ich per VBA immer auf die Excel-Sheets zurückgegriffen und diese dann ausgeblendet, ging relativ einfach.

Hatte per VBA ein schönes Programm zum Thema ADA-Schein, man konnte Fragen per .txt Datei einfügen, Fragen manuell hinzufügen, beantworten mit/ohne Timerfunktion, ... Jetzt wollte ich das Programm fürs Handy umschreiben.

Als Datenspeicherung habe ich mich jetzt an SQL herangewagt, gibt ja auch einige Tuturials hier.

Als erstes wollte ich mein Admin-Bereich schreiben, neue Nutzer kann ich anlegen, dass klappt bereits, aber mit dem Löschen habe ich so meine Probleme und beim Auswählen in der Liste möchte ich, dass sich die Farbe ändert, klappt nicht, es passiert einfach nichts. :-(

Einfach was funktioniert ist das hier:

B4X:
 Answ=Msgbox2("Möchten Sie die ausgewählte Lizenz '" &name99 & "' mit der dazugehörigen Mailadresse '" &mail99 & "' wirklich löschen?","Lizenz löschen","Yes","","No",Null)

Das ist der Code, wie ich eine ausgewählte Lizenz löschen möchte:

B4X:
Sub Label3_Click
    Dim row, col, Answ, Index As Int
    Dim i As Int
    Answ=Msgbox2("Möchten Sie die ausgewählte Lizenz '" &name99 & "' mit der dazugehörigen Mailadresse '" &mail99 & "' wirklich löschen?","Lizenz löschen","Yes","","No",Null)
    If Answ=DialogResponse.POSITIVE Then
        Do While SelectedItems.Size> 0
            row=SelectedItems.Get(0)
            For col=0 To NumberOfColumns - 1
                GetView(row, col).Color = CellColor(col)
            Next
            List_Delete(row, 0)
            For i=0 To SelectedItems.Size-1
                Index=SelectedItems.Get(i)
                If Index>row Then
                    SelectedItems.Set(i,Index-1)
                End If
            Next
            SelectedItems.RemoveAt(0)
        Loop
       
            End If
    SQLReadTable
    NumberOfVisibleRows=scvList.Height/RowHeight
End Sub

B4X:
Sub List_Delete(Row As Int, Col As Int)
    Dim i, j, Answ As Int
    Dim txt As String
   
    Main.SQL1.ExecNonQuery("DELETE FROM table1 WHERE table1.Code = " & GetView(Row,0).Text)
    NumberOfRows=NumberOfRows-1   
    If NumberOfRows>0 Then                
        Table.Height = NumberOfRows * RowHeight
    Else
        Table.Height = RowHeight
    End If
    End Sub

B4X:
Sub GetView(Row As Int, Col As Int) As Label
    Dim l As Label
    l = Table.GetView(Row * NumberOfColumns + Col)
        Return l
    End Sub

Hier der Code, bei dem sich die ausgewählte Zeile in der Farbe ändern sollte:

B4X:
Sub SelectRow(Row As Int, SelCol As Int, Mode As Int)
    Dim col, index As Int

    index=SelectedItems.IndexOf(Row) 
    GetView(Row, col).Color = Colors.Green  
       
    If index>-1 Then ' row already selected
        For col = 0 To NumberOfColumns - 1
            GetView(Row, col).Color = CellColor(col)  
        Next
        SelectedItems.RemoveAt(index)    
        If SelectedItems.Size=1 Then
            Row=SelectedItems.Get(0)       
        End If
    Else
        If Mode=0 Then
            SelectedItems.Add(Row)
        Else If Mode=2 Then
            For col = 0 To NumberOfColumns - 1
                GetView(PreviousRow, col).Color = CellColor(col)  
            Next
        End If
        For col = 0 To NumberOfColumns - 1
            GetView(Row, col).Color = SelectedRowColor 
        Next
    End If
   
    If Mode=1 Then   
        For col = 0 To NumberOfColumns - 1
            GetView(PreviousRow, col).Color = CellColor(col)
            GetView(Row, col).Color = SelectedRowColor
        Next
    End If
   
    If SelectedItems.Size=0 Then
        Else If SelectedItems.Size=1 Then
        SelectedItems.Set(0,Row)
        name99=GetView(SelectedItems.Get(0), 0).Text
        mail99=GetView(SelectedItems.Get(0), 1).Text
                PreviousRow=Row
    Else
       
    End If
End Sub
 

mw71

Active Member
Licensed User
Longtime User
Moin,

kannst du dein Projekt evtl. Exportieren und dann hier mit ran hängen? Mir sind da einige sachen noch nicht klar, z.B. was für ein Element du einfärben möchtest.

Klappt das Löschen? Ich denke da fehlen die Anführungszeichen ('), bin mir aber nicht sicher (ich nutze zwar auch SQLite, das heißt aber nicht das ich davon Ahnung habe;))

Grüße
 

Blaupunkt

Member
Licensed User
Mittlerweile habe ich es hinbekommen mit der Markierung und dem Löschen, aller Anfang ist schwer. :)

Wie kann ich in der SQL Datenbank nach Zeichenfolgen suchen?

Beispiel:

Mail99 ==> Mail TEXT (in der SQL DB)

Gibt es dafür einen bestimmten Befehl?

Kann ich wie bei VBA einmal nach der exakten Übereinstimmung suchen und zum anderen, wenn die Zeichenfolgt identisch ist?

Gruß
 
Last edited:

mw71

Active Member
Licensed User
Longtime User
Moin,

suche mal nach WHERE (Suche) und LIKE (mit % als Platzhalter).

Wenn ich das richtig im Kopf habe etwa so:
SELECT * FROM Datenbank WHERE Datenfeld = 'Mail99'
bzw.
SELECT * FROM Datenbank WHERE Datenfeld LIKE 'Mail%'

Wenn du Case InSensitive suchen möchtest dann noch COLLATE NOCASE hinten drann.

Grüße


ps: z.B: http://www.w3big.com/de/sql/default.html
 

Blaupunkt

Member
Licensed User
Mein Adminbereich steht nun fast, funktioniert sogar. :)

Jetzt wollte ich mich an das Thema ".txt" Dateien heranwagen.

Ich möchte, dass der User die Textdatei selber auswählt, bisher habe ich nur Code gefunden, bei dem der Pfad + Dateiname fest war.

In VBA konnte ich über folgenden Befehl die Datei selber auswählen. Application.GetOpenFilename

Wie sieht das in B4A aus?

Gruß
 

DonManfred

Expert
Licensed User
Longtime User
Wo bekomm ich die File Dialog Library her?
Wenn Du eine Lizenz kaufst kannst Du auch Libraries runterladen. Als Trial-User geht ds nicht.
 

Blaupunkt

Member
Licensed User
Ok verstehe.

@mw71 ... Du erwähntest eine Alternative per ListView. Kannst Du Dein Beispielt posten, vielleicht bekomme ich es ja darüber hin.

Wäre klasse.

Gruß
 

Blaupunkt

Member
Licensed User
Taste mich von Menü zu Menü vor. :)

Eine SQL Frage ...

Cursor3 = Main.SQL3.ExecQuery("SELECT Handlungsfeld FROM table3 WHERE Beschreibung = '"&test&"'")

Im Cursor3 habe ich nun die Position innerhalb der SQL Datenbank.

Kann ich auch über die Cursorposition Daten aus der SQL löschen?

Bisher lösche ich so:

Main.SQL3.ExecNonQuery("DELETE FROM table3 WHERE Beschreibung = '" & Auswahlbeschreibung & "'")

Danke

Gruß
 

mw71

Active Member
Licensed User
Longtime User
Moin,

Jeder Datensatz eine Eindeutige ID haben (legst du beim erstellen fest, z.B. so: CREATE TABLE log (id INTEGER PRIMARY KEY AUTOINCREMENT,.....),
darüber kannst du den Datensatz identifizieren und Löschen.

Gruß
 

Blaupunkt

Member
Licensed User
Zwei Fragen bzgl. dem Edittext Feld.

Ich beschreibe ein entsprechendes Feld wie folgt:

If G1 > 50 Then
Auswertung.text = "Sie haben " & G1 & "% erreicht und somit bestanden!"
Else
Auswertung.text = "Sie haben " & G1 & "% erreicht und somit nicht bestanden!"

Kann ich bei '& G1 & "%' die Farbe auf rot ändern, den Rest des Satzes möchte ich bei weiß belassen?

Eine weitere allgemeine Frage, ich habe in meinem Programm öfters längere Fragen, die ich gern in eine Label-Form hineinschreiben möchte, allerdings kann ich teilweise nicht alles lesen, da die Frage zu groß ist. Beim Edittext Feld zeigt er mir alles an (durch scrollen), der User wird allerdings zur Eingabe aufgefordert, dass möchte ich wiederum nicht. Kann ich bei einem Edittext Feld die Texteeingabe unterdrücken oder gibt es eine andere Form, die ihr empfehlen könnt?
 

Blaupunkt

Member
Licensed User
Bin beim Thema "Update" angelangt.

Das ist der Code, um meine "Update-Datei" aufzurufen.

B4X:
Dim i As Intent
        i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirdefaultExternal, "Test.apk"))
    i.SetType("application/vnd.android.package-archive")
        StartActivity(i)

Allerdings bekomme ich immer eine Fehlermeldung, die da lautet: "Parsing-Fehler ... Fehler beim Parsen des Pakets"

Was mache ich verkehrt?

Danke

Gruß
 

DonManfred

Expert
Licensed User
Longtime User
Du solltest:

1. AUF JEDEN FALL einen NEUEN Thread für dein Problem eröffnen. Das ist eine grundsätzliche Regel hier. Der Thread hier hat mit deine Frage nichts zu tun.
2. Besser diesen Thread im englischen Forum posten da hier viel mehr Leute mitreden (vor allem Erel).
 
Top