Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: Ado Connection daki Connection Stringi nasıl değişkene atayabiliriz?  (Okunma sayısı 2172 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı selchuk

  • Delphi 6 Level 3
  • ***
  • İleti: 274
  • Rep: +0/-0
  • Cinsiyet: Bay
    • Arma Ticari Sistem
Arkadaşlar Access veritabanı kullanıyorum

Ado Connection daki Connection Stringi nasıl değişkene atayabiliriz?

Örnek Connectin string:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\Data\001.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False

Örnek stringdeki Data source bölümündeki 001.mdb dosyasını bir değişken yada bir text dosya ile çağırabilirmiyiz.

İşin amacı : Bir projede bir ana mdb dosyam ve her şirkete göre 001, 002 gibi ayrı ayrı mdb dosyalarım var.
Kullanıcı giriş ekranında hangi firma numarasını seçerse bunu ana.mdb dosyamdaki giris tablosuna FirmaNo alanı olarak kaydediyorum. (Gerekirse text yada ini dosyayada kayıt edilebilir)

İş te bu işlemden sonra Firmaya ait  AdoConnection 'daki Connection String bölümünde bulunan data source kısmını bu girilen numaraya göre çağırmak istiyorum.

Kullanıcı 1 numaralı firmayı seçerse 001 mdb açılacak, 2 nolu firmayı seçerse 002 no'lu mdb açılacak.

Connection Stringe müdahale konusunda yardımlarınızı bekliyorum.
Knowledge is power (Bilgi Güçtür)

Çevrimdışı sabanakman

  • Global Moderatör
  • *****
  • İleti: 796
  • Rep: +13/-0
  • Cinsiyet: Bay
  • Delphi Sürümü: e) Hepsi
Bunun yerine sabit bilgi üzerinden değişiklik yaparak çalışabilirsin. Bunun için bir fonksiyon önerebilirim.
Kod:  (Unknown Language)
  1. function JetConnSt(const DBName:String;DBPassWord:String='';JetType:String=''): String;
  2. begin
  3. {dBase 5.0,dBase III,dBase IV,Excel 3.0,Excel 4.0,Excel 5.0,Excel 8.0,Exchange 4.0,HTML Export,HTML Import,Jet 2.x,Jet 3.x,Lotus WJ2,Lotus WJ3,Lotus WK1,Lotus WK3,Lotus WK4,Outlook 9.0,Paradox 3.X,Paradox 4.X,Paradox 5.X,Paradox 7.X,Text,WSS{}
  4.   if JetType<>'' then JetType:=Format('Extended Properties=%s;',[JetType]) else JetType:='';
  5.   if DBPassWord<>'' then DBPassWord:=Format(';Jet OLEDB:Database Password=%s',[DBPassWord]) else DBPassWord:='';
  6.   Result:=Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;%sPersist Security Info=False%s',
  7.    [DBName,JetType,DBPassWord]);
  8. end;

//c:\yol\veri.mdb dosyası için
ADOConnection1.ConnectionString:=JetConnSt('c:\yol\veri.mdb');

//c:\yol\sifreli_veri.mdb dosyası ve şifresi 123 olan Access dosyası için
ADOConnection1.ConnectionString:=JetConnSt('c:\yol\sifreli_veri.mdb','123');

bu da eşantiyon olsun  ;)
//c:\yol\deneme.xls excel dosyasını ADOQuery'de açmak için
ADOQuery1.ConnectionString:=JetConnSt('c:\yol\deneme.xls','','Excel 8.0');
ADOQuery1.SQL.Text:='select * from [$Sayfa1]';
ADOQuery1.Open;
Şaban Şahin AKMAN

Derin olan kuyu değil kısa olan iptir

Çevrimdışı selchuk

  • Delphi 6 Level 3
  • ***
  • İleti: 274
  • Rep: +0/-0
  • Cinsiyet: Bay
    • Arma Ticari Sistem
Hocam çok teşekkür ederim.
Knowledge is power (Bilgi Güçtür)

Çevrimdışı selchuk

  • Delphi 6 Level 3
  • ***
  • İleti: 274
  • Rep: +0/-0
  • Cinsiyet: Bay
    • Arma Ticari Sistem
Şu şekilde kendime göre uyarladım.

Kullanıcı giriş formumda kullanıcı adı, şifre ve firma no alanları var. Kullanıcı kaç numaralı firmayı seçtiyse bu ana.mdb db'ye giris isimli bir tabloya kullanıcı adı, seçtiği firma ve bilgisayarın adı kaydediliyor. Sonra bu bilgilere göre


var
 FirmNo, FirmNo2:String;

begin

 // Çalışılacak Firma No Bulma.
    Dm2.GirisQ1.SQL.clear;
    Dm2.GirisQ1.SQL.Add('Select * From Giris');
    Dm2.GirisQ1.SQL.Add('Where TerminalAdi='''+GetCompName+''' ');
    Dm2.GirisQ1.Open;
    FirmNo:= Dm2.GirisQ1.FieldByName('FirmaNo').AsString;
    FirmNo2:='.\Data\'+FirmNo+'.mdb';

    Dm1.adc1.connected:=False;
    Dm1.adc1.ConnectionString:=JetConnSt(FirmNo2);
    Dm1.adc1.connected:=True;

end;

Yukarıdaki kodla kullanıcı 001 no'lu firmaya girerse 001.mdb datası açılıyor yada 002 no'lu şirkete girerse 002.mdb datası açılıyor. Böylece programımda çok kullanıcı ve çok şirket sorunumu çözdüm. (En azından giriş kısmını)

Not: Bilgisayar adının bulunmasını sağlayan GetCompName fonksiyonu forumda var.

Başka arkadaşlarında işine yaraması umuduyla herkese kolay gelsin.



« Son Düzenleme: 03 Şubat 2010 03:58:23 by selchuk »
Knowledge is power (Bilgi Güçtür)