Avatar billede clavo Nybegynder
25. september 2000 - 13:53 Der er 10 kommentarer og
1 løsning

Skift Database

Jeg vil gerne kunne skifte aktiv database i runtime. Helt konkret skal brugeren kunne vælge mellem forskellige databaser i menulinien, hvorefter DBGrid og lignende viser data fra den valgte database. Jeg er ved at forsøge med \"Alias\" men det virker kun ved formens create. Jeg har en ide om at jeg skal nedlægge/ free tabellerne og så oprette dem igen med det nye alias. Men måske nogen har en \"smart\" løsning\". Mit program indtil videre ser sådan ud:

*
AParams := TStringList.Create;
AParams.Clear;

s:=InputBox(\'Input Box\', \'Vælg database\', \'Default\');
AParams.Add(\'PATH=\'+s);
Session.ModifyAlias(\'DBAlias\',AParams);
Session.SaveConfigFile;
*
Avatar billede pellelil Nybegynder
25. september 2000 - 15:10 #1
Jeg har tidligere lavet det (der hjemme - så jeg har ikke lige soucen ved hånden) ved hjælp af et DataModule som indeholde en TDataBase til formålet.

Avatar billede sjensen Nybegynder
25. september 2000 - 15:25 #2
Er det forskellige database typer (paradox, Interbase, MS SQL, o.s.v.) du skal skifte mellem eller er det altid den samme ?

Hvis det f.eks. er paradox, og du i runtime vil skifte mellem et sæt tabeller der peges på af alias \"A1\" og et andet sæt tabeller der peges på af alias \"A2\", så er det nok at have f.eks en table, en datasource og en dbgrid på formen. ved at lade dbgrip bruge datasource1 og lade datasource1 bruge table1, kan du nøjes med følgende, hvis du forestiller dig at dbgrid1 viser indholdet af en tabel i Alias A1:

table1.close;
table1.database  := \'A2\';
table1.tablename := \'XXX.DB\'; // XXX skal selvfølgeligt være navnet på din tabel
table1.open;

Dermed skulle dbgrid1 vise indholdet af table XXX der er i alias A2.

Der er ingen grund til at ændre alias. Der er lettere at oprette 2 forskellige og så bare skifte mellem dem.
Avatar billede pellelil Nybegynder
25. september 2000 - 15:27 #3
Ved i stedet at bruge en TDataBase i et DataModule så er der kun EET sted at ændre og det virker på hele applikationen
Avatar billede clavo Nybegynder
25. september 2000 - 15:55 #4
Jeg burde nok have uddybet mit spørgsmål. Brugeren har mulighed for at oprette forskellige databaser (runtime), som han kan arbejde i. Min plan var/er at oprette alias\'er til disse databaser i formcreate evt. ved at læse fra en bruger.ini fil eller lignende. Og så netop gøre som sjensen skriver. Hvor jeg mener det skal være (DataBaseName i stedet for database)

  Table1.close;
  Table1.DataBaseName:=\'A2\';
  Table1.TableName:=\'XXX.DB\';
  Table1.Open;

Men indtil jeg har set pellelil\'s løsning på \"skrift\" kan jeg ikke vurdere, hvem der skal have point.
Avatar billede clavo Nybegynder
25. september 2000 - 15:56 #5
Til pellelil
Kunne du evt. sende mig koden?
jacob.hansen@mail1.stofanet.dk

Jacob
Avatar billede pellelil Nybegynder
25. september 2000 - 15:57 #6
Jeg skal kigge efter den når jeg kommer hjem
Avatar billede pellelil Nybegynder
26. september 2000 - 07:33 #7
clavo> Jeg beklager at du ikke hørte fra mig i går aftes, men jeg havde travlt med andre gøremål. Jeg vil se om jeg ikke kan få kigget på det i aften
Avatar billede pellelil Nybegynder
27. september 2000 - 09:29 #8
Clavo> Jeg har ledt, men tilsyneladende er mit program (hvor I jeg \"lavede det\") blevet slettet.

Måden jeg gjorde det på var (så vidt jeg husker) at jeg lavede et DataModule hvor I jeg placerede et TDataBase component. Det var således dette component der blev brug at de enkelte forms (som \"Usede\" dette datamodule). Tabeller og  querys på de enkelte forms brugte således denne TDatabase some property\'en \"database\" (i stedet for at bruge alias til databasen). Når du således i dit DataModule skifter database så har alle dine tabeller/querys fat i den med det samme (dog skal du muligvis åbne/lukke tabeller/querys før det virker - men dette kan nemt løses ved at lade dit DataModule sende en \"Meddelelse\" som \"fanges\" af dine forms).

Er dette ikke \"svar nok\" (til at du selv kan finde ud af resten) så giv pointene til Sjensen.
Avatar billede clavo Nybegynder
27. september 2000 - 09:59 #9
Pellelil> Tak for dine store anstrengelser. Det lyder rigtig fornuftigt. Jeg vil dog tillade mig at lade spørgsmålet stå åbent lidt endnu for at se om der kunne komme noget kode. Ellers skal du nok få dine point.
Avatar billede pellelil Nybegynder
27. september 2000 - 10:01 #10
Det var da så lidt. Jeg havde håbet at jeg kunne finde source og det genere mig at jeg har lavet det men ikke længer har det / kan finde det. Dog genere det mig ikke nok til at jeg \"gider\" at lave det een gang til, \"bare\" for at demonstrere det :-)
Avatar billede clavo Nybegynder
27. september 2000 - 10:05 #11
Man skal altid huske at gemme sine \"kreationer\" :-)
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