10. maj 2011 - 16:20 Der er 4 kommentarer og
1 løsning

Kompilering versus "almindelig RUN " --

HEJ,

Jeg har et program, som er under løbende udvikling (læs: efterhånden som brugerne finder ud af hvad programmet kan ønsker ( = kræver) de mere funktionalitet,  og det kræver igen, at jeg har en løbende kontrol med versionsnummeret af programmet.

Nu er jeg en lidt doven programmør (filosofi: Lad maskinen gøre arbejdet, den er ligeglad - jeg er ikke !) så jeg tænkte om der findes en metode, hvormed jeg automatisk kan opdatere versionsnummeret med 1 (indenfor de afstukne regler - natur-ligvis) hver gang jeg kompilerer og ikke når jeg bare "RUN" - ner programmet.

Noget i stil med:  (Compile_flag er en PSEUDO_variabel og hedder sikkert noget andet i Delphi  - men hvad ?? )

  IF COMPILERING then (* eller Compile_flag = true *)
    BEGIN
// 
//  Compile_flag = true
//

        Version := Version + 1;    // Integer
        GemVersionIBase(Version);  // Gem i databasen
    END 
  ELSE
    BEGIN                       
//
// Normal RUN-modus
// Compile_flag = false
//
        Resten af programmet .....

    END;


Tak

Kristian
Avatar billede stone Forsker
10. maj 2011 - 18:34 #1
Er det ikke at skyde gråspurve med kanoner?

Når man laver små rettelser så er versionen ikke fra 1 til 2 men f.eks. 1.1

Den versionering kan du selv skrive i selve delphi duviklings programmet.
Avatar billede a_nor Nybegynder
10. maj 2011 - 19:49 #2
Hvad er det der er galt med
Menu Prject - Options - Version info. Include version info - autoincrement... ?
Avatar billede hrc Mester
10. maj 2011 - 21:26 #3
a_nor, der er vist ikke noget galt med dit forslag, men man skal lige vide det findes. :-) Det skal naturligvis et versionsnummer på.

Til at teste kan man bruge denne stump kode:

procedure TfrmVersionChanges.GetVersion(var aMajorVersion, aMinorVersion, aRelease, aBuild: integer);
var
  VerSize: DWORD;
  VerBuf: Pointer;
  FileName: string;
  InfoSize, Wnd: DWORD;
  FI: PVSFixedFileInfo;
begin
  aMajorVersion := 0;
  aMinorVersion := 0;
  aRelease := 0;
  aBuild := 0;

  FileName := Application.ExeName;

  InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
  if InfoSize = 0 then
    exit;

  GetMem(VerBuf, InfoSize);
  try
    if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
      if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
      begin
        aMajorVersion := hiWord(FI.dwFileVersionMS);
        aMinorVersion := loWord(FI.dwFileVersionMS);
        aRelease := hiWord(FI.dwFileVersionLS);
        aBuild := loWord(FI.dwFileVersionLS);
      end;
  finally
    FreeMem(VerBuf);
  end;
end;


Da "mit" program kører mod en MSSQL-database bruger jeg den til at holde styr på justeringerne idet de næsten alle går på justering af database eller databasens indhold.

Ved start af programmet tjekker jeg databasen om opdatering nr. x er blevet kørt og hvis ikke bliver den det. Jeg registrerer yderligere status så programmet prøver fejlslagne opdateringer et par gange inden den helt afskriver dem. Det fungerer rigtig godt men den styring kan også gøres via build-nummeret.
14. juli 2011 - 11:07 #4
Lukker problemet...
Avatar billede a_nor Nybegynder
14. juli 2011 - 11:19 #5
flot
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