Dim m As Map
Dim i, nNr As Int
SQL1.BeginTransaction ' global
Try
If HBCSV.OpenAnsiCSV(sCSVdirSD, sCSVfiles.LG, " " , True, ";" ) Then ' ... wenn es hier ein Fehler gibt dann gleich schließen
If HBCSV.sHeaderLine.EqualsIgnoreCase("Nr;.... hier folgt das Muster der CSV Feldbeschreibung ...") Then
' Struktur stimmt, nun die TYPEN festlegen *** so sorge ich dafür, dass ich weiß was wo steht und was was ist.
' 0 1 2 3 4 5
' Nr;Strasse;PLZ;Ort;Bem;Datum
'
' N S S S S D
'
For i = 0 To HBCSV.nFieldCount-1 ' Setze den Datentyp der in der CSV Datei gelesen werden soll
Select i
Case 0:
HBCSV.sType(i) = "N"
Case 5:
HBCSV.sType(i) = "D"
Case Else :
HBCSV.sType(i) = "S"
End Select
Next
Do While True ' der erste Datensatz wurde schon eingelesen, also direkt speichern
m = HBCSV.getMap() ' eventuell um zusätzliche berechnete Felder erweitern.
nNr = m.get("Nr") ' dummerweise case sensitive ! besser ermitteln oder über Nummer
Try
HBSQL.InsertRecord(SQL1, "LG", m ) ' table LG
Catch
Dim Bedingung As Map
Bedingung.Initialize
Bedingung.Put("Nr", nNr )
HBSQL.UpdateRecord(SQL1, "LG", m, Bedingung )
End Try
If HBCSV.ReadNextLine() = False Then
Exit
End If
loop
HBCSV.CloseCSV()
Else
SQL1.EndTransaction
Msgbox("Die Struktur der Datei ist fehlerhaft.","CSV-Daten einlesen")
Return False
End If
Else
SQL1.EndTransaction
Msgbox("Die Datei konnte nicht geöffnet werden.","CSV-Daten einlesen")
Return False
End If
' Einlesefehler kommen zu catch
Catch
SQL1.EndTransaction
Return False
End Try
' wenn vorher kein Abbruch erfolgt ist, dann OK melden
SQL1.TransactionSuccessful
SQL1.EndTransaction
Return True