Avatar billede gipa Nybegynder
24. januar 2001 - 14:21 Der er 8 kommentarer og
4 løsninger

Lille database

Jeg skal lave et liiiillebitte database-program. Der skal kun være en bruger, og tabellen skal kunne indeholde måske 40 poster, med 5 felter i hver post.

Totalt overkill at bruge BDE! Meeeen hvad gør en klog så?
Jeg har tidligere prøvet at forhøre mig, og er blevet hvisket halve sætninger om ADO og records.
Kunne jeg få den fra bunden, tak?
Avatar billede wisen Nybegynder
24. januar 2001 - 14:23 #1
Det kan godt være at det er \"overkill\" af bruge BDE, men det er langt det letteste....
Avatar billede kim_friis Nybegynder
24. januar 2001 - 14:29 #2
Se hvis du har Delphi 5 Enterprise, så kan jeg anbefale at benytte TClientDataSet. Den virker helt fint og med den behøves du kun at distribuere 1 dll fil. (Midas.dll) som du iøvrigt kan placere ved siden af din .exe fil. (Og hvis du kun benytter den til lokale data, så koster det ikke noget at bruges midas).
Alternativt kan du finde diverse TDataSet nedarvninger på Delphi Super Page som kan gemme i mere eller mindre properitære formater.
Avatar billede pellelil Nybegynder
24. januar 2001 - 14:30 #3
Hvilken Delphi har du? Hvis du har en Delphi 5 Enterprise så kan du (sålænge at data bliver på samme maskine), bruge MIDAS (kvit og frit).

Alternativt kan du kigge på RxLib\'s (www.rxlib.com) memory table. Jeg kan ikke umidelbart huske om den har funktioner til at læse fra/skrive til en disk fil (men det mener jeg jo nok den har).

En 3. mulighed kunne være en database som ligger sig direkte ind i din souce. Her har du et link (jeg kender den ikke, jeg ved blot at den findes): http://home.sprynet.com/~rrm/qdb.html

Sidst og ikke mindst sålænge det ikke er flere data det drejer sig om så kan du også vælge at bruge INI-fil eller Registrerings database.
Avatar billede martinlind Nybegynder
24. januar 2001 - 14:58 #4
De flete memorytabler bruger BDE\'ens faciliteter

Jeg vil foreslå at du laver en Record og en TObjectList, så loader du det hele ind i mem. når du starter og gemmer det hele når du lukker nemt hurtigt, og ikke så slemt at kode.

/Martin
Avatar billede pellelil Nybegynder
24. januar 2001 - 15:02 #5
matrinlind> RxLib\'s Memory Table kan sagtens bruges uden du af den grund behøver at installere BDE\'en. Ligeledes kan du sammen med denne (også uden at installere BDE\'en) bruge TDBGrid og TNavigator.
Avatar billede martinlind Nybegynder
24. januar 2001 - 15:06 #6
pellelil >> Muligt jeg kender den ikke jeg ved bare at mange har udnyttet de muligheder der er i BDE\'en til at lave en mem. table.

Men jeg vil nu stadig sige at når behovet ikke er støre så er det hurtigste at bruge en flad fil og en \"record-liste\"

/Martin
Avatar billede gipa Nybegynder
24. januar 2001 - 17:02 #7
Sådan! Seks svar fra fire mennesker på tre kvarter. Jeg er imponeret!

Mht. version, så har jeg Delphi 5 Enterprise.

Wisen> muligt, at det er lettest, men jeg skal også lære at gøre tingene fra bunden. Desuden vil jeg gerne undgå at installere BDE på en maskine for så lille et program...

Kim Friis> TClientDataSet og andre TDataSet er jeg stødt på i Delphis hjælp, men jeg kan ikke helt lure hvad det går ud på. Hvordan starter man fra bunden af? (Jeg er stadig nybegynder, og har endnu kun lavet mine databaser via Database Desktop. Så jeg har ingen ide om hvordan jeg starter fra bunden.)

Pellelil> www.rxlib.com svarer ikke lige nu. Prøver den igen i morgen. INI-fil og registreringsdatabase, hvad går det nærmere ud på?

MartinLind> Record og TObjectList lyder som det jeg har ledt en del efter. Hvordan fungerer det?

Avatar billede gipa Nybegynder
24. januar 2001 - 17:06 #8
Pellelil> Heps! Siden virker igen. Jeg læser...
Avatar billede delphi Nybegynder
25. januar 2001 - 08:40 #9
INI filer (or registrerings database, hvilket fra Delphi samme bolledej) er efter min mening klart vejen frem, hvis behover er så lille som du beskriver.

Mht. hvad en INI fil er, så check dit C:\\Windows (eller C:\\WinNT) directory.  Her finder du en hel stak INI filer, bl.a. Win.INI.

Kort fortalt, så er en INI fil en fil skrevet i ren text, så den kan altså læses med fx. NotePad.  Den er delt op i forskellige sections, der hver indeholder en rækker identifiers, der kan have en værdi, fx:

[Generel]
OPTIONS=1200
LASTUSER=ABC123
REQUESTPASSWORD=0
LASTSCREENCORD=(123,45)
; Dette er en kommentar. Linier der starter med \";\" ignoreres
NumOfParams=4
PARAM_1=1
PARAM_2=2
PARAM_3=3
PARAM_4=4
BoolValue1=0
BoolValue2=TRUE

