Autor |
Beitrag |
Tower
      
Beiträge: 99
|
Verfasst: Mi 12.03.03 13:19
Hallo!
Ich will mittels dbExpress-Komponenten auf Interbase-Tabellen zugreifen. Klappt auch fein, nur das Öffnen der entsprechenden ClientDataSets dauert unheimlich lange!
(ca. 4-5 Sekunden, sprich: wenn ich sechs Tabellen beim Programmstart öffne, warte ich 'ne halbe Minute...!)
Ich denke, ich habe im Prinzip alles so, wie es sein soll: SQL-Connection, damit verbundene SQLDatasets, und weil ich editierbare Datenmengen brauche, hängen daran wiederum ein DatasetProvider und daran halt die ClientDataSets.
Und beim Programmstart werden diese dann eine nach der anderen mit "Open" geöffnet.
Aber diese lange Wartezeit kann doch nicht normal sein, oder?
|
|
Tower 
      
Beiträge: 99
|
Verfasst: Mi 12.03.03 13:42
Kleiner Zusatz:
Für mich hab ich das Problem jetzt gelöst: Im SQLDataSet stand jeweils "GetMetaData" auf True. Bei mir kein Problem, weil ich das nicht brauche. Nach Umstellen auf "False" geht es ratz-fatz.
Aber prinzipiell interessiert es mich schon, falls das jemand weiß: Kann man die Sache auch mit aktiviertem "GetMetaData" nicht schneller machen? So finde ich das ziemlich unpraktikabel...
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Mi 12.03.03 14:28
Hi..
bin mir nicht ganz sicher, aber kann man das nicht auch durch Hinzufügen von "Indizes" beschleunigen?
Bei mir hat schon die Erstellung eines Index auf nur eine Datenfeld gerade bei Suchvorgängen eine enorme Beschleunigung erwirkt, ob das auch beim Öffnen der Fall ist, kann ich aber nicht mit Bestimmtheit sagen....
mfg
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 12.03.03 14:34
Tower hat folgendes geschrieben: | Hallo!
Ich will mittels dbExpress-Komponenten auf Interbase-Tabellen zugreifen. Klappt auch fein, nur das Öffnen der entsprechenden ClientDataSets dauert unheimlich lange!
(ca. 4-5 Sekunden, sprich: wenn ich sechs Tabellen beim Programmstart öffne, warte ich 'ne halbe Minute...!)
|
Ziehst Du denn mit Deinem ClientDataSet die komplette Datenbank? Denn dann könnte ich mir das vorstellen. Machst Du das in einem Netzwerk? Wenn ja, schau Dir mal den Net-Traffic an.
Wenn Du halt noch die Meta-Daten ziehst, dann wird woohl alles gezogen, also auch DB-spezifische Systemtabellen, User-Tables usw, da kann das je nach Größe der Datenbank schon lange dauern, wenn auch ALLE Daten gezogen werden.
Gruß
|
|
Tower 
      
Beiträge: 99
|
Verfasst: Mi 12.03.03 14:47
Mit einem sqlDataSet (nur das wird schnell oder langsam geöffnet, habe ich inzwischen festgestellt, das ClientDataSet darunter hat dafür kaum Bedeutung) greife ich jeweils auf eine Tabelle zu (CommandType auf "ctTable"; CommandText auf den jeweiligen Tabellennamen).
Hmm... insofern schätze ich schon, dass nur die Metadaten mitgezogen werden, die den Table betreffen... und wohl auch alle betreffenden Systemmetadaten. SO viel sollte das nicht sein, denke ich...
Aber man merkt es mir vielleicht an: Hier spekuliere ich nur noch. 
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Mi 12.03.03 15:05
aber wie sieht das statement aus, welches du im sqldataset eingetragen hast. Warum nimmst du nicht die interbaseExpress (IBX) Kompos? Die sind glaub ich für interbase optimierter. (komisches wort)
Wenn du sowas wie select * from Table machst, dann werden meistens die kompletten daten rübergezogen und das kann dauern
--edit
habe folgendes in der hilfe zum command type gefunden. das erklärt dann die dauer...
Zitat: | ctTable Der Name einer Tabelle auf dem Datenbankserver. Die SQL-Datenmenge generiert automatisch eine SELECT-Anweisung, die alle Datensätze in dieser Tabelle über alle Felder abruft. |
Gruß
Ken
|
|
Tower 
      
Beiträge: 99
|
Verfasst: Mi 12.03.03 17:33
Ich möchte das Projekt gleich möglichst offen programieren, so dass es zB nicht auf Interbase angewiesen ist, daher keine IBX.
Und irgendeine Art Statement muss man doch bei einem SQLDataSet gar nicht eintragen, wenn man es als Table benutzt? Wie gesagt: CommandType=ctTable und CommandText ist auf den Table gesetzt.
Die Daten SOLLEN übrigens alle geladen werden - so groß sind diese Tables nämlich gar nicht. Von daher wäre ein "select * from" auch kein großes Problem - und ich denke auch, dass genau dieses Select-Statement im Moment ausgeführt wird...
Ich glaube auch deshalb nicht, dass das die Dauer erklärt, weil das ganze ja ordentlich schnell funktioniert, wenn GetMetaData auf False steht...
|
|
|