[Delphi5] Performanceprobleme mit local Interbase

Hai Ihr Wissenden,

ich habe eine Anwendung in Arbeit, die schon beim Testen unheimlich langsam ist. Ich benutze TTables und hauptsächlich TQueries. Tables werden nicht gefiltert, sondern die benötigten Datensätze per locate ermittelt, in einigen Tabellen habe ich Lookup-Felder definiert. Bei den Queries benutze ich kein „Select * …“,sondern gebe explizit die Spalten an. In einigen Fällen muß ich z.B. in sechs Tabellen nacheinander Datensätze schreiben oder löschen. Das ganze dauert so lange, daß ich mir in der Zwischenzeit einen Kaffee holen kann und das obwohl ich nur wenige Daten habe. Wenn das System mal im Einsatz sein sollte, schlafen dem Benutzer die Füße ein. Das kann es doch nicht sein. An was kann das denn liegen???

Wisst Ihr Rat???

Delphi genervte Grüße

Silvia

Hai Silvia, wie gehts??

Allo, wie greifst Du auf die IB zu, per BDE, IBX, IBObjects? Und: welche Version von IB nimmst Du (5.x oder 6.x)?

Die TTable ist eigentlich nicht geeignet um auf einen SQL-Server zuzugreifen, da mit einer TTable die komplette Tabelle zum Client übertragen wird.
Besser ist es, mit speziell auf den SQL-Server abgestimmten Kompos zuzugreifen, um gute Performance zu erhalten.

Grüße
Wolfgang

Hai Silvia, wie gehts??

Hallo Wolfgang,

Du wirst mich anscheinend nicht mehr los :wink:

Allo, wie greifst Du auf die IB zu, per BDE, IBX, IBObjects?
Und: welche Version von IB nimmst Du (5.x oder 6.x)?

Nun, der Zugriff erfolgt über die BDE und im Einsatz ist IB 5.5.
Ich benutze auch nicht die speziellen IBObjects, sondern die „normalen“ DB_Komponenten. Bitte erzähle mir jetzt nicht, dass ich alles ändern muß…(dann muß ich mich erhängen)

Die TTable ist eigentlich nicht geeignet um auf einen
SQL-Server zuzugreifen, da mit einer TTable die komplette
Tabelle zum Client übertragen wird.
Besser ist es, mit speziell auf den SQL-Server abgestimmten
Kompos zuzugreifen, um gute Performance zu erhalten.

Gibt’s da Erfahrungswerte oder sogar Empfehlungen???

Grüße
Wolfgang

Ach ja, Du hattest mir vor einiger Zeit, das DB-Buch von M.Ebner empfohlen (hauptsächlich für die Benuzung von Quickreport). Das hat mir sehr geholfen. Aber jetzt bin ich mal wieder an einem Punkt angelangt, wo gar nichts mehr geht. Ich soll einen Report erstellen, der mehrere Master-Detail-Beziehungen hat. Tja, wie sag’ ichs meinem Kinde!! Gibt es irgendwo eine gescheite Doku???

Viele Grüße

Silvia

Du wirst mich anscheinend nicht mehr los :wink:

Hab ich schon immer gewußt :smile:)

Nun, der Zugriff erfolgt über die BDE und im Einsatz ist IB
5.5.
Ich benutze auch nicht die speziellen IBObjects, sondern die
„normalen“ DB_Komponenten. Bitte erzähle mir jetzt nicht, dass
ich alles ändern muß…(dann muß ich mich erhängen)

naja, was soll ich jetzt dazu sagen… Wenn Du das Buch von Michael Ebner zur Hand hast, schau Dir mal die Seite 575/576 an. Aber bedenke, daß das Buch 2000 rausgekommen ist. Im letzten Jahr kam jeden Monat mind. 1 Update für die IBX.
Schau Dich auch mal auf

http://www.entwickler-forum.de/[email protected]

um, speziell das Posting

http://www.entwickler-forum.de/[email protected]

Ach ja, Du hattest mir vor einiger Zeit, das DB-Buch von
M.Ebner empfohlen (hauptsächlich für die Benuzung von
Quickreport). Das hat mir sehr geholfen. Aber jetzt bin ich
mal wieder an einem Punkt angelangt, wo gar nichts mehr geht.
Ich soll einen Report erstellen, der mehrere
Master-Detail-Beziehungen hat. Tja, wie sag’ ichs meinem
Kinde!! Gibt es irgendwo eine gescheite Doku???

Was für Monster-Reports erstellt Ihr denn??? Also, ein Buch kenne ich nicht, aber vielleicht gibts auf der HP von QuickReport was:
http://195.12.232.172/index00.html

Viel Glück…

Wolfgang

Links defekt…
Irgendwie sind die Links zerschossen…

Geht auf http://www.entwickler-forum.de auf das Brett mit Interbase und laß nach BDE suchen. Da kommen jede Menge Links. Im Artikel

Massiver Performanceverlust beim Übergang von Paradox nach Interbase

zu finden auf der 2. Suchseite, gibts die Infos…

Wolfgang

Hallo Wolfgang!

Du bist mal wieder schnell wie der Wind mit Deinen Antworten!!

Tja, die Links sind wunderbar, aber auch etwas frustrierend für mich. Naja, ich werde mal sehen, was ich machen kann…

Aber wo ich schon am abnerven bin, habe ich noch ein klitzekleines Problemchen, dessen Lösung Dir bestimmt keine Schwierigkeiten bereiten dürfte:

ich habe eine MDI-Anwendung und benötige ein Popup-Fenster. Der Grund ist, dass ich einen Datensatz angelegt habe und dem User die Möglichkeit geben möchte, die Daten eventuell zu korrigieren. Es wird also eine Prozedur durchlaufen, welche den „Insert“ abarbeitet und danach sollte das Fenster erscheinen. Das Problem ist nun, daß die Prozedur erst vollständig abgearbeitet wird und danach das Fenster angezeigt wird. Das ist nicht korrekt, außerdem steht dann der Datenstatzzeiger nicht mehr auf dem richtigen Datensatz. Das Abarbeiten der Prozedur müßte so lange angehalten werden, bis der User das neue Fenster samt Daten gesehen hat und dann einen Button geklickt hat. Eine Lösung wäre natürlich ein modales Formular, das ist natürlich nicht möglich dank MDI.

Grüße vom Abgrund des Wahnsinns sendet

Silvia

Aber wo ich schon am abnerven bin, habe ich noch ein
klitzekleines Problemchen, dessen Lösung Dir bestimmt keine
Schwierigkeiten bereiten dürfte:

Was sind Schwierigkeiten?? :wink:)

ich habe eine MDI-Anwendung und benötige ein Popup-Fenster.
Der Grund ist, dass ich einen Datensatz angelegt habe und dem
User die Möglichkeit geben möchte, die Daten eventuell zu
korrigieren. Es wird also eine Prozedur durchlaufen, welche
den „Insert“ abarbeitet und danach sollte das Fenster
erscheinen. Das Problem ist nun, daß die Prozedur erst
vollständig abgearbeitet wird und danach das Fenster angezeigt
wird.

Wie jetzt?? Soll der Insert (also eigentlich der Post) gemacht werden oder soll der User vorher nochmal korrigieren?

Eine Lösung wäre natürlich ein
modales Formular, das ist natürlich nicht möglich dank MDI.

-)))) Irgendwann scheint jeder Entwickler an diesem Punkt zu gelangen. Beim mir war es vor ca. 2 Monaten. Meine Lösung: weg von MDI!

Wenn Du’s trotzdem damit machen willst und ich Dich richtig verstanden habe hilft Dir vielleicht das hier weiter:

Der User klickt auf den Button Speichern. Als einzige Anweisung in der OnClickProc steht der Aufruf des PopUp. Dort kann der User dann nochmal korrigieren. Anschließend drückt der nochmal auf Speichern (im PopUp) und das Ding wird mit Post abgeschlossen. Das funzt nur so einfach mit einem selbstgestrickten DBNavigator (also einfach Buttons, die dessen Funktion übernehmen), ich weiß nicht, wie man eine Aktion im DBNavigator abbricht und auf eine eigene Proc umleitet.

Als weitere Alternative bietet sich an, die Post-Procedure komplett ablaufen zu lassen und in das AfterPost Ereignis Deiner Datenkompo den Aufruf des PopUps zu erledigen. Den falschen Zeigerstand mußt Du dann eben mit einem Locate o.ä. wieder richtigstellen.
Also vor dem Post die ID merken, Post durchführen. Mit dem AfterPost wird das PopUp aufgerufen diesem die ID übergeben, Datensatz suchen und in den Edit-Modus gehen.

Hoffe Dich nicht vollständig verwirrt zu haben!

Wolfgang

Was sind Schwierigkeiten?? :wink:)

Nanana, junger Mann, nun werden Sie mal nicht wunderlich. Tsts, so ist die Jugend! *verwundertdenkopfschüttel* :wink:

Spaß bei Seite!

-)))) Irgendwann scheint jeder Entwickler an diesem Punkt zu gelangen. Beim mir war es vor ca. 2 Monaten. Meine Lösung: weg von MDI!

Wem sagst Du das. Der Kram kommt mir nicht mehr in die Anwendung!!!

Als weitere Alternative bietet sich an, die Post-Procedure
komplett ablaufen zu lassen und in das AfterPost Ereignis
Deiner Datenkompo den Aufruf des PopUps zu erledigen. Den
falschen Zeigerstand mußt Du dann eben mit einem Locate o.ä.
wieder richtigstellen.
Also vor dem Post die ID merken, Post durchführen. Mit dem
AfterPost wird das PopUp aufgerufen diesem die ID übergeben,
Datensatz suchen und in den Edit-Modus gehen.

Tja, das klingt alles ganz gut.Ist aber immer noch nicht so das Wahre. Ich muß mal noch eine Nacht darüber grübeln. Vielleicht kommt die Erleuchtung im Schlaf. höhö

Hoffe Dich nicht vollständig verwirrt zu haben!

Das ist Dir sehr gut gelungen. Aus diesem Grund begebe ich mich in meinen wohlverdienten Feierabend!!! :smile:))))

Herzlichen Dank und liebe Grüße

Silvia