Avatar billede beerh Nybegynder
08. august 2002 - 17:30 Der er 3 kommentarer

Opgradering af database

Har fået til opgavet at opgradere et delphi program baseret på en paradox database til noget mere fleksibilt, dvs. at kunderne storset selv skal kunne vælge hvilken database de vil benytte. Idag består systemet af 3-4 datamoduler med x-antal ttable og tqueries og et til svarende antal datasources. Derudover ligger der en del ttables spredt rundt omkring på de forskelige forms og på en del quickreports. Har et par ideer til hvordan det kan løses, men om de vil kunne lade sig gøre i praksis ved jeg ikke, så det jeg er ude efter er en diskussion/foreslag til hvordan man kan løse problemet!

Under alle omstændigheder skulle hele databasen nok strømlignes således den blev kompatibel med flest mulige databaser, bl.a. skulle booleans laves om til char(1).

Min første ide går ud på at man bibeholder bde'en så vil man skulle alle datasets igennem og ændre boolfields til char + at man nok skal ændre på tablename da de fra paradox har .db endelsen.

Min anden ide får ud på at man lave x antal nye datamoduler for de forskellige database typer, ADO, Interbase, Flashfiler osv. og så lave en procedure som skifter datasourcen til de tabbeller som ligger på det valgte datamodul, incl. felt definitoner.

Håber nogen har noget erfaring/ideer til løsning?

/Ole
Avatar billede hermandsen Juniormester
08. august 2002 - 21:22 #1
Jeg har meget lidt erfaring med databaser, men kan da anbefale dig at låne Delphi 4 Programmering af Per Amdal Steffensen på biblioteket. Der er to afsnit om databaser i den. Samtidig er den godt skrevet og på dansk!

Ellers kan du lave et array af en record-type... På den måde kan du faktisk opbygge din egen database! :)

Det smarte ved det er nemlig at du med delphi kan lave følgende:

type
  TPlydsHesteRecord = record //Min record-type med nogle forskellige variabler
    Ja: Boolean;
    Nej: Boolean;
    Hest: Integer;
    HesteMule: TPoint;
    HesteHale: String[200];
  end;
end;

procedure SkrivFil;
var
  F: File of TPlydsHesteRecord; //filen som skal være vores database
  A: array [0..99] of TPlydsHesteRecord; //det array af filer databasefilen skal fyldes op med
  I: Integer; //Tællevariabel
begin
  try //Hvis der sker en fejl skal vi fange den
    AssignFile(F, ExtractFilePath(Application.ExeName) + 'MinHesteDB.hst'); //Angiver stien som databasen skal ligge i og sætter den til variablen
    Rewrite(F); //Skriver en ny fil og før den klar til at blive skrevet i
    for I := Low(A) to High(A) do //Fra array start til array slut
      Write(F, A[I]); //skriver array-index I i filen F
  finally //Til sidst (selv om der er sket fejl)
    CloseFile(F); //Filen lukkes og der kan ikke skrives til den før den åbnes næste gang
  end;
end;

Når den så skal læses ind igen, her vil jeg ikke kommentere ting som er kommenteret en gang:

procedure LaesFil;
var
  F: File of TPlydsHesteRecord;
  A: array [0..99] of TPlydsHesteRecord;
begin
  try
    AssignFile(F, ExtractFilePath(Application.ExeName) + 'MinHesteDB.hst');
    FileMode := 0; //Gør at vi kun får læse-tilladelse til filen
    Reset(F); //Gør filen klar til læsning
    while not Eof(F) do //Mens vi ikke er i slutningen af filen, gør
      Read(F, A[I]); //Læser en TPlydsHestRecord ind i A[I] fra filen
  finally
    CloseFile(F);
  end;
end;

God fornøjelse! Kan varmt anbefale den bog!!! ;)
Avatar billede beerh Nybegynder
09. august 2002 - 10:25 #2
Jeg har styr på både delphi og databaser. Det jeg efterlyser er nogle smarte metoder hvis disse eksistere til at konverterer en ældre applikations database til noget nyere.
Avatar billede coladrenge Nybegynder
22. august 2002 - 09:40 #3
Jeg måden som jeg ville gøre det på er følgende.

Del programmet op i nogle veldefineret lag(Grænse,Funk,Model) og definere de objekter som er i systemet. Nu kender jeg ikke systemet, men man kunne forestille sig at der var kunde,mearbejder og varekartotek eksempelvis. Så deler man det op så at skærmflader ligger i grænsefladen, beregninger som dækker over flere tabeller i funktionslaget og selve database kommunikationen ligger i modellaget som kunne være implementeret som en DLL fil, så kan man nøjes med at skifte dll filen ud.

Hvis du vil have det overstået det på en nem måde. så kan du oprette nogle forskellige datamoduler - men det kræver så at recompilere programmet når man ønsker at skifte database - ellers skal man kunne læse indstillinger fra en inifil.
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