Witam!
Korzystałem z artykułu o aktualizacji programu. Zrobiłem aktualizację w swoim programie. Dotąd wszystko było wporządku. Program sprawdzał czy w stałej jest mniejsza liczba niż na serwerze w pliku ini i jeżeli była mniejsza to pytał czy ściągnąć.
Problem pojawił się jednak gdy chciałem zrobić aktualizację "bazy danych". Polega ona na tym że wpisane są tam informacje o pewnych graczach oraz wpisana jest wersja bazy danych no i link wrazie gdy trzeba byłoby ją ściągnąć.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, HTTPGet, StdCtrls, INIFiles, ComCtrls, Buttons;
type
TForm4 = class(TForm)
Memo1: TMemo;
Button1: TButton;
HTTPGet1: THTTPGet;
HTTPGet2: THTTPGet;
SaveDialog1: TSaveDialog;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure HTTPGet1DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
procedure HTTPGet1Error(Sender: TObject);
procedure HTTPGet2DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
procedure HTTPGet2Error(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
const
version = '0.1.1.0';
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
HTTPGet1.URL := 'http://www.magnum007.republika.pl/setup.ini'; //lokalizacja pliku z informacją
HTTPGet1.FileName := ExtractFilePath(Application.ExeName) + 'setup.ini';
HTTPGet1.GetFile; //pobranie pliku ini
Memo1.Lines.Add('Pobieranie informacji...');
end;
procedure TForm4.HTTPGet1DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
var
INI : TINIFile;
updtVersion : string;
cyfra1 : integer;
cyfra2 : integer;
cyfra3 : integer;
cyfra4 : integer;
updtCyfr1 : integer;
updtCyfr2 : integer;
updtCyfr3 : integer;
updtCyfr4 : integer;
begin
Memo1.Lines.Add('Sprawdzanie, czy jest nowa wersja...');
INI := TINIFile.Create(HTTPGet1.FileName);
try
updtVersion := INI.ReadString('update','version',''); //odcytanie wersji z pliku ini
//nie śmiejcie sie z tego sposobu. to tylko przykład :)
cyfra1 := StrToInt(version[1]);
cyfra2 := StrToInt(version[3]);
cyfra3 := StrToInt(version[5]);
cyfra4 := StrToInt(version[7]);
updtCyfr1 := StrToInt(updtVersion[1]);
updtCyfr2 := StrToInt(updtVersion[3]);
updtCyfr3 := StrToInt(updtVersion[5]);
updtCyfr4 := StrToInt(updtVersion[7]);
if (cyfra1 < updtCyfr1) or (cyfra2 < updtCyfr2) or (cyfra3 < updtCyfr3) or (cyfra4 < updtCyfr4) then //sprawdzenie, czy jest nowa wersja
begin
Memo1.Lines.Add('Jest nowa wersja bazy danych!');
{wyświetlenie zapytania. Jeśli użytkownik wybierze Tak, rozpoczyna się pobieranie programu }
if Application.MessageBox('Czy chcesz pobrać nową wersję bazy danych?','Nowa wersja bazy danych!',MB_YesNo) =
ID_NO then
exit
else
begin
HTTPGet2.URL := INI.ReadString('update','url','');
if SaveDialog1.Execute then // tu użytkownik wybierze, gdzie zapisać program
HTTPGet2.FileName := SaveDialog1.FileName;
HTTPGet2.GetFile; //pobieranie pliku
Memo1.Lines.Add('Pobieranie pliku...');
end;
end
else
Memo1.Lines.Add('Nie znaleziono nowej wersji bazy danych');
finally
INI.Free;
end;
end;
procedure TForm4.HTTPGet1Error(Sender: TObject);
begin
Memo1.Lines.Add('Wystąpił błąd!');
end;
procedure TForm4.HTTPGet2DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
begin
Memo1.Lines.Add('Pobieranie zakończone sukcesem!');
end;
procedure TForm4.HTTPGet2Error(Sender: TObject);
begin
Memo1.Lines.Add('Wystąpił błąd podczas pobierania pliku!');
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
Form4.Caption := 'Aktualizacja bazy danych';
end;
end.
- Po pierwsze. Program aktualizuje plik z serwera nawet gdy wcisnę, że nie chcę go aktualizować.
- Po drugie. Program pobiera wersje ze stałej oraz z serwera. I jeżeli zrobię raz aktualizację bazy, to wersja która jest w stałej się nie zmieni i gdy użytkownik sprawdzi czy jest nowa wersja to się okaże że jest chociaż to nie prawda ;/
Wymyśliłem, że rozwiązaniem mogłoby być, aby pobierana była wersja z pliku setup.ini (baza danych, która jest na dysku) i porównywana z plikiem setup.ini który jest na serwerze. I jeżeli wersje by się nie zgadzały, to ściągana byłaby wersja z serwera.
Mam nadzieję że da się to jakoś zrobić. Myślałem, i próbowałem zrobić zmienną INI2 ale to nic nie pomagało ;/
Pozdrawiam!</delphi>