04. marts 2004 - 23:32Der er
14 kommentarer og 1 løsning
Databasen som finder sig selv
Databasen som finder sig selv ? Jeg har tit og ofte lavet databaser og nu da ADO er kommet til Delphi 7 syntes jeg det er blevet sjovt , hen ad vejen. Der er dog en ting (måske flere) der meget ofte har ærget mig, Det er at databasen (nu access) skal ligge samme sted, som der hvor man peger på fra begyndelsen af, når/jeg man laver programmet. Det kunne jo være smart hvis brugeren kunne vælge hvor den skulle ligge eller programmet kunne lægge den det sted som var, det bedste for brugeren. Det kunne jo fx være en server brugeren gerne ville lægge den på . PÅ det drev som høre til den bruger fx. Nu er det jo sådan at man i Delphi 7 , når man strater ADO vælger hvor access databasen er og findes, og jeg har set de mange linjer som skriver for at finde ud af det... puh.. Kan det lade sig gøre som jeg omtaler ? Er det kæmpe vanskeligt ?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Hej snowball Ja den viker fin ... næsten... da jeg startet din test.. kunne den ikke finde databasen. Den sti skrev jeg ind. Men den fandt den forsat ikke. Så lukkede jeg ned og startet op, NU fandt den databasen. MEN AK ! da jeg igen lukkede programmet og Delphi helt ! kom den værste af alle fejl : Access viaolation ad adress 03B527B4 (og så videre) en advarsel boks der bliver ved, og atter ved , med at komme og som IKKE kan stoppes andet ved at døde windows helt.. Det måtte jeg så gøre. Måske gjorde jeg noget forkert ?
Ak ja - gamle 'hoveder' som mig begynder at 'associere frit' som det hed i de gamle beskrivelser: Jeg kendte/arbejdede engang sammen med en svensk kvinde, der hed Ingrid. Hendes mand var nogenlunde velbeslået og ville forære hende en dyr bil.Da katalogerne ankom og Ingrid skulle bestemme sig for udstyret blev det alligevel manden for meget: "Du må bestemma dig.Du kan ikke få både soltag og air-condition" havde han sagt.Hvilket jeg heller ikke helt forstod.Og jeg forstår slet ikke hvorfor jeg kommer til at tænke på det i denne her sammenhæng. Nå spøg tilside.Der gælder da de samme regler for muligheden for at vælge "samme bibliotek som programmet" i ADO som for andre typer databaser.Det kom osse bag på mig første gang, men sådan er det altså og jeg kan endda huske jeg opdagede det i forbindelse med et spm. du havde stillet.Hvis du ikke skriver nogen sti, men bare navnet på databasen fungerer det hvis databasen ligger i samme bibliotek som programmet.Brugeren kan jo 'bare' flytte programmet sammen med Databasen ?. Men der er sikkert et par 'lag' til i dit spm. :-)Databasen er jo 'sin egen' - flere programmer kan jo principielt ændre/benytte den.
koden12: Der er klar nok den ikke kunne finde databasen første gang, for den sti der står i ini filen, findes garanteret ikke hos dig, og for at programmet prøver igen, skal man netop først indtaste en anden sti, trykke på "Gem" og genstarte programmet ;)
Mht. den access violation, så ved jeg ikke lige hvordan det lykkedes dig at få sådan en frem, for det kan jeg ikke få den til. Prøv at step'e dig gennem og programmet for at finde ud af på hvilken linie det er det går galt.
Hvis du kan leve med at databasen bare altid skal ligge i samme folder som exe filen af dit program, så kan du som janbb rigtig nok skriver, bare lade være med at skrive den fulde sti til databasen i din ConnectionString.
Jeg tester den lidt senere igen.. Der skal nok arbejdes noget med den, men den ser OK ud.. Tak også fra JanBB og hans historie ??? : ) nå.. Det kan jo tænkes at det der står i ADO dimmer opretteren ?... (hvad det så end den hedder for noget) , at den henvisning der står der skal slettes først ? Lige nu er der knald på. Så vi snakkes..
Meget fixt program snowball: har en version liggende fra et tidl. E-spm, hvor osse 'loadsettings' indgår (måske meget praktisk ? :=) procedure TForm1.LoadSettings; var IniFile : TIniFile; begin IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'settings.ini'); Edit1.Text := IniFile.ReadString('Main','DBPath',DEF_DBPATH); IniFile.Free; If FileExists(Edit1.Text) Then Begin ADOConnection1.Connected := False; ADOConnection1.ConnectionString := DEF_CONN1 + Edit1.Text + DEF_CONN2; ADOConnection1.Connected := True; Label2.Caption := 'Forbundet til databasen'; End Else Begin ADOConnection1.Connected := False; Label2.Caption := 'Ikke forbundet til databasen'; End; end;
koden12: Det eksempel janbb har skrevet gør fuldstændig det samme som det du har hentet fra http://exp.geertsen.dk/dbpath.zip. I det eksempel jeg har lavet til dette spørgsmål, hedder DEF_CONN1 bare DB1 og DEF_CONN2 hedder DB2 :)
Ja, den virker fint men kun hvis der ikke står noget i ini filen i forvejen. Den virker heller ikke hvis den ligger på en server på et delt drev. Kan det sidste lade sig gøre på nogen måde, mon ?
Koden12: Forskellen på snowballs 'gamle' version og den nye - består såvidt jeg kan skønne 'bare' i at man ved at tilknytte en 'knap' til loadsettings-proceduren kan redigere i ini-filen og 'teste' løbende uden at skulle genstarte programmet hver gang, men så meget har jeg heller ikke finlæst det.Jeg tænkte bare du måske ikke havde 'set' at der kunne laves en 'knap' til den - lissom open/close.
Og brug hellere een af dine egne 'små og hyggelige' databaser i stedet for den medfølgende 'testdb', der vistnok muligvis er lidt 'syg' ('listindex out of bounds' meddeles ved listningsforsøg).Men de andre ting tror jeg nok skal lykkes for dig. Har desværre ikke selv 'leget' så meget med ini-filer endnu, men det er da rimelig spændende.Det er godt der er nogle gode eksperter i delphi-afdelingen på E :)
<<<< Det er godt der er nogle gode eksperter i delphi-afdelingen på E :) <<<<<<
Meget enig !
VH koden12
Synes godt om
Ny brugerNybegynder
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.