AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ClientDataSet MSSQL Tabelle durcheinander
Thema durchsuchen
Ansicht
Themen-Optionen

ClientDataSet MSSQL Tabelle durcheinander

Ein Thema von Barthiboy · begonnen am 23. Aug 2012 · letzter Beitrag vom 23. Aug 2012
Antwort Antwort
Barthiboy

Registriert seit: 4. Nov 2011
36 Beiträge
 
#1

ClientDataSet MSSQL Tabelle durcheinander

  Alt 23. Aug 2012, 06:24
Datenbank: MSSQL • Version: 2012 • Zugriff über: XE2
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;
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: ClientDataSet MSSQL Tabelle durcheinander

  Alt 23. Aug 2012, 06:32
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:
SELECT * FROM Tabelle ORDER BY <FeldzumSortieren>
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.

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.
  Mit Zitat antworten Zitat
Barthiboy

Registriert seit: 4. Nov 2011
36 Beiträge
 
#3

AW: ClientDataSet MSSQL Tabelle durcheinander

  Alt 23. Aug 2012, 06:57
Vilen Dank für die schnelle Antwort.
Sehr gute Erklärung.
Hat auf Anhieb funktioniert.
Danke
Schönen Tag noch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz