Aktiven Index bestimmen [ERLEDIGT]

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Aktiven Index bestimmen [ERLEDIGT]

Beitrag von UliTs »

Hallo allerseits,

ich habe ein einfaches Statemtent SELECT * FROM TABLENAME ORDER BY ...
Die Orderbedingung gibt es auch als Index so dass hierbei ein LIVE-Cursor generiert wird.
Ich möchte den aktiven Index bestimmen:

Code: Alles auswählen

UNSIGNED32
 AdsGetIndexName (ADSHANDLE hIndex,
UNSIGNED8 *pucName, 
UNSIGNED16 *pusLen); 
 
Ich habe gehofft, wenn ich hIndex=0 angebe, wird der aktive Index genommen, so wie es in der Dokumentation zu

Code: Alles auswählen

function AdsGetIndexName( hIndexHandle : ADSHANDLE ) : String;
steht. Leider klappt es nicht. Hat jemand den Quellcode zur Delphi-Funktion?
Oder weiss jemand die Lösung, wie ich dies mit DLL-Aufrufen bestimmen kann?

Uli
Zuletzt geändert von UliTs am Mo, 28. Okt 2013 10:21, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 651
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Aktiven Index bestimmen

Beitrag von nightcrawler »

Die ORDER BY wird - auch wenn es keinen Index gibt, einen Live-Cursors erzeugen, außer ... (lange Liste).
Ob ein Index verwendet wird oder ein temporärer von der SQL Engine erzeugt wird, läßt sich nur über den Ausführungsplan feststellen. Aber in der Applikation kommt man in aller Regel nicht dran (außer, man ruft den Plan über 'Show plan for <sql-statement>' ab).
Darf ich fragen, welche Absicht hinter dieser Frage steckt? In der SQL-Welt ist eine aktive Index-Ordnung nicht relevant.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Aktiven Index bestimmen

Beitrag von UliTs »

nightcrawler hat geschrieben:...
Darf ich fragen, welche Absicht hinter dieser Frage steckt? In der SQL-Welt ist eine aktive Index-Ordnung nicht relevant.
Hallo Joachim,

danke für die schnelle Reaktion.
Es ist so: zu der Tabelle im SQL Statement gibt es mehrere Indizes. In einem allgemeinen Teil des Programms stellt der Programmcode automatisch fest, dass es einen Index über eine bestimmte Id gibt. Dann wird dieser Index benutzt, um einen Seek-Befehl auszuführen. Das geht auch genial schnell ...
Den Programmteil habe ich (wie immer) so programmiert, dass der vorherige aktive Index gemerkt und anschließend wieder gesetzt wird.
Nun handelt es sich in diesem Fall ja um ein SQL Statement mit "Order By"-Klausel. Das heißt, nach dem Erzeugen des Statements gibt es gemäß DLL-Aufrufen keinen aktiven Index (was ich eigentlich auch logisch finde). Also setze ich in diesem Fall anschließend den aktiven Index wieder zurück auf "kein Index aktiv".
Unglücklicherweise ist anschließend die Tabelle nach der physikalischen Reihenfolge sortiert. Einerseits logisch, andererseits wiederum nicht, da so die "Order By"-Klausel ignoriert wird :-( .

Hoffentlich war das verständlich.

Wenn ich die Dokumentation über die DELPHI-Funktion nehme, müßte es eigentlich eine Lösung für mein Problem geben ...
Nur habe ich leider nicht den Quellcode zur DELPHI-Funktion, um sie in xBase++ nachzubilden :? .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 651
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Aktiven Index bestimmen

Beitrag von nightcrawler »

UliTs hat geschrieben:Wenn ich die Dokumentation über die DELPHI-Funktion nehme, müßte es eigentlich eine Lösung für mein Problem geben ...
Nur habe ich leider nicht den Quellcode zur DELPHI-Funktion, um sie in xBase++ nachzubilden :? .
Du kannst zwar auf eine Live-Query einen anderen Index aktiv setzen- und dieser wird dann auch verwendet - aber ein ORDER BY gibt den nicht zurück. Auch nicht in Delphi. Extra getestet.

Code: Alles auswählen

ORDER BY <> Index
oder

Code: Alles auswählen

mengenbasiertes SQL <> indexbasiertes ISAM
auch wenn es durchaus Überschneidungen gibt.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Aktiven Index bestimmen

Beitrag von UliTs »

Danke, auch wenn es nicht die Antwort ist, die gerne gehabt hätte :wink:

Ich hätte noch eine Idee: vielleicht ist nach einem AdsCloseTable und anschließendem AdsExecuteSQL wieder nach "ORDER BY" sortiert und das Ganze auch akzeptabel schnell :!:
Kann ich wahrscheinlich aber erst Montag ausprobieren.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Aktiven Index bestimmen [ERLEDIGT]

Beitrag von UliTs »

UliTs hat geschrieben:...vielleicht ist nach einem AdsCloseTable und anschließendem AdsExecuteSQL wieder nach "ORDER BY" sortiert und das Ganze auch akzeptabel schnell
Ich bin überzeugt, das obiges zwar eine Lösung ist, aber sicher nicht besonders sinnvoll. Ich habe eine einfache Lösung gefunden, bei der ich bei SQL-Tabellen problemlos auf die Indizes verzichten kann :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten