German Textdatei in SQLtable einlesen

peternmb

Active Member
Licensed 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
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

Active Member
Licensed 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