AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi mit ADO XML-Datei in Tabelle kopieren! Hilfe
Thema durchsuchen
Ansicht
Themen-Optionen

mit ADO XML-Datei in Tabelle kopieren! Hilfe

Ein Thema von legionen · begonnen am 3. Sep 2007 · letzter Beitrag vom 3. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#1

mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 11:13
Datenbank: ADO • Zugriff über: AdoConnection
Hallo,

Ich habe ein (für mich als Anfänger) großes Problem:

Ich muss Excel XLS-Dateien in eine Tabelle vom Typ TSringGrid bringen. Die Excel Dateien haben zwar Grundsätzlich eine Struktur, aber fehlen manchmal Daten (gerade zum Ende der Spalten). Ich brauche auch nur einige Daten aus der Excel Tabelle, genauer einige Spalten. Mein Program soll dann die Daten benutzen um Rechnungen mit Ihnen anzustellen. Bei den auszulesenen Daten handelt es sich um Datumsdaten, Integer und Strings.

Ich kann jetzt schon die Daten aus der Excel Datei in Delphi übernehmen und (so glaube ich) das für mich richtige Tabellenfenster öffnen:

if opendialog1.Execute then
begin
AdoConnection1.Close;
AdoConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' + opendialog1.FileName + ';' +
'Mode=Read;Extended Properties=''Excel 8.0'';' +
'Persist Security Info=False';
AdoConnection1.Open;
end;

AdoTable1.Active := false;
AdoTable1.Connection := AdoConnection1;
AdoTable1.TableName := '[Tabelle1$]';
AdoTable1.Active := true;

Jetzt kenne ich aber keinen Befehl, wie ich eine specielle Zelle (Spalten - und Zeilen Nummer) auslesen kann, der Befehl:

cells [1,i] := AdoTable1.Fields.FieldByNumber(i).text;

macht mir große Probleme, da er irgentwie nur die vollen Zellen anzeigen kann, aber sobald eine leere Zelle oder ein Zeilenumbruch kommt Fehlermeldungen anzeigt.

Habe auch gesehen, dass viele die Exceldateien über TDBGrid und TDataSource anzeigen lassen, aber wie ich die Daten gezielt auslesen und vor allem dann auch bearbeiten kann weiss ich nicht.

Schon mal vielen vielen Dank für die Hilfe!!!!!!!!!!!

Stephan
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#2

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 12:43
Ich weiß, für euch scheint diese Frage hier sicherlich trivial, aber ich habe damit wirklich ein großes Problem!


Noch eine weitere Frage am Rande: Welche Option muss ich bei TStringGrid aktivieren werden, damit ich mehrere Zellen aufeinmal kopieren, aber besonders (z.B. aus Excel) einfügen kann?

Vielen Dank nochmal!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 14:25
Herzlich willkommen in der Delphi-PRAXiS, Stephan.

Wenn dein Excel-Sheet nicht tabellarisch ausgefüllt ist, dann ist der Zugriff über ADO nicht besonders geschickt. Auf eine spezielle Zelle über ADO zugreifen ist auch etwas von hinten durch die Brust ins Auge, wie mir scheint. Sicher, du kannst den Record-Pointer (RecNo) der ADOTable enstprechend setzen und über Fields[] auf die Zelle zugreifen, aber bei vielen leeren Zellen und angesichts deines Problems solltest du vielleicht besser über OLE Automation auf die Excel.Cells zugreifen.

Freundliche Grüße
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#4

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 14:52
Hallo, also schon einmal danke für die Hilfe!

Also Grund für meine Frage lautet, dass ich ein Programm schreiben muss, das Rechnungen ausführen soll, die unter Excel selber nicht möglich sind. Da aber die Daten in einer Excel-Datei sind, und es mit einigen 1000. Daten einfach viel zu viele sind zum abschreiben, wollte ich mir die Tabelle durch ADO ins Programm übertragen.

Zu deiner Antwort: Doch die Tabelle hat schon eine feste Struktur: Je "Fall" werden 20 verschiedene Daten erfasst, aber oft fehlen Daten, so zu jedem "Fall" nicht alle 20 Daten erfasst werden. Ich selber brauche daraus auch nur 7 verschiedene Daten, die vollständig vorhanden sind, ich weiss nur nicht, wie ich die Tabelle nach dem einlesen durch ADO genauer durchsuchen kann. (Wenn ich mir die Ausgabe über TDBGrid und TDataSource angucke, dann sind die Daten schon in einem Spalten/Zeilen Schema abgespeichert, ich weiß halt nur nicht, wie ich in ADOTable auch nach Zeile/Spalte abfragen ausführen kann und mir Werte aus der Tabelle ausgeben lassen kann: z.B. alle Werte Spalte 5, Zeile 2 bis 100 .....

Wie mir deine antwort helfen soll weiß ich leider auch nicht, da ich eigentlich nicht extra Excel starten will um die Werte in mein Programm zu übernehmen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 15:40
Was mögen das für Berechnungen sein, die du nicht in Excel selbst programmieren kannst? Weißt du sicher, dass Excel das nicht kann, oder kannst du es dir nur nicht so richtig vorstellen?

Wenn man Berechnungen in Excel nicht durch Zellformeln abdecken kann, dann verwendet man VBA. Hilft auch das nicht weiter, so kann man (auch mit Delphi) ein Excel-Add-In schreiben. Erst wenn das alles nicht die Lösung ist exportiert man die Daten und versucht es außerhalb von Excel zu lösen.

Zu deinem ADO-Zugriff: Wenn du statt der ADOTable ein ADODataset verwendest, dann solltest du gezielt die sieben Spalten anfordern können, die dich interessieren. Die Syntax ist dann: SELECT [Spaltenname1$], [Spaltenname2$] FROM [TAbelle1$] oder ähnlich. Die Spaltennamen lassen sich eventuell auch einfach durch Spaltennummern ersetzen: SELECT 1,2,3,4 FROM [Tabelle1$]. Statt des WorkSheet-Namens kann auch ein Bereichsname angegeben werden, die Syntax ist mir gerade nicht geläufig, da ich selbst nicht mit Excel arbeite. Probiere mal selbst ein wenig.

Freundliche Grüße
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#6

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 3. Sep 2007, 15:49
Also erstmal RIESIG VIEL DANKE für die Hilfe, werde es sofort ausprobieren!

Ich weiss nicht, ob es sich mit Excel umsetzen kann, aber ich muss eine Datenmenge in meherer Intervalle aufspalten, wobei jeder Intervall eine eigene Kurvenfunktion bekommen soll. Das läuft mit vielen Schleifen und beliebig vielen Daten und am Ende sollen diese in einer Tabelle dargelegt werden.

Aber ich kann mit Excel vielleicht kleine Formeln schreiben, aber nicht visualbasic daher scheint für mich Delphi die Beste Lösung, da ich (abgesehen von ADO etc.) doch ein klein wenig Erfahrung habe.......
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#7

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 4. Sep 2007, 09:36
Ich muss leider wieder um Hilfe bitten!!!

Ich verstehe nicht wie ich genau die ADODataSet ansprechen kann?

Wie muss der Befehl aussehen, um in meine Zelle der Tabelle genau einen bestimmten Wert aus der Excel Datei auszulesen:

Bsp: Aus Excel Datei : Spalte B; Zeile 10
In Delphi Tabelle: Spalte 3; Zeile 5

Table1.cells[3,5] := ????????????

und falls es mit DataSet funktioniert, wie kann ich dann die ADODataSet aktivieren/deaktiveren und die Daten aus ADOCOnnection auf ADODataSet rüberbekommen???

Bei ADOTable habe ich den Befehl AdoTable1.Fields.FieldByName('NAME').text gefunden, aber wie heißt der Tabellen Name? Als ich es mit B10 probiert habe, lautete die Fehlermeldung, dass dieses Feld nicht vorhanden sei......

Ich Bitte um schnelle Hilfe!!!!!!!!!!
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#8

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 4. Sep 2007, 12:56
Ich weiß, dass ich euch sicherlich mit diesen Fragen nerve, aber ich brauche diese Informationen für meine Diplomarbeit.
Ich sehe keine andere Möglichkeit die Excel-Dateien über mein Delphi-Programm zu bearbeiten. Das Programm ist soweit auch schon fertig, das einzige was mir eben fehlt ist das Importieren der Daten aus der Excel-File.... da es sich um mehrere Tausende Daten handelt kann ich diese auch nicht eben so abtippen..... ich bitte euch um Hilfe! Wenn, und das sehe ich ja, ihr soviel Ahnung von Datenbanken habt, und auch eine Ahnung habt, wie man sich diese Daten angucken und bearbeiten kann, dann sollte es doch kein Problem für euch sein...

PS: Falls das gar nicht gehen sollte... und das kann ich mir nicht Vorstellen, da ich ein anderes Program hier im Forum gesehen habe, das die Tabelle unter Delphi mit allen Spalten und Zeilen perfekt wiedergeben konnte, aber halt nicht einzelne Zellen.... würde ich mich freuen, wenn ihr mir das auch sagen könntet und mir dann vielleicht eine andere Lösung geben könntet, den soetwas muss ja schaffbar sein, aber wenns mit ADO gehen würde wäre mir das am liebsten, da ich dort ja wenigstens einen teil schon programmiert habe.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 4. Sep 2007, 14:27
Hallo, keine Panik!

Ich habe testweise ein WorkSheet angelegt:

Code:
        A      B
        Name   Height
     1  AAAA   10
     2  BBBB   20
     3  CCCC   30
                =Sum(B1:B3)
Folgende Zugriffe habe ich beispielhaft implementiert:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  DataSource.DataSet := ADODataSet;
  ADODataSet.Connection := ADOConnection;
  ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'
      + 'Data Source="test.xls";Extended Properties="Excel 8.0;HDR=Yes";'
      + 'Persist Security Info=False';
  ADOConnection.LoginPrompt := False;
  with ADODataSet do
  begin
    CommandType := cmdTable;
    CommandText := '[data$]'; // Worksheet: data
    Open;
    // Lookup von Wert "BBBB" in Spalte "Name"
    if Locate('Name', 'BBBB', []) then
    begin
      Edit;
      ShowMessage(VarToStr(FieldValues['Height']));
      FieldValues['Height'] := self.Edit.Text;
      Post;
      ShowMessage(VarToStr(FieldValues['Height']));
    end;
    // Zugriff über Zeilenindex (Eins-basiert)
    RecNo := 1;
    ShowMessage(FieldValues['Name']); // AAAA
    // Zugriff über Spaltenindex // 10
    ShowMessage(Fields[1].Value);
    Connection.Close;
  end;
end;
Kommst du zurecht?

Freundliche Grüße
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#10

Re: mit ADO XML-Datei in Tabelle kopieren! Hilfe

  Alt 1. Okt 2007, 00:09
Sorry,

das ich erst jetzt wieder frage:

bezogen das gennante beispiel von marabu und auch danke (auch wenns zu spät kommt):

nehmen wir an ich habe nur die zwei spalten "name" und "height". aber ich kenne nicht den inhalt der spalten.
weder werte noch anzahl. also nicht das da AAAA, BBBB, CCCC, bzw. 10, 20 u. 30 steht und auch nicht, das es 3 zeilen mit daten sind.

Ich will jetzt aber mit einem Algorithmus diese beiden Spalten auslesen und auch mit der zugehörigkeit der zeilen.
Also soll AAAA und 10 zusammengehören; BBBB und 20 .....
und das halt bis zum Ende, hier CCCC und 30.....

wie kann ich die jetzt so auslesen, egal ob es 3 zeilen oder 1000 zeilen sind. wie ich die daten speichere weiss ich, aber nicht wie ich sie auslese!

ich probiere es mal mit meinen worten auf den punkt zu bingen:
- Unbekannter Inhalt der Tabelle, nur die erste Spalte ist immer gleich (Name, Height etc.)
- Keine extra Spalte für Nummerierung (ist leider so vorgegeben und kann nicht geändert werden)
- Brauche Algorithmus, der ALLE relevanten Spalten ausliest, aber die Daten der Spalten immer Zeilenweise ausliest.
- Dazu braucht man sicher einen Befehlt der weiss wann in einer Spalte die letzte Zeile erreicht ist.

BITTE helft mir, bisher muss ich die daten per hand eingeben... bei 3000 werten viel arbeit :'(


SCHONMAL GANZ VIELEN DANK und sorry, dass ich mich einfach nicht gut (eher gar nicht ) in der informatik-fachsprache ausdrücken kann......
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:52 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