Programda Database&alias oluşturma

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Programda Database&alias oluşturma

Mesaj gönderen naile »

Bu kodda SQL Server üzerinde yeni database oluşturuluyor, tablo, view v.b. create ediyor ve alias oluşturuluyor.

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;
Bunlar yapıldıktan sonra bir de oluşturulan database in aynısı olan database deki dataları yeni açılan database e aktarma işlemi var. Onu da gelecek hafta inşallah.
Kullanıcı avatarı
mehmet_turecan_cakmak
Üye
Mesajlar: 132
Kayıt: 02 Tem 2003 01:08
Konum: Afyon
İletişim:

database oluştırma

Mesaj gönderen mehmet_turecan_cakmak »

selam...

naile hanım bu kod yapılan bir programın kurulumu sırasında programa veritabanı(tablo,alan adı) hazrılıyor galiba programlama formundan yanlış anlamadıysam...yanlışım varsa düzeltin...

kolay gelsin...
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Aslında programın kurulu sırasında değil. Biz bunu sene sonu devir işlemlerinde kullanıyoruz. Şirket çok veritabanı sayısı çok olunca devir işlemini böyle otomatikleştirdik. Yeni veritabanı ve tablolar oluşturuluyor, bir de işin tablolardaki verileri yeni tablolara aktarma kısmı var, onu da önümüzdeki günlerde göndereceğim inşallah.
Cevapla