Mega Code Archive

 
Categories / Delphi / Ide Indy
 

Veritabanı uygulamalarını network üzerinden sorunsuz çalışır hale getirmek için yapılması gerekenler

Normalde paradox, dbase gibi veritabanları ilk geliştirildiklerinden itibaren network üzerinden çalışması için planlanmışlardır. Buna rağmen eğer burada anlatacaklarımız konusunda bilginiz yoksa, bu veritabanlarını Delphi ile kullandığınızda programlarınızın network üzerinden çalışmıyor olması hiç de şaşırtıcı olmaz. Bunun sebebi network üzerinden çalışırken, hangi kullanıcının o an ne yaptığı, hangi kayıdı değiştirmekte olduğu gibi konularda network üzerinden çalışan veritabanı uygulamaları arasında koordinasyonu sağlayan "netfile" dosyasının konfigürasyonunu yapmamış olmanızdandır. Delphi veritabanı uygulamanızı çalıştırdığında bir tek veritabanınız olsa dahi default olarak bir TSession ve TDatabase nesnesi oluşturur. TSession, veritabanının o an kullandığı Database'lerin kontrolünden sorumludur. Bu database'ler bir BDE Alias'ı, hard diskinizde bir dizin olabilir. TDatabase nesnesi işte bu dizin ve aliasların kontrolünden sorumludur. Ama bizim burada kullanacağımız nesne TSession. Default olarak oluşturulan TSession nesnesinin adı Session dır. Başlangıç olarak programınızı network üzerinde bir yere kurduğunuzu düşünelim. Bütün kullanıcılar herhangi bir makina üzerinden programın exe'si ni çalıştırabilirler. Fakat eğer siz aksini belirtmezseniz daha önce bahsettiğimiz network kontrol dosyası normalde C harddiskinin ana dizininde oluşturulur. Oysa ki network üzerinde veritabanınızı kullanan bütün programların aynı dosyayı kullanması gerekir. Bunun için programınızı kurduğunuz F:\PROGRAM dizini altında NETWORK adlı yeni bir dizin oluşturun ve programınızın ana formunun oncreate olayı içerisinde aşağıdaki gibi network kontrol dosyasının yerini belirtin. Diğer dizin ise kullanıcının harddiskinde geçici dosyalarını koymak için kullanacağı private directory'dir. Bunun kullanıcın kendi harddiski içinde olması hem performansı arttırır, hem de network üzerinde kullanıcılar arasında doğabilecek karışıklığı önler. procedure TformMain.FormCreate(Sender: TObject); var Buf : array[0..256] of char; { windows dizinini almak için } T : TSearchRec; begin Session.NetFileDir := ExtractFilePath(Application.ExeName) + 'network\'; GetTempPath(255, Buf); { windows'un template dizinini öğren } Session.PrivateDir := Buf; { private dizin olarak onu belirle } Session.Open; { session'umuzu ve ayarlarımızı aktif hale getir } end; Network konfigürasyonunun uygun biçimde ayarlanması Eğer aynı makina üzerinde programınızın veya aynı veritabanını kullanan programların aynı anda sorunsuz açılabilmesini istiyorsanız private dizinini windows'un template dizini altında her program için ayrı ayrı oluşturacağınız ve program bitiminde sileceğiniz dizinler olarak belirtmeniz yararlı olabilir.