[Delphi] TClientDataSet schrijft records verkeerd

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13:23

Tomatoman

Fulltime prutser

Topicstarter
In een applicatie gebruik ik een TClientDataSet volgens het briefcase model. Bij het starten van de applicatie wordt de dataset gevuld met een aantal records. Die records kunnen gewijzigd worden, maar niet verwijderd of toegevoegd. Tot dusver werkt alles prima.

Dan sla ik de inhoud van de TClientDataSet op in een XML-bestand en daar gebeurt iets vreemds. Als ik 10 records heb en ik heb alleen de records 2 en 4 bewerkt (Edit en Post), worden de bewerkte records achter alle andere records weggeschreven, dus niet op hun oude plaats. Schrijfvolgorde in het XML-bestand is:
1 3 5 6 7 8 9 10 3 5

Als ik nu de records teruglees uit het bestand, staan ze in de verkeerde volgorde. En dat wil ik niet! :( Het inlezen doe ik zoals gebruikelijk met ClientDataSet.LoadFromFile.

Hoe kan ik de records weer in de normale volgorde krijgen, dus gewoon 1 2 3 4 ... 10?

Een goede grap mag vrienden kosten.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13:23

Tomatoman

Fulltime prutser

Topicstarter
[Edit] Oeps, op 'quote dit bericht' gedrukt i.p.v. 'wijzig dit bericht'.

Een goede grap mag vrienden kosten.


Verwijderd

Misschien een beetje omslachting, maar als je gewoon alle records edit en post, gaat het dan wel goed?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

Op maandag 29 juli 2002 01:03 schreef tomatoman het volgende:
In een applicatie gebruik ik een TClientDataSet volgens het briefcase model. Bij het starten van de applicatie wordt de dataset gevuld met een aantal records. Die records kunnen gewijzigd worden, maar niet verwijderd of toegevoegd. Tot dusver werkt alles prima.

Dan sla ik de inhoud van de TClientDataSet op in een XML-bestand en daar gebeurt iets vreemds. Als ik 10 records heb en ik heb alleen de records 2 en 4 bewerkt (Edit en Post), worden de bewerkte records achter alle andere records weggeschreven, dus niet op hun oude plaats. Schrijfvolgorde in het XML-bestand is:
1 3 5 6 7 8 9 10 3 5

Als ik nu de records teruglees uit het bestand, staan ze in de verkeerde volgorde. En dat wil ik niet! :( Het inlezen doe ik zoals gebruikelijk met ClientDataSet.LoadFromFile.

Hoe kan ik de records weer in de normale volgorde krijgen, dus gewoon 1 2 3 4 ... 10?
Je moet er nooit (en dan bedoel ik ook nooit) van een bepaalde volgorde uitgaan als je iets uit een DB haalt, daar is ORDER BY voor uitgevonden :)
En als je de key zet van je client data-set, zal deze automatisch gaan sorteren op die (primary)key.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Wupsje
  • Registratie: Januari 2001
  • Laatst online: 13-11-2024
Zal wel te maken mee hebben dat 'ie een stream gebruikt en vergeet de position := 0 te doen.

  • Kool
  • Registratie: September 1999
  • Niet online
Op maandag 29 juli 2002 09:05 schreef Wupsje het volgende:
Zal wel te maken mee hebben dat 'ie een stream gebruikt en vergeet de position := 0 te doen.
Helemaal niet. Delphi slaat die handle gewoon zo efficient mogelijk op, en hij interesseert zich totaal niet om de volgorde waarin de records komen te staan, zoals ieder DBMS. Creepy heeft het juiste antwoord al gegeven.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13:23

Tomatoman

Fulltime prutser

Topicstarter
Na een hoop geklooi ben ik erachter gekomen dat eerst MergeChangeLog en dan pas SaveToFile het probleem oplost. Dan worden alle wijzigingen in de records wel doorgevoerd, maar blijft de recordvolgorde ongewijzigd.

Een goede grap mag vrienden kosten.

Pagina: 1