AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi CSV Dateiinahlt direkt ins TADODataSet schreiben?
Thema durchsuchen
Ansicht
Themen-Optionen

CSV Dateiinahlt direkt ins TADODataSet schreiben?

Ein Thema von Piro · begonnen am 17. Sep 2010 · letzter Beitrag vom 19. Sep 2010
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 17. Sep 2010, 12:30
Datenbank: - • Version: - • Zugriff über: -
Moin,

ist es möglich, Daten aus der Textdatei z.B. CSV direkt in ein TADODataSet zu schreiben ohne das man mit einem SQL Server verbunden ist. Und kann man dann die normalen SQL Statements absetzen gegen die Daten in dem DataSet?

Vielen Dank im Voraus.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 17. Sep 2010, 12:47
AFAIK nein. Diese In-Memory-Database hat MS erst mit .NET (ADO.NET) realisiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 17. Sep 2010, 12:51
Du kannst es aber in ein CSVDataSet schreiben und dieses an ein AdoDataSet übertragen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 17. Sep 2010, 16:36
Das geht auch komplett direkt mit der Möglichkeit per SQL-Befehlen drauf loszugehen.

1. Im entsprechenden Verzeichnis eine "schema.ini" anlegen
2. Die Komponente TADOConnection mit folgenden Eigenschaften:
Delphi-Quellcode:
ADOConnection1.ConnectionString := 'Driver={Microsoft Text-Treiber (*.txt; *.csv)};Extensions=asc,csv,tab,txt;';
ADOConnection1.LoginPrompt := False;
ADOConnection1.DefaultDatabase := ''; // Hier kommt der Pfad zu den CSV-Dateien rein
Mit TADOQuery oder TADOTable kannst du jetzt auf die Daten zugreifen. Hierbei sind einige grundlegende SQL-Befehle möglich.
UNION, GROUP etc.

[EDIT]Der Zugriff auf die Daten kann ausschließlich lesend erfolgen!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Sep 2010 um 16:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#5

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 17. Sep 2010, 20:37
Danke für die Antworten. Die Antwort von Sir Rufo ist sehr interessant und werde ich probieren.

Schönen Abend euch noch.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 18. Sep 2010, 21:57
So, ich habe das jetzt mal mit der Treiber probiert. Ich bekomme immer eine Fehlermeldung und ich kann sie nicht richtig interpretieren und den Fehler lösen. Hier mein Code:

Meine Schema.ini (im selben Verzeichnis)
Code:
[S510F_DELIVERY_PERF.TXT]
ColNameHeader = False
Format=Delimited(|)
Col1=b_nr Text
..
Delphi-Quellcode:
SQLConnection.ConnectionString := 'Driver={Microsoft Text-Treiber (*.txt; *.csv)};Extensions=asc,csv,tab,txt';
SQLConnection.LoginPrompt := False;
SQLConnection.DefaultDatabase := ExtractFilePath(OpenTextFileDialog.FileName); // Hier kommt der Pfad zu den CSV-Dateien rein
SQLConnection.Open // --> Hier kommt die Fehlermeldung

DSData.CommandText := 'Select * From S510F_DELIVERY_PERF.TXT';
DSData.Open;
Der Fehler lautet:
Zitat:
..ist eine Exception der Klasse EOleException mit der Meldung 'Ungültiges Attribut für die Verbindungszeichenfolge' aufgetreten.
Ich habe mir dann mit einer *.udl Datei mal meine Provider angeschaut und ich kann keine Microsoft Text-Treiber finden. Ist das schon die Ursache?

Ich habe dann mal Google befragt und folgende Möglichkeit gefunden.
Delphi-Quellcode:
SQLConnection.ConnectionString :=
            'Provider=Microsoft.Jet.OLEDB.4.0;' +
            'Data Source="'+ExtractFilePath(OpenTextFileDialog.FileName)+'"; ' +
            'Extended Properties="text;HDR=NO"';
SQLConnection.Open;

DSData.LockType := ltReadOnly;
DSData.CommandType := cmdText;
DSData.CommandText := 'Select * From S510F_DELIVERY_PERF.TXT';
DSData.Open;
Diese Methode funktioniert, ist aber sehr langsam. 5 Minuten für ca. 42000 Datensätze ist zu lange. Wenn ich die Datei einfach Zeile für Zeile lese und jedesmal die Zeile nach "|" splitte, geht es in Sekunden.

Habt ihr da eventuell ne Lösung? Die Daten landen letztendlich in einem VST.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 18. Sep 2010, 23:55
Die Angabe des ConnectionString ist leider nicht ganz korrekt.

'Driver={Microsoft Text-Treiber (*.txt; *.csv)};Extensions=asc,csv,tab,txt;'; Da hast du das Semikolon hinter
Code:
,txt
vergessen.

Ja, der ist da sehr zimperlich
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#8

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 19. Sep 2010, 13:41
Ok, das Semikolon habe ich eingefügt, leider habe ich immer noch die Fehlermeldung.
Muss der Driver / Provider erst installiert werden? Wie gesagt, wenn ich mir eine *.udl Datei mache, kann ich den Provider kein Microsoft Text Treiber finden.

Woran kann es denn noch liegen? Mit dem Provider Microsoft.Jet.OLEDB.4.0 funktioniert es ja.
Hast du denn eventuell ein funktionierendes Beispiel, welches ich mal testen könnte?

Vielen Dank im Voraus.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: CSV Dateiinahlt direkt ins TADODataSet schreiben?

  Alt 19. Sep 2010, 17:46
Versuch es mal mit diesem Projekt (Source & EXE).

Interessant dabei ist:
  • Die Ausführung direkt aus der IDE schmeißt eine Exception, die aber nicht bis nach ober durchgereicht wird (einfach fortfahren wählen)
  • Wird die EXE-Datei direkt ausgeführt, erscheint auch keine Exception
  • Wird für die Connection/Query eine Komponente auf der Form benutzt, so kommt nach dem Öffnen/Schließen/Öffnen die Exception hoch
Es ist ein wenig strange, funktioniert aber ansonsten

BTW: Die "schema.ini" habe ich nicht vergessen. Dieses Beispiel funktioniert auch ohne "schema.ini"

EDIT

So, ich nehme mal alles soweit zurück

Das Projekt läuft jetzt einwandfrei ohne Zicken.
Die Lösung dabei ist, dass man bei "DefaultDatabase" ein Verzeichnis eintragen muss und keinen Pfad (ich sach ja, ist zickig)

Dieses ist ein Pfad
Code:
C:\Data\
und das ein Verzeichnis
Code:
C:\Data
.

Jetzt klappt es auch mit dem Nachbarn ohne die Exception
Angehängte Dateien
Dateityp: zip TextDB.zip (639,8 KB, 49x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Sep 2010 um 18:11 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz