German Textdatei in SQLtable einlesen

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich versuche mich in SQL einzuarbeiten, scheitere aber schon beim einfachen Befüllen einer Tabelle.

Die Daten hole ich als CSV-Datei, getrennt mit ; vom PC - das funktionmiert noch.
Allerdings werden keine Daten in die SQL-Tabelle eingelesen - keine Fehlermeldung aber 0 Datensätze.

Vielleicht kann mich jemand auf die richtige Spur bringen, hier mein Code:
B4X:
'löscht zuerst die Tabelle falls sie existiert und erstellt sie wieder neu
SQL1.ExecNonQuery("DROP TABLE IF EXISTS table1")
SQL1.ExecNonQuery("CREATE TABLE table1 (col1 TEXT,col2 TEXT,col3 TEXT,col4 TEXT)")
'       
'liest die CSV-Daten aus der Datei HBV4a.txt ein
List.Initialize
List.Clear
List = File.readlist(AppDir,"HBV4a.txt")
'
ToastMessageShow("Es werden jetzt " & (List.Size-1) & " Datensätze eingelesen.",True)
'
SQL1.BeginTransaction
Try
  For i = 1 To List.Size-1
      str_array = List.Get(i)                 
      arr_zeile = Regex.Split(";",str_array)
      SQL1.ExecNonQuery("INSERT INTO table1 VALUES(arr_zeile(1),arr_zeile(2),arr_zeile(3),arr_zeile(4))")
  Next
  SQL1.TransactionSuccessful
Catch
  Log(LastException.Message)
End Try
SQL1.EndTransaction
'    
Msgbox("Datensätze in SQL-Table = " & SQL1.ExecQuerySingleResult("SELECT count(*) FROM table1"),"Hinweis")
 

klaus

Expert
Licensed User
Longtime User
Diese Zeile ist falsch.
SQL1.ExecNonQuery("INSERT INTO table1 VALUES(arr_zeile(1),arr_zeile(2),arr_zeile(3),arr_zeile(4))")
Sie muss so sein:
SQL1.ExecNonQuery("INSERT INTO table1 VALUES('" & arr_zeile(1) & "','" & arr_zeile(2) & "','" & arr_zeile(3) & "','" & arr_zeile(4) & "')")
oder einfacher:
SQL1.ExecNonQuery2("INSERT INTO table1 VALUES(?, ?, ?, ?)", arr_zeile)

Nicht getested.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Super, funktioniert - die 2.Variante ist einfacher, das hatte ich in deinem Tutorial nicht so richtig verstanden.

Geht ja blitzschnell, ich habe ess mit 4000 Datensätzen à 4 Werten getestet - ging ratzfatz :)
 
Top