Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADS: Probleme beim Auslesen der system.indexes (https://www.delphipraxis.net/82480-ads-probleme-beim-auslesen-der-system-indexes.html)

hsg 14. Dez 2006 07:31

Datenbank: ADS • Version: 8.1 • Zugriff über: TADSQuery

ADS: Probleme beim Auslesen der system.indexes
 
Hallo,

ich schreibe mir gerade ein Tool um meine Datenbanken (Advantage Database Server Version 8.1) zu dokumentieren.
Dazu verbinde ich mich mit dem entsprechenden Dictionary und befrage die systems-Tabellen. Das funktioniert soweit auch recht gut.
Nur beim Auslesen der Indizes habe ich auf einmal Schwierigkeiten. Den Namen des Index bekomme ich noch, den eigentlichen Index-Ausdruck nicht mehr, dort liefert mir FieldValues['Index_Expression'] nur noch NULL-Varianten zurück.
Gebe ich die entsprechende Abfrage im ARC32 ein, bekomme ich alle Felder ausgelesen.

Irgendwer eine Idee? Hier nun der Code:

Delphi-Quellcode:
dqInd.Active                           := False;
dqInd.SQL.Text                         := 'select * from system.indexes where parent = ' + QuotedStr(dqTab.FieldValues['Name']);
dqInd.Active                           := True;
dqInd.First();
while not dqInd.Eof do begin
  oFeld                                := oChild.AddChild('Indizes');
  oFeld.AttributeNodes['Name'].Text    := dqInd.FieldValues['Name'];  // <- funktioniert noch
  oFeld.AttributeNodes['Expr'].Text    := dqInd.FieldValues['Index_Expression']; // <- ab hier bekomme ich nur noch NULL zurück!
  oFeld.AttributeNodes['Cond'].Text    := dqInd.FieldValues['Index_Condition'];
  dqInd.Next();
end;
Gruß Jörg

marabu 14. Dez 2006 07:54

Re: ADS: Probleme beim Auslesen der system.indexes
 
Hallo Jörg,

ich arbeite zwar nicht mit ADS, aber in der Online Help sollte es ein Kapitel zu den system views geben. Dort würde ich eine Erklärung zu index_expression etc. erwarten. Ein NULL-Wert könnte bedeuten, dass du dort nur für einen funktionsbasierte Index einen Wert erhältst.

Grüße vom marabu

hsg 14. Dez 2006 08:22

Re: ADS: Probleme beim Auslesen der system.indexes
 
Wie bereits gesagt: das gleiche SQL-Statement im ADS-Eigenen Data-Archikten abgesetzt hat dort Werte drin stehen.
Ich habe mir eben den entsprechenden Source vom Data-Architekten angeschaut, die prüfen nicht ob es sich zufällig eine System-Tabelle handelt.

joachimd 14. Dez 2006 09:16

Re: ADS: Probleme beim Auslesen der system.indexes
 
versuche mal, ob Du anders auf die Felder zugreifen kannst:

Delphi-Quellcode:
  oFeld.AttributeNodes['Expr'].Text    := dqInd.FieldByName('Index_Expression').AsString;

hsg 14. Dez 2006 09:28

Re: ADS: Probleme beim Auslesen der system.indexes
 
Zitat:

Zitat von joachimd
versuche mal, ob Du anders auf die Felder zugreifen kannst:

Delphi-Quellcode:
  oFeld.AttributeNodes['Expr'].Text    := dqInd.FieldByName('Index_Expression').AsString;

Funktioniert leider auch nicht :(
Beim Debuggen der Stelle ist in
Delphi-Quellcode:
function TAdsDataSet.GetActiveRecBuf( var pRecBuf: PChar ): Boolean;
der pRecBuf zwar vorhanden (also Return ist true) aber leer?!

Union 14. Dez 2006 20:10

Re: ADS: Probleme beim Auslesen der system.indexes
 
Ich kriege auch denselben Fehler. Allerdings ein List Index out of bounds (7). Es sind 12 Felder in der Tabelle und nach dem 7. Feld gibt es den Absturz beim Zugriff auf das Feldarray. Das Dataset hat aber alle Felder....

[edit]
... Und habe auch mit einer alten TAdsDataSet-Version darauf zugegriffen. Die System Views geben die Char-Werte als CICharacter zurück. Dieser Feldtyp ist dann unbekannt und die Fielddef wird nicht addiert. So werden aus 12 Feldern dann 7.

Und so könnte man es umgehen:
SQL-Code:
select name collate ads_default_cs as name,
      index_expression collate ads_default_cs as index_expression
from system.indexes where parent = 'artikel'
[/edit]

hsg 15. Dez 2006 06:35

Re: ADS: Probleme beim Auslesen der system.indexes
 
Habe ich gerade ausprobiert, hilft auch nicht.

In den ADS-eigenen Newsgroup habe ich das Thema ebenfalls zur Sprache gebracht, dort ist das scheinbare Fazit, dass es ein Fehler im Zusammenhang mit der BDS2006 zu sein scheint, die gleiche Abfrage unter Delphi 7 funktioniert, in der BDS2006 nicht.

@joachimd: Liest du noch mit? habt ihr den Thread in Advantage.delphi mitverfolgt? Und bei der Gelegenheit: Wann kommt das Weihnachtsgeschenk mit den Code-Beispielen aus dem Delphi-Trainig? :-D

joachimd 15. Dez 2006 07:45

Re: ADS: Probleme beim Auslesen der system.indexes
 
Zitat:

Zitat von hsg
@joachimd: Liest du noch mit? habt ihr den Thread in Advantage.delphi mitverfolgt? Und bei der Gelegenheit: Wann kommt das Weihnachtsgeschenk mit den Code-Beispielen aus dem Delphi-Trainig? :-D

Ich lese noch mit...Weihnachten ist aber noch nicht ;)
Mein Teil ist fertig, ich warte noch auf Bernd, um einen gemeinsamen Download anbieten zu können,

hsg 15. Dez 2006 09:24

Re: ADS: Probleme beim Auslesen der system.indexes
 
So, damit alle es wissen: Das Problem ist gelöst!
In der Datenbank-Connection war kein Benutzername angegeben, nach Eintrages des Datenbankadministrators funktioniert es einwandfrei.

Danke an alle, die sich mit dem Problem beschäftigt haben.

Warum der "Fehler" sich nur bei der Index-Tabelle ausgewirkt hat und dort auch nur ab den Feldern index_expression ist mir nicht klar (ich lese in der Routine das gesamte Dictionary aus, also auch die Tabellenbeschreibung und die Kommentare im Dictionary)

Gruß Jörg


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