MS SQL Server'e ADOConnection ile Bağlantı Gönderen: dynamo Tarih: 28 May 2007 08:51:51
"Microsoft OLE DB Provider for SQL Server" (SQLOLEDB.1) sağlayıcısını kullanarak ADOConnection ile MS SQL Server veritabanına bağlantı işlemi.
Veritabanın adı STOKDB olsun.Programın çalıştırıldığında ana formun Create olayında DB_Connect prosedürünün yaptığı işlemler:
1-MS SQL Server'ü kontrol eder.SQL Server yülü ve servis çalışıyorsa programı açar.yoksa hata mesajını verip programı sonlandırır.
2-exe'nin çalıştığı yerde DATA klasörü var mı kontrol eder, yoksa DATA klasörünü oluştur.
3-DATA klasörü varsa,bu klasörün içinde veritabanın dosyaları oluşturulmuş mu,yoksa "create database " sql ifadesi ile veritabanı dosyalarını oluşturur ve veritabanını register eder.
4-veritabanı dosyaları varsa, register edilip edilmediğini kontrol eder,edilmemişse "sp_attach_db" ile register eder.
5-veritabanı register edilmişse tabloları kontrol eder.olmayan tabloları "Tablo_Olustur" prosedürü ile oluşturur.
Giriş formunun OnCreate olayında DB_Connect prosedürü var:
procedure TfrmGiris.FormCreate(Sender: TObject);
begin
DB_Connect;
end;
procedure TfrmGiris.DB_Connect;
var
IniDosya: TIniFile;
str_dir,str_file_path,str_file:string;
exe_path:string;
begin
IniDosya := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Settings.ini');
try
server:=IniDosya.ReadString('Database','Server','');
sapassword:=IniDosya.ReadString('Database','SaPassword','');
finally
IniDosya.Free;
end;
//-------------SQL Serverün çalışıp çalışmadığını kontrol et-----------------
if IsSQLServerRunning(GetComputerName,'master','') then
begin
next;
end
else
begin
Application.MessageBox('SQL Server kurulu değil yada Servis Çalışmıyor....Program Sonlandırılacak.....','UYARI',MB_OK);
Application.Terminate;
Abort;
end;
exe_path:=ExtractFilePath(Application.ExeName);
//--------------database yoksa database oluştur------------------------------
ADOConnection1.Connected :=false;
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Initial Catalog=master;Password ='+sapassword+';Data Source=' +server;
ADOConnection1.Connected := true;
if (ADOConnection1.Connected) then begin
str_dir := exe_path+'DATA';
str_file_path := exe_path+'DATA\STOKDB' ;
str_file:= exe_path+'DATA\STOKDB_data.mdf' ;
if not DirectoryExists(str_dir) then
begin
ForceDirectories(str_dir);
if ( not FileExists(str_file)) then
begin
ADOCommand1.Cancel();
ADOCommand1.CommandText:='CREATE DATABASE [STOKDB] ON (NAME = ''STOKDB_data'', FILENAME = '''+str_file_path+ '_data.mdf'' ) LOG ON (NAME = ''STOKDB_log'', FILENAME = '''+ str_file_path+ '_log.ldf'' ) COLLATE Turkish_CI_AS ';
ADOCommand1.Execute;
end;
end
else
begin
if ( not FileExists(str_file)) then
begin //database yok oluştur
ADOCommand1.Cancel();
ADOCommand1.CommandText:='CREATE DATABASE [STOKDB] ON (NAME = ''STOKDB_data'', FILENAME = '''+str_file_path+ '_data.mdf'' ) LOG ON (NAME = ''STOKDB_log'', FILENAME = '''+ str_file_path+ '_log.ldf'' ) COLLATE Turkish_CI_AS ';
ADOCommand1.Execute;
end
else
begin //database varsa register edilip edilmediğini kotrol et
ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Initial Catalog=master;Password ='+sapassword+';Data Source=' +server;
ADOConnection1.Connected:=True;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from master..sysdatabases WHERE name = ''STOKDB'' ');
ADOQuery1.Open;
if ADOQuery1.RecordCount = 0 then
begin
str_data:=exe_path+'DATA\STOKDB_data.mdf' ;
str_log:=exe_path+'DATA\STOKDB_log.ldf' ;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='EXEC sp_attach_db @dbname = N''STOKDB'',@filename1 =N'''+str_data+''',@filename2 = N'''+str_log+''' ';
ADOQuery1.ExecSQL;
end;
end;
end;
end;
//-------------database varsa tablo kontrolu --------------------------------
ADOConnection1.Connected :=false;
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Initial Catalog=STOKDB;Password ='+sapassword+';Data Source=' +server;
ADOConnection1.Connected := true;
if (ADOConnection1.Connected) then
begin
Tablo_Olustur;
end;
end;
Settings.ini dosyası:
[Database]
Server=127.0.0.1
SaPassword=123
ini dosyadan server adı ve sa şifresi değişkenlere alınır.
IsSQLServerRunning fonksiyonu ile SQL Serverün çalışıp çalışmadığını kontrol edilir.
tabloları oluşturma:
procedure TfrmGiris.Tablo_Olustur;
var
SQL:string;
begin
//------------------TABLOLARI OLUŞTUR----------------------------------
//---------------------------------------------------------------------
SQL:='';
SQL:=SQL+' IF NOT EXISTS (select * from dbo.sysobjects where id = object_id(N''[dbo].[KULLANICI]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)';
SQL:=SQL+' CREATE TABLE [KULLANICI] ( ';
SQL:=SQL+' Kullanici VARCHAR ( 10) ,';
SQL:=SQL+' Sifre VARCHAR ( 10) ,';
SQL:=SQL+' PersonelKod VARCHAR ( 20) ,';
SQL:=SQL+' PRIMARY KEY (Kullanici) )';
ADOCommand1.Cancel();
ADOCommand1.CommandText:=SQL;
ADOCommand1.Execute;
//---------------------------------------------------------------------
SQL:='';
SQL:=SQL+' IF NOT EXISTS (select * from dbo.sysobjects where id = object_id(N''[dbo].[PERSONEL]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)';
SQL:=SQL+' CREATE TABLE [PERSONEL] ( ';
SQL:=SQL+' KOD VARCHAR ( 20) ,';
SQL:=SQL+' AD VARCHAR ( 50) ,';
SQL:=SQL+' ADRES VARCHAR ( 50) ,';
SQL:=SQL+' IL VARCHAR ( 20) ,';
SQL:=SQL+' ILCE VARCHAR ( 20) ,';
SQL:=SQL+' TEL VARCHAR ( 16) ,';
SQL:=SQL+' KAYITNO INT ,';
SQL:=SQL+' KIMLIKNO VARCHAR ( 20) ,';
SQL:=SQL+' KAYITTARIHI DATETIME,';
SQL:=SQL+' PRIMARY KEY (KOD) )';
ADOCommand1.Cancel();
ADOCommand1.CommandText:=SQL;
ADOCommand1.Execute;
//---------------------INDEXLERI OLUŞTUR-------------------------------
//---------------------------------------------------------------------
ADOCommand1.Cancel;
ADOCommand1.CommandText:='if not exists ( select * from dbo.sysindexes where name = ''personel_ix'') CREATE INDEX [personel_ix] ON [dbo].[PERSONEL]([KAYITNO],[KAYITTARIHI]) ON [PRIMARY]';
ADOCommand1.Execute;
//------------------DEFAULT DEĞERLERİ YÜKLE----------------------------
//---------------------------------------------------------------------
ADOQuery1.Close();
ADOQuery1.SQL.Clear();
ADOQuery1.SQL.LoadFromFile(ExtractFilePath(Application.ExeName)+'sql.sql');
ADOQuery1.ExecSQL;
//----------------------------------------------------------------------
end;
programın giriş formu:

Tamam Butonu:
procedure TfrmGiris.BitBtn1Click(Sender: TObject);
begin
ADOConnection1.Connected :=false;
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Initial Catalog=STOKDB;Password ='+sapassword+';Data Source=' +server;
ADOConnection1.Connected := true;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from KULLANICI WHERE Kullanici = '''+trim(Edit1.Text)+''' and Sifre='''+trim(Edit2.Text)+'''');
ADOQuery1.Open;
if ADOQuery1.RecordCount>0 then
begin
frmAnaMenu.Show;
end
else
begin
Application.MessageBox('Kullanıcı Adı yada Şifre Yanlış....','UYARI',MB_OK);
Edit1.SetFocus;
exit;
end;
end;
örnek uygulama ekte
Ynt: MS SQL Server'e ADOConnection ile Bağlantı Gönderen: alperaspirin Tarih: 25 April 2008 10:22:28
"örnek uygulama ekte" imiş ben bulamadım bu eki ?