Access-o-Mania

Datenbanken (Deutsch/German) => MS SQL-Server => Thema gestartet von: ellinho am März 01, 2012, 08:54:55

Titel: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 08:54:55
Hallo zusammen.

Ich habe meine Access-Personalverwaltung auf ein Projekt umgestellt.
Dabei wurde eine Textdatei monatlich importiert, die Personalnummer, Monat, Jahr und Stunden (für geleistete Stunden) enthielt.
Folgender Code läuft nun nicht mehr :

Option Compare Database
Option Explicit

Const Suchpfad_TXT$ = "W:\*.txt"
Const Import_Spez_TXT$ = "Datenimport_TXTImport"
Const Zwischentabelle$ = "Temp_TXTImport"
Const Datentabelle$ = "geleisteteStd"
Public Function TXT_Importieren()
  Dim cdb As Database
  Dim DateiQ$
  Dim Monat%, Jahr%, Antwort%
 
'------ Dateidialog zum Suchen und Selektieren der *.txt-Datei
  With Application.FileDialog(DialogType:=msoFileDialogOpen)
  .AllowMultiSelect = False
    .FilterIndex = 17
    .InitialFileName = Suchpfad_TXT$
    .InitialView = msoFileDialogViewDetails
    If .Show Then DateiQ$ = .SelectedItems(1)
  End With
  'falls im Dateidialog auf 'Abbrechen' geklickt wurde, beenden des Importes.
  If DateiQ$ = "" Then Exit Function
'------
  'Falls noch Datensätze in der Zwischentabelle 'Temp_TXTImport' enthalten sind, diese vorher löschen.
  DoCmd.RunSQL "DELETE * FROM " & Zwischentabelle$ & ";"
 
'------
  'Datenimport aus der *.txt-Datei in die Zwischentabelle Temp_TXTImport:
  'dafür muss vorher die Importspezifikation 'Datenimport_TXTImport' erzeugt und gespeichert worden sein.
  DoCmd.TransferText TransferType:=acImportDelim, SpecificationName:=Import_Spez_TXT$, _
        TableName:=Zwischentabelle$, FileName:=DateiQ$, HasFieldNames:=True
  'Nach dem Einlesen: Löschen der *.txt-Datei
  Kill DateiQ$

'------
  On Error Resume Next
  Set cdb = CurrentDb
 
' Ermitteln von Monat und Jahr aus dem 1.Satz der Zwischentabelle
  With cdb.OpenRecordset(Zwischentabelle$, dbOpenTable)
    .MoveFirst
    Monat% = !Monat
    Jahr% = !Jahr
    .Close
  End With
' Überprüfen, ob in der Tabelle 'geleisteteStd' Sätze mit Monat und Jahr
' wie in der Zwischentabelle vorhanden sind
  With cdb.OpenRecordset("SELECT Monat, Jahr FROM " & Datentabelle$ & _
                        " WHERE Monat=" & Monat% & " AND Jahr=" & Jahr% & ";", dbOpenDynaset)
    .MoveFirst
    If .EOF Then
      'Keine Sätze für Monat/Jahr in 'geleisteteStd' vorhanden
    Else
      'Es sind Sätze für Monat/Jahr 'in geleisteteStd' vorhanden
      Antwort = MsgBox("Es sind Datensätze für " & Monat% & "/" & Jahr% & " vorhanden." & vbCrLf & _
                       "Sollen diese überschrieben werden?", vbExclamation + vbOKCancel, "Datensätze für diesen Monat bereits vorhanden !!!")
      If Antwort = vbOK Then
        'Vorhandene Datensätze löschen (=überschreiben)
        Do Until .EOF
          .Delete
          .MoveNext
        Loop
        .Close
      Else
        'Vorhandene Datensätze nicht überschreiben -> Abbruch
        .Close
        Exit Function
      End If
    End If
  End With
  'Datensätze der Zwischentabelle 'Temp_TXTImport' anfügen an Tabelle 'geleisteteStd'
  DoCmd.RunSQL "INSERT INTO " & Datentabelle$ & " (Personalnummer, Monat, Jahr, Stunden) " & _
               "SELECT Personalnummer, Monat, Jahr, Stunden FROM " & Zwischentabelle$ & ";"
