![]() |
Datenbank: MSSQL • Version: 2012 • Zugriff über: XE2
ClientDataSet MSSQL Tabelle durcheinander
Hallo zusammen,
ich habe ein Problem bei dem zugriff auf meine Datenbank. Folgender Porgrammaufbau: Serververbindung: SQLConnection->SQLDataSet->DataSetProvider->ClientDataSet. Datenzugriff: DBGrid->DataSource->ClientDataSet Ich befülle das DBGrid und möchte dann mit Fehler := ApplyUpdate(-1) die Daten auf den Server laden. Es sind Testweise 800 Zeilen in 8 Spalten. Die Zeilen enthalten aufsteigend Zahlen. Die Daten werden im DB aufsteigend eingetragen. Allerdings werden sie in falscher Reihenfolge auf dem Server abgelegt. Bsp: 1 Eintrag = 1 2 Eintrag = 2 . . . 55 Eintrag = 55 56 Eintrag = 56 57 Eintrag = 103 Die ersten ca. 50 Einträger werden aufsteigend geschrieben. Dann werden sie zufällig vertauscht. Für mich ist bis jetzt noch kein Vertauschungsschema zu erkennen. Hatte schon jemand mal so ein Problem? Danke für die Hilfe Hier mein Code
Code:
procedure TFahrplan.Btn_beschriftenClick(Sender: TObject);
var FP, pos, u: Word; Fahrplan_PM, Fahrplan : String; DBFehler, Absender,Ziel,Alter,Fehler,Info,SP_FK,Field : LongInt; begin Field := 1; Absender := 1; Ziel := 1; Alter:= 1; Fehler:= 1; Info := 1; SP_FK := 1; //mssql.ClientDataSet.Edit; for FP := 1 to StrToInt(Edit1.Text) do begin Fahrplan_PM := ''; case FP of 1..9 : Fahrplan := 'FP0' + IntToStr(FP); 10..100 : Fahrplan := 'FP' + IntToStr(FP); end; for u := 1 to 2 do begin for pos := 1 to 50 do begin case pos of 1..9 : Fahrplan_PM := Fahrplan + '_U' + IntToStr(u) + '_Pos0' + IntToStr(pos); 10..50: Fahrplan_PM := Fahrplan + '_U' + IntToStr(u) + '_Pos' + IntToStr(pos); end; mssql.ClientDataSet.AppendRecord ([ Fahrplan_PM,Fahrplan,0,0,0,0,0,0]); end; end; end; DBFehler := mssql.ClientDataSet.ApplyUpdates(0); end; procedure TFahrplan.FormActivate(Sender: TObject); begin if mssql.ClientDataSet.Active then mssql.ClientDataSet.Close; mssql.SQLDataSet.CommandText := 'select * from Fahrplan'; mssql.ClientDataSet.Open; mssql.ClientDataSet.Active := true; DS_FahrPos.Enabled := true; mssql.FMetaDataProvider := TDBXDataExpressMetaDataProvider.Create; end; |
AW: ClientDataSet MSSQL Tabelle durcheinander
Es gibt in einem RDBMS keine Reihenfolge der Daten. Es handelt sich um eine Daten*menge*, und Mengen haben keine Ordnung. Erst durch explizite Angabe einer Sortierreihenfolge in einem SELECT wird eine willkürliche Reihenfolge hergestellt.
Code:
Der Server liefert dir die Daten also in irgendeiner Reihenfolge. Das ist dann die, in der er die Daten ausgelesen hat. Sogar diese Reihenfolge kann sich zwischenzeitlich ändern, nämlich dann, wenn der Server die Daten umsortiert, um z.B. Löcher, die durch Löschoperationen entstanden sind, zu stopfen.
SELECT * FROM Tabelle ORDER BY <FeldzumSortieren>
Sofern du allerdings eine Identity-Spalte als 'Primary Key' in deinem SQL-Server definiert hast, bin ich mir ziemlich sicher, das der Server dir dann die Daten sortiert nach Erstellungszeitpunkt liefert. Genauergesagt sortiert nach dem PK, aber die Ordnung dieser Spalte entspricht der Ordnung des Erstellungszeitpunktes. |
AW: ClientDataSet MSSQL Tabelle durcheinander
Vilen Dank für die schnelle Antwort.
Sehr gute Erklärung. Hat auf Anhieb funktioniert. Danke Schönen Tag noch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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