Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADSTable.ADSCreateIndex falsch angewandt? (https://www.delphipraxis.net/62307-adstable-adscreateindex-falsch-angewandt.html)

trockentaucher 2. Feb 2006 19:50

Datenbank: ADS Local • Version: 7.1 • Zugriff über: ADS Connection & DataSet

ADSTable.ADSCreateIndex falsch angewandt?
 
Hallo zusammen

Ich erzeuge zur Laufzeit für eine Tabelle mit Table.ADSCreateIndex einen neuen Index. Das Index-File *.ADI wird auch erzeugt. Öffne ich danach mit dem Advantage Data Architect die Tabelle, ist der eben erzeugte Index nicht im Index Management aufzufinden?!

Der Index wird mit folgender Syntax erzeugt

Delphi-Quellcode:
  Table.AdsCreateIndex('', '', 'RecNo', '.NOT. DELETED()', '', [optCOMPOUND]);
Da das entsprechende ADI-File erzeugt wird, und auch keine Fehlermeldung bzw. Exception erzeugt wird, scheint das auch okay zu sein, warum wird aber der eigentliche Index nicht erzeugt?

mfg,
trocki

joachimd 3. Feb 2006 09:45

Re: ADSTable.ADSCreateIndex falsch angewandt?
 
Zitat:

Zitat von trockentaucher
Delphi-Quellcode:
  Table.AdsCreateIndex('', '', 'RecNo', '.NOT. DELETED()', '', [optCOMPOUND]);

Tagname (2. Parameter) ist leer - hier würde ich zumindest etwas reinschreiben (zB RecNo).
Zudem sollte man keine AdsXXXX-Funktionen im TDataset direkt verwenden, da damit der komplette Mechanismus des TDataset umgangen wird (und der Index eventuell gar nicht in der Index-Liste der Komponente erscheint). Besser gleich die TDataset Methode verwenden:
Delphi-Quellcode:
AdsTable.AddIndex('Recno','RecNo',[]);
Aber abgesehen davon: Welchen Sinn macht denn ein index mit der Kondition 'not deleted', wenn im ADT-Format die gelöschten Records sowieso nicht in den Index kommen? Die Kondition verhindert, dass der Index für Optimierungen herangezogen wird.

trockentaucher 3. Feb 2006 12:22

Re: ADSTable.ADSCreateIndex falsch angewandt?
 
Zitat:

Zitat von joachimd
Delphi-Quellcode:
AdsTable.AddIndex('Recno','RecNo',[]);

Hallo, habe ich auch so getestet. Gleiches Ergebnis, das *.adi wird erstellt und scheint auch zu funktionieren, allerdings bleibt im Index Management weiterhin alles leer...

Zitat:

Zitat von joachimd
Aber abgesehen davon: Welchen Sinn macht denn ein index mit der Kondition 'not deleted', wenn im ADT-Format die gelöschten Records sowieso nicht in den Index kommen? Die Kondition verhindert, dass der Index für Optimierungen herangezogen wird.

Stimmt schon, das Feld ist eigentlich leer, bei der ganzen Testerei habe ich dann versuchsweise "not deleted" eingetragen, was am Ergebnis aber nichts änderte...

mfg,
trocki

joachimd 3. Feb 2006 12:32

Re: ADSTable.ADSCreateIndex falsch angewandt?
 
Zitat:

Zitat von trockentaucher
Hallo, habe ich auch so getestet. Gleiches Ergebnis, das *.adi wird erstellt und scheint auch zu funktionieren, allerdings bleibt im Index Management weiterhin alles leer...

Wie sieht es in Delphi selbst aus? Ist da ein Index auswählbar? Wenn ja, so vermute ich 2 Ursachen:
1) Du hast ein Data Dictionary, Dein User aber keine Rechte zur Erstellung des Index (dann ist es ein Temp-Index, welcher bei Connection Abbau gelöscht wird)
2) Dein Architect ist buggy (wobei mir hier keine Probleme bekannt sind)


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