Edytowanie danych w pliku .xml poprzez clientdataset.

Odpowiedz Nowy wątek
2014-12-14 18:49
0

Koledzy

Niby prosta rzecz, a nie mogę sobie z nią poradzić.
Mam plik .xml z zapisanymi w nim danymi.

Dane dodaję do niego za pomocą komponentu clientdataset.

Dodaje je tak:

clientdataset1.active:=true;
clientdataset1.Append;
 
clientdataset1.fields[1].asstring:=cos_tam;
 
clientdataset1.post;
clientdataset1.active:=false;

Wszystko ładnie się dodaje, jak chcę usunąć to wybieram numer rekordu i usuwam poprzez clientdataset1.delete i wszystko się pięknie usuwa.

Problem pojawia się jak chcę edytować jakiś rekord.
Robię to tak:

clientdataset1.filename:=nazwapliku_xml;
clientdataset1.Open;
clientdataset1.recno:=1;
 
clientdataset1.Edit;
clientdataset1.fields[1].asstring:=clientdataset1.fields[1].asstring+'*';
clientdataset1.post;
 
clientdataset1.Close;

Edycja się dokonuje, ale zedytowany rekord z pozycji 1 jest automatycznie przenoszony na ostatnią pozycję. Jakim cudem tak się dzieje?

Jak po clientdataset1.post dodam clientdataset1.refresh to pojawia mi się komunikat: "must apply updates before refreshing data", ale edycja też się dokonuje, z tym że tak jak w pierwszym przypadku rekord zostaje przeniesiony na koniec tabeli. Czy da się jakoś zapobiec przenoszeniu rekordu na koniec po edycji?
A KONKRETNEJ odpowiedzi (czyli dopasowanej do mojego przypadku) na komunikat "must apply..." w internecie nie mogę znaleźć za czorta jasnego. Any help?
Delphi 2007.

Zmień tytuł wątku na sensownie opisujący problem, albo wątek zostanie umieszczony w Koszu; - furious programming 2014-12-14 18:59

Pozostało 580 znaków

2014-12-14 21:41
0

Zapobiec pewnie nie ale możesz wrócić do tego rekordu poprzez użycie funkcji locate.

var
  id: integer;
begin
  id := clientdataset.fieldbyname('identyfikator').asInteger;
  ...  //twoje operacje
  clientdataset.locate('identyfikator',id,[]);
end;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0