Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Mi 03.03.10 17:21 
Hallo,

ich greife aus meinem Programm auf Tabellen eines MS SQL-Servers zu. Dazu öffne ich im Form1.create die entsprechenden Tabellen (z.B. Form1.Tabelle1.open), so daß ich später an den Stellen, an denen ich sie brauche z.B. unmittelbar lesen kann.
Nach nunmehr einigen Jahren sind die Tabellen teilweise auf ca. 100 MB angewachsen (das ist ja eigentlich nicht viel) und der Öffnungsprozess (Zeitraum vom Starten des Icons bis zum Erscheinen der Form) dauert inzwischen bis zu 50 Sekunden in einem schnellen Gigabyte LAN.
Das Ganze soll nun auch noch über DSL passieren, dabei entstehen für die Anmeldung bei der Datenbank Zeiten von ca. 40 Minuten, das ist nicht akzeptabel.
Offensichtlich hängt die Öffnungsdauer von der Größe der Tabelle einer Datenbank ab, dabei möchte ich an dieser Stelle überhaupt keine Inhalte wissen, sondern nur die Verbindung mit der Datenbank herstellen und "als Freund behandelt werden".
Wenn ich statt Tabelle.open sage Tabelle.Active ist das kein sichtlicher (zeitlicher) Unterschied.
Steht die Verbindung, dann ist der weitere Zugriff akzeptabel.

Kann mir jemand einen Hinweis geben, wie man einen zügigen Zugriff auf einen SQL-Server (über DSL, ca. 4000) herstellen kann?

freundliche Grüsse
ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 03.03.10 17:47 
AdoConnection.Connected := true;

oder

Select * from tabelle where 1=0
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Mi 03.03.10 18:25 
Hallo Thomas,

Danke für den Hinweis, kann ich leider erst morgen testen.

Gruß ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Do 04.03.10 12:33 
klappt leider noch nicht. Wenn ich mit Form1.ADOConnection1.connected die Verbindung herstelle kommt zwar keine Fehlermeldung, aber die Tabellen sind noch nicht für Zugriffe geöffnet, d.h. ich muß die Tabelle vor einem Zugriff mit ADOTable1.open oder mit ADOTable1.Active = True öffnen und habe dann das Zeitproblem, daß offensichtlich alle Daten der Tabelle vom SQL-Server an den Client übertragen werden, obwohl ich vielleicht nur einen Datensatz anhängen will.
Aufgrund des Schnittstellenmonitors und der angegebenen Transferrate habe ich die ausgetauschte Datenmenge beim Öffnen der Tabelle überschlagen und das stimmt in etwa mit der Datenmenge der gesamten Tabelle überein.
Bei der ADOQuery kann ich mit einer WHERE Klausel, die nicht erfüllt werden kann, den Datentransfer minimieren, aber wie mache ich das bei einer ADOTable?

Hat jemand eine Idee?

freundliche Grüße ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Do 04.03.10 14:52 
user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:
[...] wie mache ich das bei einer ADOTable? [...]

Gar nicht.

Man benutzt die ADOTable-Komponenten nicht. Diese sind eigentlich nur für die vereinfachte Migration von BDE-basierten Applikationen eingeführt worden und haben genau den von Dir beobachteten Nachteil.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Do 04.03.10 15:21 
Danke Robert,

das ist ein klares Wort, ich werden die Tabellen durch Querys ersetzen ('ne Menge Arbeit).

Nochmals herzlichen Dank
ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 04.03.10 19:44 
Nimm direkt die Adodatasets, hier sind die Möglichkeiten am unbeschränktesten
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Fr 05.03.10 10:36 
Ich habe inzwischen die Tables durch Querys ersetzt, da mir beide vertraut waren und es war weniger Arbeit als ich befürchtet hatte.
Die ADODatasets hatte ich bis heute noch gar nicht wahrgenommen bzw. wusste nichts damit anzufangen. Aber ich habe sie natürlich jetzt gefunden und ich werde mich damit vertraut machen.
Danke an Dich, Thomas.

Gruss ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!