Sizlerle kullandığım veritabanı versiyon kontrol sistemini paylaşmak istiyorum.
Eminim sizden gelecek önerilerle daha da iyi teknikler çıkartılabilir.
Öncelikle veritabanına bir versiyon kontrol tablosu ekliyoruz:
Kod: Tümünü seç
CREATE TABLE MAINDBVER
(
MVR_ID INT NOT NULL,
MVR_MAJOR SMALLINT,
MVR_MINOR SMALLINT,
MVR_BUILD SMALLINT,
MVR_CIKISTRH DATETIME,
MVR_GECISTRH DATETIME,
MVR_BILGI TEXT,
MVR_LOG TEXT,
PRIMARY KEY (MVR_ID)
)
Kod: Tümünü seç
Const
/////////versiyon tablosu
dbv_1_01_000=101000;
dbv_1_01_000date='13062008';
dbv_1_01_000info='Bir cihaz üzerine takılan yedek parça bilgilerine döviz tipi eklendi.'#13#10+
'Bu sayede tamirat işlelerinde stokun satış döviz tipinden farklı döviz tipi seçilebilmesi sağlandı.';
dbv_1_02_000=102000;
dbv_1_02_000date='15072008';
dbv_1_02_000info='Genel parametrede bulunan geçmiş tarihli şirket çalışma dönemi isimleri'#13#10+
'şirket bilgilerinin kayıt edildiği tabloya taşındı. Bu sayede tutulabilecek dönem sayısı'#13#10+
' arttırıldı.'#13#10+
' Yeni listeleme sistemi için raporlar veritabanına DSGDLIST tablosu eklendi.'#13#10+
' Seri takip sistemi eklendi.';
dbv_1_03_000=103000;
dbv_1_03_000date='26122008';
dbv_1_03_000info='Ana pencere-Yavru pencere şeklinde çalışan program ayrı ayrı pencerelerde '+
'çalışacak şekle getirild.'#13#10+
'Genel veritabanı (TekSet)´e form dizaynları için tablo eklendi.'#13#10;
dbv_Current=dbv_1_03_000;////dbv_Current son eklediğimiz versiyona eşitlenecek
Bütününü vermiyorum ancak yeteri kadar anlaşılır herhalde:
Kod: Tümünü seç
procedure TMainF.SurumKontrolu;
Var
s,cinfo:String;
vl:string;
c,va,vb,vc,ca,cb,cc,oldver,cid:integer;
GeriYukle:Boolean;
cdate:Double;
procedure versiyoncoz(v:integer);
var
c:integer;
vl:string;
begin
vl:='00000000'+inttostr(v);
c:=Length(vl);
Delete(vl,1,c-7);
ca:=strtoint(copy(vl,1,2));
cb:=strtoint(copy(vl,3,2));
cc:=strtoint(copy(vl,5,3));
end;
begin
GeriYukle:=False; ////Geri yukle dbyedekten geri yükleme gerektiği zaman (bir hata oluştuğunda) true yapılır.
if DM.QOpen('SELECT * FROM MAINDBVER ORDER BY MVR_MAJOR,MVR_MINOR,MVR_BUILD') then
begin
DM.GenelSQL.Last;
va:=intField('MVR_MAJOR');
vb:=intField('MVR_MINOR');
vc:=intField('MVR_BUILD');
end else
begin
va:=1;
vb:=0;
vc:=0;
end;
oldver:=va*100000+vb*1000+vc;
if oldver<dbv_Current then
begin
DM.DBYedekle('SurumGuncelleme'); //güncellme öncesinde yedek alınır
end;
if oldver< dbv_1_01_000 then
begin
cid:=dbv_1_01_000;
cdate:=TextToDbl(dbv_1_01_000date,asfDate)-2;////-2 mssql de tarih ile ilgili bir sıkıntıdan geliyor
cinfo:=dbv_1_01_000info;
versiyoncoz(cid);
/////////////bu kısımda yeni versiyona geçilmesi için gerekli sql komutlarını çalıştırıyoruz.
DM.QExec('ALTER TABLE SRVPRC ADD SRD_PRB VARCHAR(8)');
if TekDataMdl.WorkWithNetsis then
begin
end else
begin
DM.QExec('UPDATE SRVPRC SET SRD_PRB=STK_PBSATIS '+
'FROM SRVPRC AS T1 INNER JOIN STKKART ON (T1.SRD_YPR=STK_KOD) '+
'WHERE T1.SRD_PRB IS NULL');
end;
/////////////////////////////////////////////////////////////////
///////Yeni versiyona geçildi. Yeni versiyonu veritabanına kayıt ediyoruz.
DM.QInsert(DM.ExecSQL,'MAINDBVER',['MVR_ID','MVR_MAJOR','MVR_MINOR',
'MVR_BUILD','MVR_CIKISTRH','MVR_GECISTRH','MVR_BILGI','MVR_LOG'],
[cid,ca,cb,cc,cdate,now-2,cinfo,'']);
end;
.
.
.
.
if GeriYukle then
DM.DBYedekGeriYukle('SurumGuncelleme')
else
begin
if oldver<dbv_Current then
Begin
end;
end;
vl:='00000000'+inttostr(dbv_Current);
c:=Length(vl);
Delete(vl,1,c-7);
ca:=strtoint(copy(vl,1,2));
cb:=strtoint(copy(vl,3,2));
cc:=strtoint(copy(vl,5,3));
Application.Title:='ProTech v '+inttostr(ca)+'.'+copy(vl,3,2)+'.'+copy(vl,5,3);
MainF.Caption:=Application.Title;
end;