Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Feldtyp und -grösse ermitteln (https://www.delphipraxis.net/161731-feldtyp-und-groesse-ermitteln.html)

fly_singapore 18. Jul 2011 11:24

Datenbank: Excel • Version: XP • Zugriff über: ADOConnection

Feldtyp und -grösse ermitteln
 
Hallo Allerseits,

über eine ADOconnection habe ich eine Ecxeltabelle angezapft. Das ging auch ohne grössere Probleme.

Zusätzlich konnte ich auch die Spaltennamen der ersten Spalte erkennen. Dies ging auch sehr gut.
Nun möchte ich aber gerne auch den Feldtyp und die Grösse ermitteln. Geht das?

Delphi-Quellcode:


adoconnection2.Provider := 'Microsoft.Jet.OLEDB.4.0';
adoconnection2.ConnectionString := 'Data Source=C:\temp\Exceltest.xls; Extended Properties=Excel 8.0'     ;
adoconnection2.LoginPrompt := false;
adoconnection2.Open;
ADOQuery2.SQL.Text := 'SELECT * FROM [Tabelle1$]';
ADOQuery2.Active := true;

// gibt den Wert der ersten Spalte zurück
cfield := ADOQuery2.fieldbyname('ObjID').AsString;


 // ermittelt den Feldnamen
 cfield := ADOQuery2.Fields.Fields[0].FieldName;

jobo 18. Jul 2011 12:19

AW: Feldtyp und -grösse ermitteln
 
so ist es vorgesehen:
Delphi-Quellcode:
   dataset.fieldByNAme('blub').FieldKind
   dataset.fieldByNAme('blub').Size
   dataset.fieldByNAme('blub').DataType

   dataset.fields[1].FieldKind
   dataset.fields[1].Size
   dataset.fields[1].DataType
Ob das mit Excel zuverlässig funktioniert, ist äußerst zweifelhaft.

fly_singapore 18. Jul 2011 13:06

AW: Feldtyp und -grösse ermitteln
 
Hallo Jo,

vielen Dank für Deine Bemühungen. Leider hats nicht funktioniert... Aber das hast Du schon angedeutet... :cry:

jobo 18. Jul 2011 13:41

AW: Feldtyp und -grösse ermitteln
 
Excel wird ja gern als DB missbraucht. Du solltest Dich fragen, warum es Excel sein soll.
M.E. gehören Daten in eine Datenbank.
Excel darf dann gern als Report-, Auswertungstool verwendet werden.

Wenn Du unter Folter versprechen musstest, Exceldaten auf diesem Wege anzusprechen, auszulesen oder oder oder, dann prüfst Du Dich wahrscheinlich tot. ;)
Vorgehen wäre dann eher, eine funktionierende Umgebung (Excelsheets, -Spalten, -Formatierung, .. ) zu definieren und dann bei Fehlern mit entsprechenden Hinweisen auszusteigen.

FredlFesl 18. Jul 2011 15:02

AW: Feldtyp und -grösse ermitteln
 
Grauslich, stimmt. Manchmal muss man aber EXCEL-Tabellen importieren.
Dann sollte das Datenformat vorher klar sein. Wenn es denn sein muss, kann man auch versuchen, durch ein paar Tests den Datentyp selbst herauszubekommen.

Ich habe es mal so gemacht: Ich deklariere mir eine Variable vom Typ "SET OF TFieldType" und belege sie mit allen sinnvollen Datentypen. Die Variable sei "MoeglicheDatentypen". Ich definiere mir eine Variable pro Spalte.

Nun lese ich die Tabelle ein: Betrachten wir mal nur eine Spalte, deren Zelleninhalt sei V.

1. Ist V leer?
2. Wenn NEIN
2.1 Kann ich V in eine Integerzahl umwandeln? Wenn nein, entferne ich 'ftInteger' aus den möglichen Datentypen.
2.2 Kann ich V in eine Float-Zahl umwandeln? Wenn nein...
2.3 Ist V='1' oder '0' oder 'Wahr' oder 'Falsch' oder 'True' oder 'False' ...,? Nein? Dann ftBoolean entfernen
... Für alle unterstützten Datentypen wiederholen.

Zum Schluss bleibt eine Menge von Datentypen übrig. In der Reihenfolge Bool->Int->Float->String prüft man, ob einer der Datentypen in der Menge ist und nimmt dann den ersten Datentyp. Fertig.

fly_singapore 18. Jul 2011 15:27

AW: Feldtyp und -grösse ermitteln
 
Hallo FredlFesl und Jo


genau, so habe ich dann auch weiter gedacht. Ich muss halt die Exceltabelle auf ihre Bestandteile analysieren. >Und...

Es ist ja eben der Sinn, Daten aus Excel zu importieren um eben diesen Irrglauben von Excel als Datenbankersatz aus den weg zu räumen. Nun, manchmal bekommt man aber die Daten im Excelformat.

Man kann auch in Word eine schöne Tabelle aufbauen. eine Datenbank ist es trotzdem nicht. Mit Excel kann man auch schöne Texte schreiben, dafür ist aber Excel nicht gedacht. Das erinnert mich ans alte DOS-Tool
Edlin. Es gab doch Zeitgenossen, die wollten damit Korrespondenz machen... :roll:


Vielen Dank für Deine/Eure Hinweise...

jobo 18. Jul 2011 19:47

AW: Feldtyp und -grösse ermitteln
 
Ok, wenn Du unformatierte Exceldaten in ein definiertes DB System bringen willst, dann hast Du ja schon mal eine Masterdefinition, Deine Zieltabellen. Dazu gäbe es mehrere Möglichkeiten.
Vorab eine Unterscheidung:
Stammen die Excel Daten aus "gewachsenen" Excel Sheets oder handelt es sich um automatisch/ programmatisch erzeugte Dateien?
Im ersten Fall wird's anstrengend, im 2. kann man vielleicht einen Großteil problemlos in die DB bringen, weil es zuvor konsistent ausgegeben wurde.

Aber für Fall 1:
a) Vorgaben aus der Zieltabelle nehmen und per COM als Formatierung auf die Excelspalten legen
a1) Dann Dein Verfahren anwenden

b) Import von Excel in Interfacetabellen, die nur aus (genügend großen und vielen) Textspalten aufgebaut sind
b1) Interfacetabelle gemäß Zieltabelle analysieren, sortieren, sieben
b2) finalen Import in Zieltabelle durchführen

Je nachdem ob es sich um wiederkehrende, variierende usw Formate, Daten, Spalten handelt, evtl. auch fertige Tools nutzen, Stichwort: ETL


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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