End Function

Dabei bekomme ich folgenden Fehler :

Dim cdb As Database (benutzerdefinierter Typ nicht definiert)

Hat jemand eine Idee, was ich umschreiben muss. Vorher lief die Funktion einwandfrei.


Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Wurliwurm am März 01, 2012, 09:18:40
Zitat von: ellinho am März 01, 2012, 08:54:55
Dim cdb As Database (benutzerdefinierter Typ nicht definiert)

Hat jemand eine Idee, was ich umschreiben muss. Vorher lief die Funktion einwandfrei.

Nix umschreiben. Prüfe mal Deine Verweise auf DAO.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 09:29:26
Ok.
Habe nun die Verweise Microsoft DAO Object Library 3.51 und 3.6 aktiviert.
Nun hängt er bei msoFileDialogOpen

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Wurliwurm am März 01, 2012, 09:45:14
Zitat von: ellinho am März 01, 2012, 09:29:26
Nun hängt er beimsoFileDialogOpen

Schon, daß Du die erste Fehlermeldung weggekriegt hast. Das zweite Problem ist völlig analog. Such Dir raus, welche Bibliothek dafür eingebunden werden muß.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 11:28:22
Sorry, aber an dieser Stelle weiß ich absolut nicht, welcher Verweis dafür eingebunden werden muss. ???
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Wurliwurm am März 01, 2012, 11:33:39
Zitat von: ellinho am März 01, 2012, 11:28:22
Sorry, aber an dieser Stelle weiß ich absolut nicht, welcher Verweis dafür eingebunden werden muss. ???

Google und Medienkompetenz sagt Dir was? :-/
http://www.google.de/search?hl=de&q=msoFileDialogOpen+verweis (http://www.google.de/search?hl=de&q=msoFileDialogOpen+verweis)
Erster Treffer liefert die Lösung
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 12:41:27
Prima. Danke. Hat mir geholfen.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 15:25:21
Leider fällt die Funktion beim Einlesen doch noch auf die Nase. In der Temp_TXTImport stehen noch Daten.

DoCmd.RunSQL "DELETE * FROM " & Zwischentabelle$ & ";"

Fehlt da wohl noch ein Verweis ?

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Wurliwurm am März 01, 2012, 15:56:34
Zitat von: ellinho am März 01, 2012, 15:25:21
DoCmd.RunSQL "DELETE * FROM " & Zwischentabelle$ & ";"

Die SQL-Syntax ist nicht nicht richtig. Es heißt DELETE FROM <Tabelle>, weil sich der Deletebefehl immer auf komplette Zeilen bezieht.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 17:08:53
Also muss die vollständige Zeile folgendermaßen lauten ?

DoCmd.RunSQL DELETE  FROM Zwischentabelle$

funktioniert aber leider nicht...
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Wurliwurm am März 01, 2012, 17:37:26
Zitat von: ellinho am März 01, 2012, 17:08:53
DoCmd.RunSQL DELETE  FROM Zwischentabelle$

funktioniert aber leider nicht...

Fehler? Baue mal eine Fehlerbehandlung ein und gib Err.Description aus.
Oder probiere alternativ CurrentDb.Execute("DELETE  FROM " & Zwischentabelle$)

Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Stapi am März 01, 2012, 17:46:45
Hallo ellinho

Probiere doch mal:

CurrentDb.Execute "DELETE * FROM Zwischentabelle$"

Gruß Stefan

Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 18:52:27
@Wurliwurm & Stefan
Egal wie ich es eintrage :
So.......("DELETE  FROM " & Zwischentabelle$)
oder so.......CurrentDb.Execute "DELETE * FROM Zwischentabelle$"

Ich bekomme nun immer die Fehlermeldung :
Objektvariable oder With-Blockvariable nicht festgelegt

Was ist da noch verkehrt?
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 01, 2012, 21:01:45
Hallo Karsten,

wie Du zu Beginn geschrieben hast, hast Du Deine Datenbank auf ein Access PROJEKT (ADP) umgestellt. Das paßt auch zu den Fehlermeldungen, die Du bekommst. In einer ADP hast Du lediglich eine direkte Verbindung zu einem SQL Server, nichts mehr lokales und auch kein DAO mehr. Entsprechend gibt es auch kein "CurrentDb", sondern nur noch "CurrentProject".

Es ist NICHT empfehlenswert, in einer ADP DAO zu verwenden, da hier alles auf ADO eingestellt ist. Daher gibt es auch keinen standardmäßigen Verweis zu DAO in ADPs (so wie es auch keinen Verweis auf ADO in MDB/ACCDB gibt). Wenn Du also den zu Beginn beschwerlich erscheinenden Weg einer ADP gehst (den ich persönlich aber nur empfehlen kann), dann befasse Dich am besten erst einmal mit den Unterschieden und was Du alles ändern mußt. Vieles wird funktionieren wie vorher, aber einiges eben auch nicht, besonders in VBA formuliertes dynamisches SQL ist i.d.R. dann in Access SQL formuliert und benötigt Anpassung. So gibt es etwa in Access SQL ein "DELETE * FROM", in T-SQL dagegen heißt es "DELETE FROM".

Man KANN natürlich DAO aktivieren, allerdings muß man dann auch alles selbst machen, da ADPs eben auf ADO eingestellt sind. Das bedeutet etwa, daß Du nicht einfach "CurrentDb" verwenden kannst (es gibt ja keine lokale Datenbank mehr, Access ist hier nur SQL Server Frontend), sondern erst einmal eine Verbindung zum SQL Server herstellen mußt, also mit Connection String und allem drum und dran. Das ist unnötig aufwendig, da alle ADPs bereits beim Starten eine Verbindung zum in der ADP definierten SQL Server herstellen und man diese verwenden kann. Die Verbindung findet man in "CurrentProject.Connection". Recordsets sind natürlich ebenso ADO, genau wie Formulare usw. ADO-Recordsets verwenden.
Du wirst also nicht drumherum kommen, einiges in Deinem Code neu zu schreiben - oder die von Microsoft empfohlene Methode zu verwenden, eine normale MDB/ACCDB zu erstellen und die SQL Server Tabellen zu verknüpfen, dann kann Dein Code so bleiben, wie er ist. Ich persönlich empfinde diese Lösung alleine wegen der umständlichen Tabellenverknüpferei und vieler anderer Nachteile als zu umständlich.

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 21:14:39
Danke erstmal Christian.

Gibt es da irgendwo eine Hilfe, wo ich bezüglich ADO weiterlesen kann ?
Hier nochmal der Code und wo er stoppt :

Fehler : Die Textdateispezifikation 'Datenimport_TXTImport' ist nicht vorhanden.
Importieren, Exportieren oder Verknüpfen ist mit dieser Spezifikation nicht möglich.

'Datenimport aus der *.txt-Datei in die Zwischentabelle Temp_TXTImport:
  'dafür muss vorher die Importspezifikation 'Datenimport_TXTImport' erzeugt und gespeichert worden sein.
  DoCmd.TransferText TransferType:=acImportDelim, SpecificationName:=Import_Spez_TXT$, _
        TableName:=Zwischentabelle$, FileName:=DateiQ$, HasFieldNames:=True

Vielleicht siehst Du da auf Anhieb etwas. Dies ist nämlich so einer meiner letzten Handgriffe bei der Umstellung auf adp. Stehe kurz vorm Ziel.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 01, 2012, 22:42:55
Hallo Karsten,

klar, in Access ist auch zu ADO entsprechende Hilfe vorhanden. Die Online-Hilfe erweitert sich mit Einbinden der entsprechenden Verweise. Darüber hinaus findest Du unter dem Begriff "ADO" (aber nicht "ADO.NET", das ist etwas völlig anderes) tonnenweise Informationen im Internet.

