![]() |
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:
Gruß Jörg
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; |
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 |
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. |
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;
|
Re: ADS: Probleme beim Auslesen der system.indexes
Zitat:
Beim Debuggen der Stelle ist in
Delphi-Quellcode:
der pRecBuf zwar vorhanden (also Return ist true) aber leer?!
function TAdsDataSet.GetActiveRecBuf( var pRecBuf: PChar ): Boolean;
|
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:
[/edit]
select name collate ads_default_cs as name,
index_expression collate ads_default_cs as index_expression from system.indexes where parent = 'artikel' |
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 |
Re: ADS: Probleme beim Auslesen der system.indexes
Zitat:
Mein Teil ist fertig, ich warte noch auf Bernd, um einen gemeinsamen Download anbieten zu können, |
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 16:05 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-2025 by Thomas Breitkreuz