| Autor |
Beitrag |
ShadowThief
      
Beiträge: 278
|
Verfasst: Fr 18.07.03 07:55
wie kann ich in einem TClientDataSet positionieren.
also ich mache z. B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| ClientDataSet.IndexFieldNames := 'id'; ClientDataSet.SetRange([4], [4]);
ClientDataSet.CancelRange; |
so funktioniert es zwar, aber zwischen SetRange und CancelRange ist die Datenmenge bis auf den einen Satz sozusagen ausgeblendet, weg halt.
und das ist für mich ein problem. ich würde lieber etwas in dieser art ausführen
Delphi-Quelltext 1: 2:
| ClientDataSet.IndexFieldNames := 'id'; ClientDataSet.Positionier_mir_mal_auf_folgenden_index([4]); |
hab aber weder bei google-groups, hier, noch in der OH irgendwas gefunden, dass danach aussieht.
vielen dank.
shadow.
Moderiert von Tino: Delphi-Tags hinzugefügt; unnötige Absätze entfernt.
|
|
Neuromancer
      
Beiträge: 42
WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
|
Verfasst: Fr 18.07.03 09:35
Hier findest du ausführliche und sehr kompetente Informationen zum Thema TClientDataSet allgemein.
Und hier zu deinem speziellen Problem.
Gruß
Übrigens: ein TADODataSet kann alles, was ein TClientDataSet auch kann. Nur mit dem einen Unterschied: ADO ist um mehr als das Doppelte schneller.
Zuletzt bearbeitet von Neuromancer am Fr 18.07.03 10:12, insgesamt 1-mal bearbeitet
|
|
ShadowThief 
      
Beiträge: 278
|
Verfasst: Fr 18.07.03 09:42
vielen dank, das was ich suchte ist das hier bdn.borland.com/arti...0,1410,29176,00.html
ClientDataSet.FindNearest.
geil, das hab ich gebraucht, vielen dank.
shadow.
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 21.07.03 14:45
@Neuromancer:
Wieso ist ein AdoDataset schneller?
Immerhin arbeite ich bei einem Clientdataset clientseitig...
Cu,
Udontknow
|
|
Neuromancer
      
Beiträge: 42
WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
|
Verfasst: Mo 21.07.03 14:59
Beide Datasets arbeiten mit ihrer eigenen Client-Cursor-Engine. Die ADO-Engine steht aber unter dem Hut von M$, während TClientDataSet ein Borland-Eigenbau ist.
Und (ausnahmsweise!) hat hier Microsoft mal seine Hausaufgaben gemacht.
Lass dich nicht aufs Glatteis führen, wenn du mit ADO gegen einen SQL-Server arbeitest. Bei den meisten Operationen arbeitet das DataSet hier nämlich genauso auf dem Client (und nicht unmittelbar gegen den Server, wie man zunächst meinen könnte). Einstellen kannst du das mit der CursorLocation.
Wenn du anstatt den Wrappers ADOExpress/dbGo die nativen ADO-Komponenten benutzst und diese früh bindest, dann sieht TClientDataSet sogar noch älter aus.
Gruß
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 21.07.03 15:15
Hmmm, der hauptvorteil von TClientdatasets liegt für micht aber eher darin, daß ich sogar ganz ohne einen DBServer arbeiten kann, und filtern und sortieren kann, wie es mir beliebt, und das alles eben komplett auf Clientseite. Sozusagen eine Desktop-DB-Variante.
Geht das auch mit ADO? Damit habe ich mich noch nicht so sehr beschäftigt.
Cu,
Udontknow
|
|
Neuromancer
      
Beiträge: 42
WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
|
Verfasst: Mo 21.07.03 16:45
| Udontknow hat folgendes geschrieben: | | Geht das auch mit ADO? |
Ja, wie gesagt, das ADODataSet beherrscht alles, was TClientDataSet auch kann (zumindest ist mir nichts anderes bekannt). Bis auf wenige kleine Ausnahmen (speichern als XML-File, hier muss der Weg über SaveToFile genommen werden) ist eigentlich alles identisch.
Man geht also genau den gleichen Weg: persistente Felder erstellen -> DataSet erzeugen usw.
Und auch Nested DataSets stellen mit dem ADODataSet kein Problem dar.
Du brauchst auch für ADO keinen Server/Provider. Der Hauptvorteil des ClientDataSets bleibt auch bei ADO erhalten: Falls du dich irgendwann mal anders entscheidest, und doch eine "echte" Datenbank dahinterhängen willst, dann geht das auch mit ADO.
Gruß
|
|
Neuromancer
      
Beiträge: 42
WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
|
Verfasst: Di 22.07.03 09:56
Vielleicht sollte ich zu dem oberen noch was sagen.
Stell dir vor, du arbeitest mit ADO gegen einen beliebigen SQL-Server und du startest eine Query.
Jetzt liegt es an dir, wie du dein ADO-DataSet konfiguriert hast. Die Standardeinstellung für die CursorLocation ist clUseClient. Öffnest du die Query, dann holt ADO alle Datensätze und legt sie auf dem Client ab. Du arbeitest jetzt quasi auf einer Desktopdatenbank, obwohl du doch eigentlich gegen einen Server arbeitest. Fast alle Operationen, die du jetzt ausführst, wie zum Beispiel .Next, .First, .Last, .FieldByName usw. werden von der so genannten Client-Cursor-Engine übernommen. Erst bei einem .Post wird der Server wieder angesprochen.
Und genau diese Client-Cursor-Engine ist es auch, die ins Spiel kommt, wenn du das ADODataSet als ClientDataSet missbrauchst, die Methodik der Datenmanipulation ist hier nämlich genau die gleiche, außer, dass bei einem .Post dann eben lokal und nicht gegen den Server gespeichert wird.
Käme mal auf einen Versuch an, aber ich denke, dass es genauso gut möglich sein müsste, ein DataSet von einem Server zu laden, um es anschließend lokal auf dem Rechner mit SaveToFile zu speichern. Das wäre natürlich klasse für Notebooks. Du lädst morgens ein paar Daten vom Server (z.B. Kundendaten) aufs Notebook, stiefelst zum Kunden, änderst lokal deine Daten auf dem Notebook, connectest abends wieder auf den Server und spielst die veränderten Daten rüber. Fertig.
Gruß
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 22.07.03 13:40
In der Hinsicht wäre es dann ja wie ein Clientdataset. Ich muss mal schauen, ob sich das mit der Geschwindigkeit tatsächlich so darstellt...
Wir benutzen eben Clientdatasets zwecks Multi-Tier-Entwicklung. Der Zwischenschritt mit dem Appserver ist für das LoadBalancing unabdingbar. Das AdoDataset wird wohl kaum die Möglichkeit haben, sich mit einem RemoteServer (ich spreche hier von der Eigenschaft der Socket Connection) zu verbinden.
Cu,
Udontknow
|
|
Neuromancer
      
Beiträge: 42
WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
|
Verfasst: Di 22.07.03 15:21
Jepp, wäre mal interessant, was du herausfindest.
Ich kann hier lediglich die Messungen spiegeln, die Andreas Kosch in seinem Buch "ADO und Delphi" ermittelt hat. Selbst bin ich noch nicht zum Messen gekommen.
Zeit für das Einfügen und Speichern von 50.000 Datensätzen
Quelltext 1: 2:
| TClientDataSet: Einfügen: 15.630 Ticks, Speichern: 250 Ticks TADODataSet: Einfügen: 6.840 Ticks, Speichern: 1250 Ticks |
In der Größe der resultierenden Datenmenge liegen beide bei ca. 3 MB. ADO genehmigt sich lediglich ca. 50kB mehr
Gruß
|
|
|