![]() |
Re: ClientDataSet - wie kann man Indizes verwenden?
um noch mal auf den eigentlichen Kern des Problems zurückzukommen:
1) Wieso schafft es diese ClientDataSet-Komponente nicht, auf die bereits vorhandenen Indizes zuzugreifen? Gibt es da vielleicht einen Work-Around? 2) Wieso wird es in der Hilfe so beschrieben, dass es auch persistente Indizes gibt, die also nicht weggeworfen werden beim Programmende? Das scheint doch definitiv falsch zu sein, oder? |
Re: ClientDataSet - wie kann man Indizes verwenden?
ach so, fast hätte ich es vergessen: wie schaut es eigentlich mit Queries aus?
wie kann ich sowas nutzen? Fragen über Fragen ... |
Re: ClientDataSet - wie kann man Indizes verwenden?
Also bitte, Schlüssel und Indizes (das ist schon ein bisschen was anderes als ein Schlüssel) werden auf der Tabelle erzeugt, und zwar per SQL, ein DataSet ist eine Abfragekomponente. Die Datenbank inklusive Ihrer Tabellen solltest Du schon per SQL anlegen und ändern, am Besten bevor Du Dich ans programmiern machst.
Ein Link zum Einstieg (ist zwar auf Oracle bezogen, sollte aber helfen): ![]() Sherlock |
Re: ClientDataSet - wie kann man Indizes verwenden?
Ich hab in einem Buch über Datenbankprogrammierung ("Datenbankprogrammierung Delphi 5" M.Ebner)
folgendes gefunden: Zitat:"Im Zeitvergleich zu TTable und BDE schnitt ADO beim Öffnen ein wenig schlechter ab (etwa 280ms zu 240 ms), beim Aufruf des nächsten Datensatzes lagen die Zeiten gleich (etwa 11ms). Was jedoch deutlich länger dauert, ist das Öffnen von Datenmengen zu Entwurfszeit. Auch das Erzeugen von persistenten TField-Instanzen für alle Tabellenspalten wird zur Geduldsprobe." Scheint tatsächlich langsamer zu sein als mit BDE. |
Re: ClientDataSet - wie kann man Indizes verwenden?
OK, dann nach dem Ausflug ins 20. Jahrhundert zurück ins 21. Die BDE ist seit Jahren nicht mehr gepflegt worden, ADO hatte dann doch noch ein paar Jahre Zeit sich zu entwickeln und hat mittlerweile die BDE hinter sich gelassen.
;) Edith kann mkinzler unter mir nur zustimmen. Sherlock |
Re: ClientDataSet - wie kann man Indizes verwenden?
Wobei DBMS spzifische Komponenten natürlich noch besser sind
|
Re: ClientDataSet - wie kann man Indizes verwenden?
Zitat:
was ein Dataset ist, weiß ich sehr wohl, und wie man per SQL eine Datenbank anlegt, ebenfalls. Wenn du mal genauer nachliest, wirst du vielleicht feststellen, dass ich genau das gemacht habe bzw. machen will, und zwar, bevor ich mich ans Programmieren mache. Es ist aber offenbar so, dass ich auf die von mir auf der Tabelle erzeugten Indizes nicht ansprechen kann. Die Beschreibung, wie Oracle das intern organisiert, ist an dieser Stelle völlig uninteressant, da der Index einfach nicht erreichbar ist. Ich dachte eben, dass es vielleicht doch einen Work-Around geben könnte, an einen real existierenden Index ranzukommen, weil sonst ja ein ganz wesentlicher Teil der Datenbank-Intelligenz verloren geht. Da scheint aber leider niemand eine Lösung zu kennen. Schade! |
Re: ClientDataSet - wie kann man Indizes verwenden?
Ein Index funktioniert doch aber automatisch. Dafür ist er da. Du musst nach dem korrekten anlegen des Index nixhts mehr damit machen, die abfragen laufen dann ganz von alleine schneller. Und da liegt dann auch die wahre Intelligenz eines RDBMS, das Du nämlich eben nicht selber Indizes abfragen musst ;)
![]() Sherlock |
Re: ClientDataSet - wie kann man Indizes verwenden?
@Sherlock: Sein Problem scheint es zu sein das die Indizes des Provider-DataSets nicht automatisch in das ClientDataSet übernommen werden
|
Re: ClientDataSet - wie kann man Indizes verwenden?
Zitat:
Genau das hätte ich erwartet, aber es ist leider nicht so! Das scheint aber ein Problem der ClientDataSet-Komponente zu sein. Extern definierte Indizes sind einfach nicht greifbar, warum auch immer. Einfach mal ausprobieren: CREATE DATABASE xxx ... CREATE TABLE yyy ... CREATE INDEX zzz on yyy (spalte) ... (geht mit jedem SQL-Tool auf die eine oder andere Art und Weise) Danach neues Projekt erstellen, TSQLConnection, TSQLDataSet, TDataSetProvider, TClientDataSet anlegen und verfügbare Indizes über IndexDefs anzeigen. Da findet sich aber nichts außer DEFAULT_ORDER und CHANGEINDEX, und die haben eine völlig andere Bedeutung. Nun würde es mir ja nichts ausmachen, wenn ich das genau einmal aus meinem Programm herausmachen müsste, aber das ist eben auch nicht der Fall. Stattdessen erzeugt die Komponente bei jedem Öffnen den aktuell eingestellten Index wieder neu. Und das dauert einfach recht lange, wenn genügend Datensätze vorhanden sind ... ist ja klar! Bei 1000 oder 10000 Sätzen fällt das zunächst mal gar nicht auf ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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