Açıklama satırları koydum, umarım anlaşılabiliyordur. Kodların içinde geçen cümleler scriptten alınan cümleler...
Kod: Tümünü seç
Devir_mssql.sql isimli database de kayıtlı olan her şeyi (table,view,funtion,stored procedure) create eden cümleleri kayıtlı.
db_devir : Tdatabase
edt_server : Server isminin yazıldığı edit
edt_db database name in yazıldığı edit
edt_path database dosyasının oluşturulacağı yol
procedure Tfrm_veritabani.btn_okClick(Sender: TObject);
var
temp: string;
i,j,t: integer;
Dosya: TextFile;
bilgi:string;
begin
AssignFile(Dosya, 'club.cfg'); // club.cfg den Server a bağlanılacak user name ve pass alınır
Reset(Dosya);
t:=1;
while not EOF(Dosya) do begin
ReadLn(Dosya, bilgi);
tut[t]:=bilgi;
t:=t+1;
end;
CloseFile(Dosya);
memo_dosya.Lines.LoadFromFile('devir_mssql.sql'); // create cümleleri memoya aktarılır
db_devir.Connected := False;
db_devir.Params.Add('DATABASE NAME=master');
db_devir.Params.Add('SERVER NAME='+ edt_server.Text);
db_devir.Params.Add('USER NAME='+tut[1]);
db_devir.Params.Add('PASSWORD='+tut[2]);
try
db_devir.Connected := True; // server a bağlanır
except
MessageDlg('Program Sunucuya bağlanamıyor, Sunucu IP, Ad yada ALIAS yanlış olabilir',mtError,[mbOK],0);
Exit;
end;
qry_devir.Close; // database in create edilmesi.
qry_devir.SQL.Text := 'CREATE DATABASE ['+edt_db.Text+'] ON (NAME = N'''+edt_db.Text+'_Data'', FILENAME = N'''+edt_path.Text+edt_db.Text+'_Data.mdf'' , SIZE = 10, FILEGROWTH = 1) LOG ON (NAME = N'''+edt_db.Text+'_Log'', FILENAME = N'''+edt_path.Text+edt_db.Text+'_log.ldf'' , SIZE = 1, FILEGROWTH = 1) COLLATE SQL_Latin1_General_CP1_CI_AS';
qry_devir.ExecSQL;
qry_devir.Close;
qry_devir.SQL.Text := 'exec sp_dboption N'''+edt_db.Text+''', N''trunc. log on chkpt.'', N''true''';
qry_devir.ExecSQL;
qry_devir.Close;
qry_devir.SQL.Text := 'exec sp_dboption N'''+edt_db.Text+''', N''auto create statistics'', N''true''';
qry_devir.ExecSQL;
qry_devir.Close;
qry_devir.SQL.Text := 'exec sp_dboption N'''+edt_db.Text+''', N''auto update statistics'', N''true''';
qry_devir.ExecSQL;
qry_devir.Close;
qry_devir.SQL.Text := 'exec sp_dboption N'''+edt_db.Text+''', N''torn page detection'', N''false''';
qry_devir.ExecSQL;
pb_devir.Stepit;
db_devir.Connected := False;
db_devir.Params.Clear;
db_devir.Params.Add('DATABASE NAME='+edt_db.Text); // oluşan database e bağlantı
db_devir.Params.Add('SERVER NAME='+ edt_server.Text);
db_devir.Params.Add('USER NAME='+tut[1]);
db_devir.Params.Add('PASSWORD='+tut[2]);
db_devir.Connected := True;
qry_devir.Close;
qry_devir.SQL.Clear;
qry_devir.SQL.Add ('if not exists (select * from master.dbo.syslogins where loginname = N''rapor'')');
qry_devir.SQL.Add ('BEGIN');
qry_devir.SQL.Add ('declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb = N'''+edt_db.Text+''', @loginlang = N''us_english''');
qry_devir.SQL.Add ('if @logindb is null or not exists (select * from master.dbo.sysdatabases where name = @logindb)');
qry_devir.SQL.Add ('select @logindb = N''master''');
qry_devir.SQL.Add ('if @loginlang is null or (not exists (select * from master.dbo.syslanguages where name = @loginlang) and @loginlang <> N''us_english'')');
qry_devir.SQL.Add ('select @loginlang = @@language');
qry_devir.SQL.Add ('exec sp_addlogin N''rapor'', null, @logindb, @loginlang');
qry_devir.SQL.Add ('END');
qry_devir.ExecSQL;
pb_devir.Stepit;
qry_devir.Close;
qry_devir.SQL.Clear;
qry_devir.SQL.Add ('if not exists (select * from dbo.sysusers where name = N''RAPOR'' and uid < 16382)');
qry_devir.SQL.Add ('EXEC sp_grantdbaccess N''rapor'', N''RAPOR''');
qry_devir.ExecSQL;
pb_devir.Stepit;
qry_devir.Close;
qry_devir.SQL.Clear;
qry_devir.SQL.Add ('exec sp_addrolemember N''db_datareader'', N''RAPOR''');
qry_devir.ExecSQL;
pb_devir.Stepit;
db_devir.Connected := False;
db_devir.Params.Clear;
db_devir.Params.Add('DATABASE NAME='+edt_db.Text);
db_devir.Params.Add('SERVER NAME='+edt_server.Text);
db_devir.Params.Add('USER NAME='+tut[1]);
db_devir.Params.Add('PASSWORD='+tut[2]);
db_devir.Connected := True;
qry_devir.SQL.Clear;
for i:=0 to memo_dosya.Lines.Count - 1 do begin // memoya aktarılan create çalıştırılması
temp := memo_dosya.Lines[i];
if temp = 'GO' then begin
qry_devir.Close;
qry_devir.ExecSQL;
qry_devir.SQL.Clear;
end else qry_devir.SQL.Add(temp);
end;
createalias(edt_db.Text, edt_db.Text, edt_server.Text, 'MSSQL'); // alias ı create eden proc.
memo_dosya.Lines.Clear;
memo_dosya.Lines.LoadFromFile('sirketler.clb'); // prog.girişde şirketler bu dosyadan //okunur. O yüzden oluşturulan yeni şirket bu dosyaya eklenir.
memo_dosya.Lines.Insert(0,edt_db.Text);
db_devir.Connected := False;
memo_dosya.Lines.SaveToFile('sirketler.clb');
MessageDlg('Veritabanı oluşturma işlemi başarı ile tamamlandı',mtInformation,[mbOK],0);
End;
Aliası create eden procedure:
procedure createalias(alias, dbname, server, driver: string);
var
List: TStringList;
begin
List := TStringList.Create;
with List do
begin
Clear;
Add('DATABASE NAME='+dbname);
Add('SERVER NAME='+server);
Add('USER NAME=MYNAME');
Add('OPEN MODE=READ/WRITE');
Add('SCHEMA CACHE SIZE=8');
Add('BLOB EDIT LOGGING=');
Add('LANGDRIVER=');
Add('SQLQRYMODE=');
Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
Add('DATE MODE=0');
Add('SCHEMA CACHE TIME=-1');
Add('MAX QUERY TIME=300');
Add('MAX ROWS=-1');
Add('BATCH COUNT=200');
Add('ENABLE SCHEMA CACHE=FALSE');
Add('SCHEMA CACHE DIR=');
Add('HOST NAME=');
Add('APPLICATION NAME=');
Add('NATIONAL LANG NAME=');
Add('ENABLE BCD=FALSE');
Add('TDS PACKET SIZE=4096');
Add('BLOBS TO CACHE=64');
Add('BLOB SIZE=32');
Add('PASSWORD=');
end;
if session.isalias(alias) then
Session.ModifyAlias(alias, List)
else
Session.addAlias(alias, driver, List);
Session.SaveConfigFile;
List.Free;
end;