Das mit TransferText dürfte deshalb nicht funktionieren, da es in ADPs keine lokalen Tabellen gibt, also auch keine Access-Systemtabellen, in denen diese Spezifikationen gespeichert sind. Du kannst versuchen, die Spezifikation mit dem Assistenten neu zu erstellen und testen, ob Du es speichern kannst und damit wieder aufrufen (dürfte dann irgendwo auf dem SQL Server gespeichert werden), weiß aber nicht, ob das funktioniert, da ich die "TransferXXX"-Befehle grundsätzlich nicht verwende wegen zuvieler Probleme und Beschränkungen. In SQL Server stehen Dir auch die SQL Server Integration Services zur Verfügung, mit denen man solche Importe mit gleichzeitiger Datenumwandlung erledigen kann, habe ich selbst aber auch noch nicht probiert, kann Dir dazu also keine Details sagen.

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 01, 2012, 23:08:11
Dankeschön erst mal. Ich mache mich mal schlau.
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 02, 2012, 12:48:48
Hallo.
Ich habe gelesen und gelesen...und leider nichts gefunden, was mich weiterbringen würde. Der Fehler

Fehler : Die Textdateispezifikation 'Datenimport_TXTImport' ist nicht vorhanden.
Importieren, Exportieren oder Verknüpfen ist mit dieser Spezifikation nicht möglich.

ist also noch aktuell. Eine Textdateispezifikation kann ich mir in einem adp-Projekt ja leider nicht speichern, da die Schaltfläche inaktiv ist. Hat niemand eine Idee, wie der Code an folgender Stelle zu ändern ist ???

DoCmd.TransferText TransferType:=acImportDelim, SpecificationName:=Import_Spez_TXT$, _
        TableName:=Zwischentabelle$, FileName:=DateiQ$, HasFieldNames:=True

Ich werde aus sämtlichen Hilfethemen nicht schlau.

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 02, 2012, 14:04:22
Hallo,

also nach einem kurzen Blick in die Hilfe ergibt sich eindeutig, daß in ADPs das Angeben von Spezifikationen nicht möglich ist, aus dem oben bereits genannten Grund: Weil es keine lokalen Tabellen gibt. Spezifikationen werden in einer herkömmlichen Access Datenbank in den Systemtabellen MSysIMEXColumns und MSysIMEXSpecs gespeichert und können auch nur von da geladen werden, also kannst Du TransferText wohl vergessen.

Aber es gibt eine andere Möglichkeit, nämlich ADO: Damit kann man eine Spezifikation als "Schema.ini" speichern, die im gleichen Ordner wie die Datenbankdatei liegen muß, dann kann man diese zum Importieren mit ADO verwenden, das Schreiben auf den Server muß man dann allerdings in einer Recordset-Schleife mit vielen INSERTs erledigen.

Näheres mit genauer Anleitung hier:

http://msdn.microsoft.com/en-us/library/ms974559.aspx (http://msdn.microsoft.com/en-us/library/ms974559.aspx)

Eine andere Variante ist die Benutzung eines BULK INSERTs, eine Beschreibung gibt es zum Beispiel hier:

http://sqlserver2000.databases.aspfaq.com/how-do-i-load-text-or-csv-file-data-into-sql-server.html (http://sqlserver2000.databases.aspfaq.com/how-do-i-load-text-or-csv-file-data-into-sql-server.html)
http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/ (http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/)

Und die komfortable Methode, mit der man am meisten machen kann, ist die Benutzung der SQL Server Integration Services, hier eine Anleitung, wie man eine CSV-Datei damit importieren kann:

http://blog.sqlauthority.com/2011/05/12/sql-server-import-csv-file-into-database-table-using-ssis/ (http://blog.sqlauthority.com/2011/05/12/sql-server-import-csv-file-into-database-table-using-ssis/)

Wer will angesichts solch komfortabler Möglichkeiten noch mit dem schrottigen TransferText arbeiten...?

Gruß

Christian

Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 02, 2012, 22:55:54
Hallo Christian.

Danke zunächst einmal für die weitreichenden Hinweise. Ich habe mich damit beschäftigt und mich für die Variante des BULK INSERTS entschieden. Habe nun eine halbwegs funktionierende Variante. Halbwegs deswegen, da es noch drei Dinge gibt, die geändert werden müssten. Die Textdatei, die importiert wird, ist folgendermaßen aufgebaut: Personalnummer;Monat;Jahr;Stunden;
Beispiel :
000001;2;2012;99,50;
000002;2;2012;104,50;
usw.
In der SQL-Sicht wird mir die Personalnummer in der zweiten Zeile mit einem Leerzeichen davor eingerückt angezeigt, in der Ansicht über die Tabelle in der adp bleibt das Feld Personalnummer in der betreffenden Zeile leer. Es liegt nicht an den führenden Nullen. Habe das mit 100002 statt 000002 getestet. Da stimmt etwas am ROWTERMINATOR nicht.
ROWTERMINATOR = ';'
Aha. Gerade ausprobiert : Sobald ich das Semikolon hinter dem letzten Datensatz in der Zeile entferne und den ROWTERMINATOR = "/N" setze, funktioniert es. Habe ich die Semikolon am Ende jeder Zeile drin stehen und den ROWTERMINATOR =";/N", dann sind alle Zeilen bis auf die letzte in Ordnung. In der letzten Zeile hinter dem letzten Wert steht dann ein Semikolon. Die Daten werden leider so von dem anderen Programm übergeben. Gibt es eine Möglichkeit, den ROWTERMINATOR so einzustellen, dass man mit den vorhandenen Datenformaten arbeiten kann ?


Die beiden anderen Sachen hängen irgendwie zusammen. Die Textdatei wird einmal monatlich von einem anderen Programm übergeben und in das Importverzeichnis gestellt. Allerdings trägt diese immer einen anderen Namen (aktueller Zeitstempel.txt). Da ich die Textdatei nach dem Import löschen möchte (dazu fehlt mir noch der Befehl bzw. Aufbau und Einbindung in meine Funktion, DELETE oder KILL 'C:\TEST\test.txt' funktioniert leider nicht), wäre es ja ungefährlich, wenn man jede x-beliebige Textdatei, die sich im Importverzeichnis steht, mit der BULK INSERT-Variante importieren könnte. Ist das möglich...so in der Form ....... FROM 'C:\TEST\*.txt' ?????

Hier die momentane Funktion :

BULK INSERT PersonalSQL.dbo.geleisteteStd
   FROM 'C:\TEST\test.txt'
   WITH
   (
       FIRSTROW = 1,
       FIELDTERMINATOR = ';',
       ROWTERMINATOR = ';'
    )


Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 02, 2012, 23:30:25
Hallo Karsten,

BULK INSERT ist eben "nur" ein SQL Befehl und hat nicht so weitreichende Einstellungsmöglichkeiten, darum sagte ich ja schon, die beste Methode sind die SSIS, weil man da eben alles genau einstellen kann.

Wenn das aber das einzige Problem ist, dann hänge doch einfach einen UPDATE-Befehl dahinter, der einfach dem letzten Wert das Semikolon wieder entfernt.

Einen Joker kannst Du sicher nicht verwenden, aber ein Workaround wäre, die gewünschte Textdatei einfach umzubenennen, den BULK INSERT laufenzulassen und danach die Datei zu löschen. Ansonsten könntest Du den Befehl aber auch einfach als dynamisches SQL in VBA zusammensetzen und dann kannst Du ja nach Belieben den Dateinamen im String austauschen.

Habe selbst noch nicht mit BULK INSERT gearbeitet, kann Dir da also keine besondere Hilfestellung geben.

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 03, 2012, 00:24:00
Hallo Christian.

Zitatein Workaround wäre, die gewünschte Textdatei einfach umzubenennen, den BULK INSERT laufenzulassen und danach die Datei zu löschen
Das ist leider nicht so gewünscht, da dann alles händisch erfolgen muss und nicht automatisiert abläuft.
ZitatAnsonsten könntest Du den Befehl aber auch einfach als dynamisches SQL in VBA zusammensetzen und dann kannst Du ja nach Belieben den Dateinamen im String austauschen.
Wenn ich das mal schaffen würde.  ??? Da muss ich passen. Allein die Einbindung des BULK INSERT in das adp-Projekt über Schaltfläche bringt mich ja schon ins Schwitzen, da der BULK INSERT als SQLQuery.sql abgespeichert wird und in meinem adp-Projekt nicht auftaucht.

Danke trotzdem für Deine Erklärungen

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 03, 2012, 01:44:34
Hallo Karsten,

das ist ja nur das Speichern einer (beliebigen) Query innerhalb von SQL Server Management Studio. Kannst Du natürlich speichern, aber das ist nur zu Deinem Privatvergnügen und hat mit einem Frontend ja nichts zu tun.

Einen SQL-Befehl per String zusammenzusetzen in VBA sollte ja nicht das Problem sein, oder? Etwas wie strSQL="BULK INSERT....".

Und natürlich war mit umbenennen und löschen keine manuelle Tätigkeit gemeint, sondern per Code, schließlich gibt es für Dateibearbeitung ja genug VBA-Befehle (Kill etwa usw.).

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 03, 2012, 09:02:59
Hallo Christian.

ZitatUnd natürlich war mit umbenennen und löschen keine manuelle Tätigkeit gemeint, sondern per Code, schließlich gibt es für Dateibearbeitung ja genug VBA-Befehle (Kill etwa usw.).
Sorry. Das hatte ich falsch verstanden. Ich versuche es mal mit VBA. Danke Dir erstmal.

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 03, 2012, 09:48:02
Wenn ich das so mache :

Public Function Textdatei_importieren()
Dim strSQL As String
strSQL = "BULK INSERT PersonalSQL.dbo.geleisteteStd FROM 'C:\TEST\test.txt' WITH(FIRSTROW = 1,FIELDTERMINATOR = ';',ROWTERMINATOR = '\;\n')"
End Function

passiert aber nichts.  ???
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 03, 2012, 11:15:31
Hallo Karsten,

jetzt willst Du mich aber veräppeln, oder? Du bist doch immer noch der gleiche, der das TransferText-Skript zu Beginn dieses Threads geschrieben hat. Da stehen sowohl VBA-Befehle zur Dateimanipulation wie auch dynamisches SQL aus einem String, die Du ausführst. Und jetzt überleg nochmal.

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 04, 2012, 19:47:22
Nee. Das wollte ich nicht. War nur irgendwann sehr verwirrt.
Habe es nun soweit hinbekommen. Allerdings "stolpert" SQL da noch über Kommata bei Dezimalzahlenwerten und möchte gerne einen Punkt haben. Habe etwas über die REPLACE Funktion gelesen. Ist das wohl auch bei zu importierenden Textdateien möglich oder nur für Tabellen?

Gruß
Karsten
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: Bitsqueezer am März 04, 2012, 20:01:10
Hallo Karsten,

da ein String bis zu 2GB groß sein kann, kannst Du eine Textdatei, die nicht größer ist, z.B. mit dem FileStream-Objekt einlesen, Replace anwenden und wieder speichern. Sofern nicht Kommata irgendwo anders als in Zahlenwerten stehen....

Für weitere Infos zu BULK INSERT mußt Du schon selbst googlen, ich sage ja, ich arbeite nicht damit.

Gruß

Christian
Titel: Re: Textdatei in Access-Projekt einlesen
Beitrag von: ellinho am März 04, 2012, 22:56:16
Hallo.
Habe mein Problem gelöst. Habe eine Temp_Import Tabelle mit dem Datentyp nvarchar für die Spalte "Stunden" angelegt, die mit dem BULK INSERT gefüllt wird. Als nächstes läuft ein Replace, bei dem alle Kommata in der Tabelle Temp_Import durch Punkte ersetzt werden. Danach werden die Inhalte von Temp_Import in die Arbeitstabelle geleisteteStd kopiert, in der das Feld "Stunden" vom Datentyp decimal ist, da mit diesen Werten weitergerechnet wird. Zu guter Letzt werden dann die Inhalte aus der Temp_Import Tabelle wieder gelöscht. Habe im Access-Projekt alles über ein Makro eingebunden, das über eine Schaltfläche angestoßen wird.
Danke für jegliche Hilfestellungen.

Gruß
Karsten