BULK INSERT überspringt jeden 2. Datensatz

26/03/2008 - 14:58 von Ulrich Zoeger | Report spam
Hallo,

ich lese über VB6 eine Textdatei in den SQL Server 2000 mittels BULK INSERT
ein.
Der Code für BULK INSERT lautet:

sql_string_tabelle1_import = "BULK INSERT MVMImportTemp1 FROM '" &
VorlagenverzeichnisServer & "'" & Chr(13) & _
"WITH " & Chr(13) & _
"(" & Chr(13) & _
"CODEPAGE = 'OEM', " & _
"FIELDTERMINATOR = '\t', " & Chr(13) & _
"ROWTERMINATOR = '', " & Chr(13) & _
"DATAFILETYPE = 'char', " & Chr(13) & _
"KEEPNULLS, " & Chr(13) & _
"FIRSTROW = 2, " & Chr(13) & _
"LASTROW = " & GetLineCountCT & _
")"

Nun habe ich das Phànomen, das exakt nur jeder 2. Datensatz eingelesen wird.
Erst dachte ich, dass
liegt evtl. am ROWTERMINATOR, aber andere Werte haben hier auch nicht
geholfen.
Ich verstehe nicht, warum genau jeder 2. Datensatz "verschwindet", das
klingt so nach einer gewissen Logik.

Importiere ich in Access die Datei, erscheinen alle Sàtze; also muss ich bei
der Anweisung ja irgendwas falsch gemacht haben, oder ?

PS: an LASTROW liegt es auch nicht, die Anzahl der Zeilen wird vorher exakt
gelesen. Deshalb bin ich auch darauf
gekommen, dass nur die Hàlfte importiert wird.


Könnt Ihr mir helfen ?

Grüße, Uli.
 

Lesen sie die antworten

#1 Elmar Boye
26/03/2008 - 15:45 | Warnen spam
Hallo Ulrich,

Ulrich Zoeger schrieb:
ich lese über VB6 eine Textdatei in den SQL Server 2000 mittels BULK INSERT
ein.
Der Code für BULK INSERT lautet:

sql_string_tabelle1_import = "BULK INSERT MVMImportTemp1 FROM '" &
VorlagenverzeichnisServer & "'" & Chr(13) & _
"WITH " & Chr(13) & _
"(" & Chr(13) & _
"CODEPAGE = 'OEM', " & _
"FIELDTERMINATOR = '\t', " & Chr(13) & _
"ROWTERMINATOR = '', " & Chr(13) & _
"DATAFILETYPE = 'char', " & Chr(13) & _
"KEEPNULLS, " & Chr(13) & _
"FIRSTROW = 2, " & Chr(13) & _
"LASTROW = " & GetLineCountCT & _
")"

Nun habe ich das Phànomen, das exakt nur jeder 2. Datensatz eingelesen wird.
Erst dachte ich, dass
liegt evtl. am ROWTERMINATOR, aber andere Werte haben hier auch nicht
geholfen.



Daran dürfte es schon liegen.
Windows-Textdateien haben üblicherweise CR+LF als Zeilenbegrenzer
(im übrigen wàre VbCrLf ebenfalls sinnvoller im VB6 Code).

Verwende deswegen mal ROWTERMINATOR = ''
Sollte das nicht funktionieren, solltest Du mal mit einem Hex-Editor
in die Datei schauen, welche Zeichen das Ende bilden.

Importiere ich in Access die Datei, erscheinen alle Sàtze; also muss ich bei
der Anweisung ja irgendwas falsch gemacht haben, oder ?



Das ist auch die Voreinstellung die Access (Jet Text-Treiber) verwendet.
Eine Alternative ist den Jet Treiber fürs Konvertieren zu nutzen, siehe z. B.:
<URL:http://groups.google.de/group/micro...316ecb>

PS: an LASTROW liegt es auch nicht, die Anzahl der Zeilen wird vorher exakt
gelesen.



LASTROW brauchst Du nur anzugeben, wenn Du am Ende Zeilen auslassen willst,
Voreinstellung ist bis zum Ende.

Gruß Elmar

Ähnliche fragen