[ODBC 32 bit Data Sources]
Visual FoxPro-tabeller=Microsoft Visual FoxPro Driver (32-bit)
dBase-filer - Word=Microsoft dBase VFP Driver (*.dbf) (32-bit)

[Visual FoxPro-database]
Driver32=C:\\WINDOWS\\SYSTEM\\VFPODBC.DLL

[dBase-filer - Word]
Driver32=C:\\WINDOWS\\SYSTEM\\VFPODBC.DLL

Den eneste egentlige grænse for INI filer er at de max. må fylde 64KB.
Det skal lige siges, at INI filer egentligt er et lævn fra Win 3.1 og at Microsoft anbefaler, at man benytter registreringsdatabasen til at gemme applications- eller brugerspecifikke oplysninger, bl.a. for at brugeren derved \"får dem med sig\" når han skifter rundt på forskellige pc\'er i et WinNT netværk.

Hvad har det så med Delphi og databaser at gøre?

Jo, Borland har til Delphi leveret en prima lille unit kaldet Inifiles, der indeholder nogle rigtigt gode værktøjer til at arbejde med INI filer.  Som eksempel ser du nedenfor et udsnit fra et program, der henter nogle oplysninger fra ovenstående INI fil.

implementation
Uses
  IniFiles;  // Husk denne.
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
Var
  IniFile : TIniFile;
  aStr    : String;
  t      : Integer;
  ParamNo : Integer;
  Sum    : Integer;
begin
  // This IniFile is in the samme dir as the application.
  IniFile := TIniFile.Create(ExtractFileDir(ParamStr(0)) + \'\\TestIniFile.INI\');
  Try
    aStr := IniFile.ReadString(\'Generel\', \'LASTUSER\', \'***\');
    If aStr=\'***\' Then
      ShowMessage(\'No last user found.\')
    Else
      ShowMessage(\'Du hedder nok \'+aStr);

    Sum := 0;
    ParamNo := IniFile.ReadInteger(\'Generel\', \'NumOfParams\', 0);
    For t := 1 to ParamNo Do
      Sum := Sum + IniFile.ReadInteger(\'Generel\', \'PARAM_\'+IntToStr(t), 0);
    ShowMessage(\'Sum af alle parametre: \'+IntToStr(Sum));
  Finally
    IniFile.Free;
  End;
end;

Delphi har en component (TRegIniFile), der virker på samme måde son TIniFile, dvs. samme procedure navne og paramere mv., bortset fra at dataene hentes/gemmes i registrerings databasen.  Jeg har dog et noget reserveret forhold til at benytte reg-DB\'en, idet:
  - Specielt under WinNT kan brugere have store begrænsninger i
    hvad den pågældende bruger har adgang til at se og gemme.  Dette
    kan betyde, at programmer virker et sted, men ikke et andet.
  - REG-DB\'en bliver så hules stor, hvilket medfører, idet den i et WinNT
    netværk overføres fra server til user ved logon/logoff, at det tager
    længere tid starte/stoppe sin PC.
  - Det er svært at finde data i REGDB\'en , hvis man ikke lige har den
    application der har oprettet de pågældende data.  En INI fil kan bare
    slettes og så er der ryddet op.

Der er masser af oplysninger om brug af inifiles/reg DB\'en i online hjælpen og på nettet, ellers spørg igen.

Peter

Avatar billede kim_friis Nybegynder
25. januar 2001 - 09:49 #10
Du smider en TClientDataset på din form som var det en TTable. Sætter et filnavn op på den og så dobbeltklikker du på den og adder de felter som du har brug for (med type og størrelse osv). Og så højreklikker du på komponenten og siger Create table eller sådan noget. Derefter kobler du en tdatasource op og evt et grid eller hvad du nu har brug for og så er det oppe at køre. Du skal blot lige huske at TClientDataset ikke gemmer dataene nede i filen før at du lukker programmet. Den cacher det nemlig i hukommelsen.
Mit foreslag til dig er at du skal blot gå igang fordi det er ikke så svært og det er især godt til netop dit eksempel.
Avatar billede martinlind Nybegynder
25. januar 2001 - 11:05 #11
Jeg vil foreslå du prøver denne model i stedet for en liste, delphi 5 kører fint med open array\'s
og så får du alle fordelende ved en record og nem fil håndtering


  rMyRec = record
    ID  : Integer;
    Name : String;
    Mere : String;
  end;

var
  MyArray : array of rMyRec;
  F : file of rMyRec;
  buf : rMyRec;

Så gør du bare som du plejer med en fil alså assigFile osv.. read(f,buf) writeF,buf) det virker fint, hvis det skal være småt men godt, og du kan lave lyn hurtig sortering da du jo har det hele i men

/Martin
Avatar billede gipa Nybegynder
30. januar 2001 - 10:26 #12
Jeg har fået en del at gå i gang med. Jeg har printet sindssyge mængder ud fra Delphis hjælp, og læser så hurtigt jeg kan (og har tid til...).

Jeg vender helt sikkert tilbage med flere spørgsmål om samme emne, men indtil videre: Tusind tak for hjælpen!

Rie.
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

IT-JOB

Politiets Efterretningstjeneste

Data engineer til PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior specialister (Datacenter Network) til Forsvarets nye Digitale Backbone

Capgemini Danmark A/S

Client Partner

Politiets Efterretningstjeneste

Centerchef til Center for Applikationer i PET

Netcompany A/S

IT Consultant