Delphi FAQ

Podstawy tworzenia ClientDataSet w obrazkach

Artur Protasewicz

Tworzymy nowy projekt.

001-Create-new-project.png

Wybieramy VCL Forms Application.

002-VCL-Forms-Application.png

Dodajemy do formy komponenty: dwa przyciski, ClientDataSet, DataSource, DBNavigator i DBGrid.

003-Form1-Add-Controls.png

Zmieniamy nazwę ClientDataSet1 na CdsTable1 i nazwę DataSource1 na DsTable1.
Nazwę Button1 zmieniamy na BtnCreate, a własność Caption tego przycisku na Create.
Nazwę Button2 zmieniamy na BtnSave, a własność Caption tego przycisku na Save.

004-Form1-Rename-Controls.png

W Object Inspectorze wiążemy DsTable1 z CdsTable1.

005-Link-ds1-cds1.png

W Object Inspectorze wiążemy DsTable1 z DBNavigator1

006-Link-ds1-navigator1.png

W Object Inspectorze wiążemy DsTable1 z DBGrid1.

007-Link-ds1-grid1.png

Warto zaprojektować strukturę danych przed wprowadzeniem jej do projektu tj. przewidzieć jakie pola będą występować. W tym małym projekcie pozwoli to na używanie danych testowych bez konieczności ich wielokrotnego wprowadzania po zmianie struktury danych. Chociaż tutaj nie będzie mowy o indeksach, jest z nimi podobnie i też warto je przewidzieć wcześniej.

Klikamy prawym przyciskiem myszy na CdsTable1 i wybieramy z menu podręcznego Fields Editor (edytor pól).

009-Fields-editor-menu.png

W Fields Editorze klikamy prawym przyciskiem i wybieramy z menu podręcznego New Field (nowe pole).

010-Fields-editor-new-field.png

Tworząc pole wpisujemy jego nazwę (tu: Id) i wybieramy typ (tu: AutoInc, czyli typ całkowity zwiększający wartość liczby o jeden przy każdym dopisaniu rekordu). Po tym klikamy OK.

011-Fields-editor-Field 1-Autoinc.png

Postępując podobnie tworzymy pole Imie typu String. W przypadku String należy dodatkowo podać maksymalną ilość znaków w stringu (tu: 20).

012-Fields-editor-Field-2-string.png

Jeszcze jedno pole - Wiek typu SmallInt.

013-Fields-editor-Field-3-integer.png

Po wykonaniu powyższych działań powinniśmy otrzymać następującą strukturę.

014-Structure.png

Generujemy zdarzenia przycisków i wpisujemy do nich kod. Zapis odbywa się w formacie XML.
Możliwe są inne formaty: format binarny (dfBinary) i format XML oparty o UTF8 (dfXMLUTF8).

procedure TForm1.BtnCreateClick(Sender: TObject);
begin
  CdsTable1.CreateDataSet;
end;

procedure TForm1.BtnSaveClick(Sender: TObject);
begin
{$IFDEF UNICODE}
  CdsTable1.SaveToFile(GetCurrentDir + '\CdsTable1.XML', dfXML);
{$ELSE}
  CdsTable1.SaveToFile(gsAppPath + 'CdsTable1.XML', dfXML);
{$ENDIF}
end;

Po uruchomieniu programu klikamy przycisk Create. To powoduje utworzenie struktury CdsTable1 w pamięci.

015-Create.png

Save powoduje zapisanie struktury CdsTable1 w pliku XML tak, abyśmy mogli operować na danych.

016-Save.png

Teraz potrzebne są jeszcze przyciski Load i Close. Pierwszy będzie wczytywał CdsTable1 z pliku XML wraz z danymi.
Close zamyka strukturę CdsTable1.

017-Load.png

Po wpisaniu danych klikamy Save.

018-Save-with-data.png

Przed zakończeniem klikamy Close.

019-Close.png

A oto kod wszystkich zdarzeń kliknięcia przycisku.

procedure TForm1.BtnCreateClick(Sender: TObject);
begin
  CdsTable1.CreateDataSet;
end;

procedure TForm1.BtnLoadClick(Sender: TObject);
begin
{$IFDEF UNICODE}
  CdsTable1.LoadFromFile(GetCurrentDir + '\CdsTable1.XML');
{$ELSE}
  CDS.LoadFromFile(gsAppPath + 'CdsTable1.XML');
{$ENDIF}
end;

procedure TForm1.BtnSaveClick(Sender: TObject);
begin
{$IFDEF UNICODE}
  CdsTable1.SaveToFile(GetCurrentDir + '\CdsTable1.XML', dfXML);
{$ELSE}
  CdsTable1.SaveToFile(gsAppPath + 'CdsTable1.XML', dfXML);
{$ENDIF}
end;

procedure TForm1.BtnCloseClick(Sender: TObject);
begin
  CdsTable1.Close;
end;

W trakcie uruchamiania ze środowiska Delphi nasz plik XML powstaje w podfolderze projektu \Win32\Debug.

020-Code-XML.png

A tak wygląda plik XML, który został utworzony, wraz z przykładowymi danymi.

<?xml version="1.0" standalone="yes"?>
<DATAPACKET Version="2.0">
  <METADATA>
    <FIELDS>
      <FIELD attrname="Id" fieldtype="i4" readonly="true" SUBTYPE="Autoinc"/>
      <FIELD attrname="Imie" fieldtype="string" WIDTH="20"/>
      <FIELD attrname="Wiek" fieldtype="i2"/>
    </FIELDS>
    <PARAMS CHANGE_LOG="1 0 4 2 0 4 3 0 4" AUTOINCVALUE="4"/>
  </METADATA>
  <ROWDATA>
    <ROW RowState="4" Id="1" Imie="Tomek" Wiek="26"/>
    <ROW RowState="4" Id="2" Imie="Jacek" Wiek="34"/>
    <ROW RowState="4" Id="3" Imie="Anna" Wiek="31"/>
  </ROWDATA>
</DATAPACKET>
FAQ

0 komentarzy