Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Werte aus Oracle Datenbank in Variable auslesen (https://www.delphipraxis.net/143515-werte-aus-oracle-datenbank-variable-auslesen.html)

AnyKey 17. Nov 2009 14:49


Werte aus Oracle Datenbank in Variable auslesen
 
Hi,

ich habe folgendes Problem, ich muss aus jeder Zeile in der Datenbank den wert in ein array speichern, um mir später daraus ein XML zusammen zu bauen. Das Problem an der sache ist jetzt dass ich die Werte nicht in mein array bekomme... :( hoffe es kann mir jemand helfen. -> ich denke mal mit welcher komponente man arbeitet wird relativ egal sein, geht nur um ein allgemeines beispiel.

Deklaration:

Delphi-Quellcode:
    ColumnFeatures: record
      RowsInDB: Integer;
      ColumnName: array of string;
      ColumnSize: array of Integer;
      ColumnType: array of Integer;
hier die stelle aus meinem Code an dem das Auslesen funktioniert:

Delphi-Quellcode:
    OraQuery1.SQL.Clear;
    OraQuery1.SQL.Add('SELECT COUNT (*) FROM '+Tabelle);
    OraQuery1.Active := true;
    ColumnFeatures.RowsInDB := OraQuery1.Fields[0].Value;
    OraQuery1.Active := false;
und hier wo ich eines der arrays befüllen will und immmer Fehlermeldungen bekomme.

Delphi-Quellcode:
 OraQuery1.SQL.Clear;
    OraQuery1.SQL.Add('SELECT TECO_FIELD_NAME FROM '+Tabelle);
    OraQuery1.Active := true;
    OraQuery1.Open;
    for i := 0 to ColumnFeatures.RowsInDB do
    begin
      ColumnFeatures.ColumnName[i] := OraQuery1.Fields[0].Text[i];
    end;
und zwar bekomme ich folgende Fehlermeldung schon beim ersten durchlaufen der Schleife:

Im Projekt ... ist eine Exception der Klasse EAccsessViolation aufgetreten. Meldung: Zugriffsverletzung bei Adresse ... in Modul ...'. Lesen von Adresse 00000000'.


Hoffe es kann mir jemand helfen. Ich habe in der zeile die in der Schleife ist auch schon versucht es über Fields[i].Value zu machen das funktioniert aber auch nicht.

Gruß
AnyKey

sirius 17. Nov 2009 14:55

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Hast du die Länge der Arrays gesetzt?

Edit: Und die Komponente ist schon interessant, denn so wie es jetzt aussieht kenne ich es nicht. Man läuft eher mit Query.Next durch die Zeilen hindurch.

hoika 18. Nov 2009 07:31

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Hallo,

dein Code sieht in der Tat merkwürdig aus ..

RowsInDB ???
In der DB gibt es keine Rows,
sondern Tabellen.
Eine Tabelle hat dann in der Tat Rows.

Ausserdem benutzt du Active und Open hintereinander,
das ist hier aber das gleiche, also doppelt gemoppelt.

Was willst du eigentlich erreichen ?

ColumnFeatures.ColumnName[i] := OraQuery1.Fields[0].Text[i];

Die Spaltennamen auslesen ?

Was hat das mit RowsInDB zu tun ?

Hat die Tabelle z.B. 10 Felder (Spalten), aber 100 Rows,
geht der Code doch auf jeden Fall schief

Delphi-Quellcode:
for i := 0 to ColumnFeatures.RowsInDB do
    begin
      ColumnFeatures.ColumnName[i] := OraQuery1.Fields[0].Text[i];
    end;
Ausserdem muss es eh ColumnFeatures.RowsInDB-1
heissen, weil du ja mit 0 beginnst.


Schau mal hier
Oracle Metadata


Heiko

peschai 18. Nov 2009 14:13

Re: Werte aus Oracle Datenbank in Variable auslesen
 
....Text[i]; ????

AnyKey 19. Nov 2009 07:20

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Also,

ich habe eine Abfrage auf die Datenbank gemacht, die mir aus einer Bestimmten Tabelle und dort aus einer bestimmten Spalte alle Zeileninhalte holt. Der Name von RowsInDB war falsch... denkt euch einfach es wäre RowsInTable... bei dem Namen hatte ich scheinbar nicht mitgedacht. Soweit ich das jetzt verstanden habe kann man über das OraQuery1.Fields[0] die Werte aus der ersten Abfrage holen. Was ich jetzt machen will/muss ist alle Zeileninhalte die vorher aus der Datenbank geholt wurden in ein Array speichern um später mit ihnen arbeiten zu können, sie sollen später zu einem XML zusammengesetzt werden.

Edit: Also ich hatte dummerweise tatsächlich vergessen die Länge der Arrays anzugeben. Das habe ich nun aber gemacht und
festgestellt dass es immer noch nicht funktioniert.

Gruß
AnyKey

DeddyH 19. Nov 2009 09:06

Re: Werte aus Oracle Datenbank in Variable auslesen
 
An Deiner Stelle würde ich mir eine Klasse erstellen, die die benötigten DB-Felder als Properties enthält. Die Objekte dieser Klasse kannst Du dann bequem in einer TObjectList verwalten. Das könnte dann ungefähr so aussehen:
Delphi-Quellcode:
Query.SQL := 'SELECT Feld1, Feld2 FROM Tabelle WHERE Bedingung';
Query.Open;
while not Query.EOF do
  begin
    Objekt := TObjekt.Create;
    Objekt.Property1 := Query.FieldByName('Feld1').Value;
    Objekt.Property2 := Query.FieldByName('Feld2').Value;
    Objektliste.Add(Objekt);
    Query.Next;
  end;

AnyKey 19. Nov 2009 09:21

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Hi,

danke für eure Antworten, ich habs rausgefunden :)

ich machs jetzt so:

Delphi-Quellcode:
    SetLength(ColumnFeatures.ColumnName,ColumnFeatures.RowsInTable);
    SetLength(ColumnFeatures.ColumnSize,ColumnFeatures.RowsInTable);
    SetLength(ColumnFeatures.ColumnType,ColumnFeatures.RowsInTable);
    OraQuery1.SQL.Add('SELECT TECO_FIELD_NAME FROM '+Tabelle);
    OraQuery1.Active := true;
    for i := 0 to ColumnFeatures.RowsInTable-1 do
    begin
      ColumnFeatures.ColumnName[i] := OraQuery1.Fields[0].Value;
      OraQuery1.Next;
    end;
    OraQuery1.Active := false;
    OraQuery1.SQL.Clear;
So funktioniert es :) jetzt habe ich nur noch das Problem dass er mir einmal die Zahlen die ich in einer der Abfragen auslese scheinbar irgendwie umsortiert, sie aber genauso bleiben sollen wie sie sind und dass er mein XML nicht erstellt, aus welchen gründen auch immer. Das mit dem auslesen funktioniert jedenfalls, falls jemand zu den anderen Sachen noch eine Idee hat wäre ich für eine Antwort sehr dankbar.

DeddyH 19. Nov 2009 10:07

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Zitat:

Zitat von AnyKey
dass er mir einmal die Zahlen die ich in einer der Abfragen auslese scheinbar irgendwie umsortiert

Hast Du denn auch sortiert abgefragt, oder wie stellst Du das fest?

AnyKey 19. Nov 2009 10:37

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Meine Abfrage sieht folgendermaßen aus:

OraQuery1.SQL.Add('SELECT TECO_FIELD_NAME FROM '+Tabelle);

Da dürfte also nichts sortiert sein, wenn ich allerdings mit dem Array weiter arbeite sind die Inhalte aufeinmal anders als an der stelle an der ich sie ausgelesen hab, hab ich mit dem Debugger überprüft. Also in der XML sind sie dann anders als im Array :gruebel: und die Zahlen sind schon im Array nicht in der Reihenfolge in der sie abgefragt werden.

Naja ansonsten funktioniert alles! :)

Gruß
AnyKey

AnyKey 20. Nov 2009 07:10

Re: Werte aus Oracle Datenbank in Variable auslesen
 
Hi,

ich habe das Problem dass ich diese werte leider auch nicht direkt in der Abfrage sortieren kann, weil es keinen Wert gibt nach dem ich sie sortieren könnte so wie ich sie brauche. Was bedeutet, dass ich sie genau so wie sie aus der Datenbank kommen, also Zeile für Zeile auch weiterverarbeiten muss, ohne dass sie auf irgendeine Art sortiert werden. Wenn mir dabei einer helfen könnte wäre das echt super.

Gruß
AnyKey


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Seite 1 von 2  1 2      

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