Avatar billede Greenland Nybegynder
23. januar 2010 - 17:30 Der er 8 kommentarer og
1 løsning

TClientDataset - database i memory

Hej,
Er der nogen her på eksperten der kan være mig behjælpelig med at select´e data i en database som kun kører i memory. Dvs. ingen underliggende fil database !

Jeg skal anvende det til at man inde på min hjemmeside kan downloade et program som kun skal køre som demo. Når programmet lukkes ned, er data´ene også væk.

Jeg har tænkt på at bruge et tClientDataset, men jer er ikke sikker på om jeg kan anvende det på samme måde som hvis der lå en rigtig database under mit program.

Almindeligvis bruger jeg en database komponent på mit datamodul, og så knytter jeg tquery´s. til den. tDatabase peges så på den rigtige database fx via odbc, eller vha connectionstrings

Det jeg vil opnå er at slippe for at ændre hele mit program men blot få database komponenten at pege på en database som kører i memory. Når kunden har købt mit software, så får han en ny exe fil som peger på en rigtig database !


Jeg fandt dette på nettet vedr. clientdataset:

table := TClientDataset.Create(Application);
table.FieldDefs.Add('ID', ftInteger, 0, False);
table.FieldDefs.Add('Status', ftString, 10, False);
table.FieldDefs.Add('Created', ftDate, 0, False);
table.FieldDefs.Add('Volume', ftFloat, 0, False);

table.CreateDataset
table.Open

for i := 1 to 100 do
  begin
    table.Append;
    table.FieldByName('ID').AsInteger := i;
    table.FieldByName('Status').AsString := 'Code'+IntToStr(i);
    table.FieldByName('Created').AsDateTime := Date();
    table.FieldByName('Volume').AsFloat := Random(10000);
    table.Post;
  end;


Ovenstående ser ud som en mulig løsning, men hvordan knytter jeg en tquery til det, og dermed kan køre en almindelig query dvs. sql.add('select * from "hvilken tabel ????"');
Jeg kan ikke se nogen tabel at selecte i !

Undskyld mit lange spørgsmål, håber det er forståeligt !

mvh

Greenland
Avatar billede vallemanden Nybegynder
23. januar 2010 - 17:41 #1
Avatar billede vallemanden Nybegynder
23. januar 2010 - 19:31 #2
select * from hvilken table

vil jeg mene da table := TClientDataset.Create(Application);
Avatar billede vallemanden Nybegynder
23. januar 2010 - 19:31 #3
hov
select * from table
Avatar billede arne_v Ekspert
23. januar 2010 - 21:25 #4
MySQL har en MEMORY storage engine. Hvis MySQL er en mulighed, så ville den have de ønskede egenskaber og være meget nemme at ændre ved at ændre storage engin etil MyISAM eller InnoDB.
Avatar billede Greenland Nybegynder
23. januar 2010 - 22:44 #5
Tak for hurtig response:

vallemanden:
Ser spændende ud med den db du linker til, skal til at teste den senere.

table := TClientDataset.Create(Application);
er ikke en tabel, men et datasæt, og kan ikke rigtig se hvor jeg kan angive mine tabeller. fx vil jeg kunne sige create table test osv lige som i en almindelig database

arne_v
Jeg bruger almindeligvis mysql som underliggende database, og har også loadet dem ind i memory vha
Sql.Add('CREATE TABLE LAGER_MEM ENGINE=MEMORY MAX_ROWS='+inttostr(LAGER_MEM_SIZE));
   
og så Select * From Lager_MEM

... og det funker meget godt, og performer særdeles godt

Men kan jeg bruge mysql uden den sædvanlige mysql installation, og blot evt.kopiere de nødvendige mysql filer ind på kundens pc, for derefter forholdsvis nemt få det hele op at spille, uden den store installation. Er det evt. muligt at mysql har en 'silent install' med et forholdsvis lille foot-print

mvh

Greenland
Avatar billede arne_v Ekspert
23. januar 2010 - 22:48 #6
MySQL kan installeres silent.

En af flere mulige måder er beskrevet her:
  http://lstigile.wordpress.com/2009/11/02/silent-install-instructions/

Derudover hævdes det at MySQL kan køre embedded. Jeg har dog aldrig hørt om nogen som faktisk har gjordt det med gratis MySQL kode (de sælger en version klar til embedded brug).
Avatar billede Greenland Nybegynder
24. januar 2010 - 01:32 #7
Genialt, smid et svar arne_v
Avatar billede arne_v Ekspert
24. januar 2010 - 02:15 #8
ok
Avatar billede arne_v Ekspert
24. januar 2010 - 02:16 #9
ok
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