Avatar billede vint Nybegynder
26. november 2006 - 18:15 Der er 11 kommentarer og
1 løsning

Gemme en liste - uden databaser

Hej.

Jeg har indtil videre ikke gjort brug af databaser for at holde det så simpelt som muligt, når andre skal installere og bruge det.

Men er det overhovedet muligt at gemme en liste med 3 kolonner uden brug af databaser?

Fx

fornavn efternavn medlemsnummer
-------------------------------
Hans    Jensen    1
Maren  Ipsen    2
osv.

Jeg skal ikke bruge det til avanceret brug, hvorfor jeg har undladt databaser.

Jeg skal udelukkende bruge det til at vise en medlemsliste og slette gamle og oprette nye navne´/ numre.
Avatar billede kroning Nybegynder
26. november 2006 - 18:25 #1
Hvis det ikke er for mange så gem det som en ini fil så kan du bruge TInifile til at indlæse med:

[1]
Navn=Hans Jensen
Medlemsnr=1

[2]
Navn=Maren Ipsen
Medlemsnr=2

De enkelte gruppe navne [1] og [2] angiver så også medlemsnummeret men for at gøre det nemmere at indlæse så er nummeret også med som en værdi.

Eller gem det som en semikolon sep. fil og brug TStringList:

"Hans Jensen";1
"Maren Ipsen";2
Avatar billede vint Nybegynder
26. november 2006 - 19:03 #2
Hej Kroning.

Tak for dit bidrag.

Smid et svar, og du bliver belønnet. ;o)
Avatar billede kroning Nybegynder
26. november 2006 - 19:10 #3
Vent lidt, måske har andre en bedre løsning. Der er ikke så mange der skriver i weekenden så vent evt. og se til i morgen aften.
Avatar billede martinlind Nybegynder
27. november 2006 - 10:58 #4
Du kan også Bruge et TClientDataset og lave det gamme i en fladfil, som enten kan være binær eller XML
Avatar billede hrc Mester
27. november 2006 - 12:17 #5
Et TClientDataSet er en god løsning, men fordrer man bruger XML - og du vil jo gerne holde det simpelt. Den simpleste løsning er nok at bruge TStringLists med eksempelvis semikolon som separator. Hvis du kigger på komponenten så har den muligheden for at reagere på " og ; for hhv. strenge og feltadskildelse.

Derfor kan du nok brygge noget lignende sammen der vil kunne virke:

var
  i, j : integer;
  Lines : TStringList;
  Fields : TStringList;
  Navn, Adresse ... : string;
begin
  Lines := TStringList.Create;
  Fields := TStringList.Create;
  try
    Fields.QuoteChar := '"';
    Fields.Delimitor := ';';
   
    Lines.LoadFromFile('data.txt');
    for i := 0 to Lines.Count - 1 do
    begin
      Fields.CommaText := Lines[i];
      Fields.DelimitedText := Lines[i]; // eller denne ??
      for j := 0 to Fields.Count - 1 do
        case j of
          0 : Navn := Fields[j];
          1 : Adresse := Fields[j]
          ...
        end;

      // Lav et eller andet smart her med de data der var på linjen.
    end;
  finally
    Fields.Free;
    Lines.Free;
  end;
end;
Avatar billede vint Nybegynder
27. november 2006 - 12:44 #6
Hej og tak for dit svar.

Jeg vil meget gerne bruge XML. Det er egentlig kun et plus, hvis jeg kan få lidt hjælp til XML-løsningen i stedet for.

Det med at holde det simpelt, det er mere således, at jeg gerne vil undgå at skulle installere noget database-halløj eller BDE osv for at få det til at fungere.
Avatar billede js_delphi Nybegynder
27. november 2006 - 13:42 #7
Jeg har aldrig forstået, hvorfor folk er så vilde med at bruge databaser i simple applikationer, hvor en StringList kan gøre arbejdet ganske overskueligt.

Jeg elsker at bruge simple metoder, hvor man virkelig ved, hvad der sker, f.eks.:

SL := TStringList.Create;
Sl.Add('Fornavn' + ';' + 'Efternavn' + ';' + 'Medlemsnummer');
SL.SaveToFile(Edit1.Text + '\' + Edit9.Text + '-' + Edit4.Text + '.csv');
Sl.Clear;
SL.Free;

Det virker hver gang, men ser selvfølgelig ikke så fancy ud som en bunke database kommandoer.
Avatar billede js_delphi Nybegynder
27. november 2006 - 13:52 #8
Som du nok har regnet ud, genererer linien
SL.SaveToFile(Edit1.Text + '\' + Edit9.Text + '-' + Edit4.Text + '.csv');
en kommasepareret fil, som enhver computer med Excel, Notepad ol. kan åbne.

Send filen til din ven i Indien, og han kan med et doppeltklik lige tjekke, hvilke medlemmer I har i jeres klub!

Derudover bliver du med garanti fri for at stille spørgsmål som:
"jeg får fejlen "cannot connect to ADO"" osv.
her på Eksperten...
Avatar billede martinlind Nybegynder
27. november 2006 - 14:41 #9
Fordi det er meget hurtige at lave kode til, og fordi der er en DBGrid ovs. du så kan bruge.

Du smidder et TClientDateSet på din form Opretter det felter du har brugfor og skriver MyDataset.SaveToFile('MyData.xml',<xml>);
kan ikke lige huske hvad XML-typen hedder nr. 2 parameter, men det kan du se i hjælpen
10000 gange hurtigere og "fiksere", det der med at opfinde den dybe, hver gang det er lidt for indeffektivt :)
Avatar billede martinlind Nybegynder
27. november 2006 - 14:42 #10
hvis du bruger TClientDataset som beskrevet får du EN exe uden behov for andet.
Avatar billede hrc Mester
28. november 2006 - 10:39 #11
TClientDataSet er en god løsning. Et alternativ er at lave et XML-skema og køre den gennem "XML data binding" i Delphi. Herved autogenereres en unit til XML-data, der lige præcis opfylder skemaet du har fodret den med. Det er rigtigt smart. Skemaet kan du lave med XmlSpy's home edition.

I D2006) er metoden <ctrl-alt-p> for at vise "tool palette" , tryk F12 for at skifte til pascal-koden. Nu skulle du se gruppen "Delphi Projects | XML". Tryk på knappen og eksperten starter.
Avatar billede vint Nybegynder
03. december 2006 - 15:15 #12
Hej Martin.

Jeg er ved at forsøge at lave noget med en TClientDataset, som skal gemme i XML-format.

Jeg har puttet en TClientDataSet på min form, kaldt den dsMedlemmer. Jeg har oprettet to felter, Medlemsnr og navn og skrevet følgende "test" kode

Procedure IndsaetFelt;
begin
  dsMedlemmer.Active:= true;
  dsMedlemmer.Insert;
  dsMedlemmerMedlemsnr.Value:= '1234';
  dsMedlemmerNavn.Value:= 'testmedlem';
  dmData.dsKunder.UpdateRecord;
  dmData.dsKunder.Active:= false;
  dmData.dsKunder.SaveToFile('MyData.xml');
end;

Men jeg får fejl om, at der ikke er nogen tilhørende dataprovider.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester