Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exceltabelle über ADO und FieldType festlegen (https://www.delphipraxis.net/19271-exceltabelle-ueber-ado-und-fieldtype-festlegen.html)

Jens Schumann 31. Mär 2004 13:20


Exceltabelle über ADO und FieldType festlegen
 
Hallo,
ich habe das Problem, dass ich mehrere Exceldateien in eine Interbase(Firebird RC 1.5) einlesen muss.
Das öffnen mit ADO ist kein Problem. Die Werte in Interbase zu spielen auch nicht.
So könnte z.B. der ConnectionString aussehen:
Code:
sExcelConnectionString ='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Exceldatei.xls;Extended Properties=Excel 8.0;Persist Security Info=False';
und so das SQL-Statement
SQL-Code:
SELECT * FROM [Tabelle1$]
Das Problem ist, dass wenn ich über ADO ein Excelarbeitsblatt als Datenbank öffne bestimmt ADO den FieldType. Ich vermute mal das geschieht über den ersten Datensatz. Wenn die Tabelle aber wie folgt auf gebaut ist, kommt das Problem:
Code:
A   B    C
EX1  1234  Ein Text
VBN A400  Noch ein Text
Wenn ADO den FieldType über den ersten Datensatz bestimmt wird Spalte B zum Type Double(ADO nimmt wirklich Double anstatt Integer). Wenn jetzt der zweite Datensatz gelesen wird kommt es bei Spalte B zum einem Fehler. Es steht ja ein Text im zweiten Datensatz in Spalte B.

Jetzt die Frage: Wie kann ich die Fieldtypen bestimmen.

Dann würde ich von vornherein sagen dass Spalte B einen String enthält.

shmia 31. Mär 2004 13:33

Re: Exceltabelle über ADO und FieldType festlegen
 
Zitat:

Zitat von Jens Schumann
Jetzt die Frage: Wie kann ich die Fieldtypen bestimmen.
Dann würde ich von vornherein sagen dass Spalte B einen String enthält.

Spalte B in Excel markieren, rechte Maustaste, Zellen formatieren,
Kategorie Text wählen. Notfalls lässt sich dies auch über OLE-Automatisierung
erledigen.

Der Connectionstring für Excel hat übrigens 2 interessante Eigenschaften:
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text

Beispiel:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\xfiles.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"
IMEX=1 wäre also für deinen Fall das Richtige.
Richtig formatierte Excelspalten sind aber zu bevorzugen.

Jens Schumann 31. Mär 2004 13:59

Re: Exceltabelle über ADO und FieldType festlegen
 
Hallo shmia,
GENIAL

vielen Dank

Peeters 22. Feb 2005 16:34

Re: Exceltabelle über ADO und FieldType festlegen
 
Hallo,

was bedeutet "Installierbares ISAM nicht gefunden"? Das kommt wenn ich bei ADOConnection die Connection auf "True" setze.

Besten Dank im voraus.

Jens Schumann 22. Feb 2005 16:47

Re: Exceltabelle über ADO und FieldType festlegen
 
Zitat:

Zitat von Peeters
Hallo,

was bedeutet "Installierbares ISAM nicht gefunden"? Das kommt wenn ich bei ADOConnection die Connection auf "True" setze.

Besten Dank im voraus.

Keine Ahnung, aber zeig doch mal den Connectionstring.

Peeters 22. Feb 2005 16:57

Re: Exceltabelle über ADO und FieldType festlegen
 
Delphi-Quellcode:
Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programmieren\EDI4\excel\tabelle.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1

Peeters 22. Feb 2005 17:38

Re: Exceltabelle über ADO und FieldType festlegen
 
Habe die Lösung gefunden, liegt an Windows. Eine dll mußte neu registriert werden.

Peeters 22. Feb 2005 18:22

Re: Exceltabelle über ADO und FieldType festlegen
 
Leider doch nicht und zwar, wenn ich diesen Connectionstring nehme:

Delphi-Quellcode:
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Exceldatei.xls;Extended Properties=Excel 8.0;Persist Security Info=False'
funktioniert es, aber wenn ich diesen verwende:

Delphi-Quellcode:
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Exceldatei.xls;Extended Properties="Excel 8.0;Persist Security Info=False;IMEX=1'
nicht. Da der Tipp von shmia nicht schlecht ist und auch bei mir eintritt, benötige ich leider die zweite Möglichkeit.

Delphi-Quellcode:
IMEX=1
nur dann kommt der fehler mit "ISAM". Kann mir eine eventuell eine andere Möglichkeit nennen?

Gruß

shmia 22. Feb 2005 19:46

Re: Exceltabelle über ADO und FieldType festlegen
 
Zitat:

Zitat von Peeters
was bedeutet "Installierbares ISAM nicht gefunden"? Das kommt wenn ich bei ADOConnection die Connection auf "True" setze.

siehe: http://www.activevb.de/rubriken/faq/isam.html
Du solltest auch mal speziell Ausschau nach dem aktuellsten Servicepack für die Jet-Engine halten.
MSDN-Library durchsuchenjet database engine service pack


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz