ComboBox ile Serverleri Veritabanlarını Listeleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen ufb1453 »

Selamın Aleyküm,

ODBC ile veri tabanı ilişkilendiriyorum, ancak birden fazla veri tabanı var iken benim seçtiğim Veritabanının listelenmesini nasıl sağlarım,
işin özünde ODBC deki bilgilerin nereden ve nasıl alınacağını bilmiyorum

Şimdiden teşekkürler
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen sabanakman »

Hangi veritabanı? Mesela sql server ise

Kod: Tümünü seç

select * from master..sysdatabases
sorgusu ile veritabanları listelenebilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

Re: ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen ufb1453 »

teşekkürler hocam, ancak sadece Yönetimsel Araçlar/ ODBC Veri Kaynaklarında tanımladığım veri tabanlarının listelenmesi nasıl yapılabilir, bunu yapamadım,
ilginiz için teşekkürler,

Saygılarımla,
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen Lord_Ares »

ODBC (Open Database Connectivity) demektir. ODBC bir veritabanı değil veritabanı bağlantı aracı diyebiliriz. Kullandığınız veritabanı , access , paradox, interbase, firebird vs olabilir. Bu yüzden sorunuzu daha açık sorabilirseniz daha hızlı cevap bulursunuz.
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

Re: ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen ufb1453 »

Merhaba,
SQL SERVER da örneğin deneme ve denemeyedek adında 2 tane veri tabanım var, bu veri tabanlarını ben ODBC ile servere bağladım, kullanıcı işlem yapacağı veri tabanını combobox ile seçecek,
not olarak odbc ile bağlı olmayan veri tabanlarımız da var , onların görünmemesi gerekiyor, bu sebeple ODBC ye tanımlı VT lerin seçilmesi durumunun nasıl ilerlendiğini bilemediğim için ilerleyemedim, umarım açıklayıcı olmuştur.

saygılarımla,
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: ComboBox ile Serverleri Veritabanlarını Listeleme

Mesaj gönderen sabanakman »

Veritabanları sql server a kayıt edildikleri zaman hangi ortamdan kayda geçtiğinin bir önemi yoktur sonuçta her veritabanı SQLServer master veritabanına eklenirler. Yalnız burada bazı veritabanları için ODBC bağlantı tanımları yapıldı ise sadece bu tanımlara ulaşmak istiyorsanız odbc veri kaynakları ile alakalı apilere hakim olup onlar üzerinden çalışmanız gerekmektedir. Mesela sistemde tanımlı odbc tanımlarının listesini alıp ona bağlanarak tablo listesini çeken bir örnek:

Kod: Tümünü seç

const
  SQL_ERROR = -1;
  SQL_SUCCESS = 0;
  SQL_FETCH_NEXT = 1;
  SQL_FETCH_FIRST = 2;
  odbc32 = 'ODBC32.DLL';

function SQLAllocEnv(var phenv: Pointer): smallint; stdcall; external odbc32;
function SQLAllocConnect(henv: Pointer; var phdbc: Pointer): smallint; stdcall; external odbc32;
function SQLDataSources(henv: Pointer; direction: word; szDSN: Pchar; cbDSN:
  word; var pbDSN: word; szDescr: Pchar; cbDescr: word; var pbDescr: word):
  smallint; stdcall; external odbc32;

procedure GetDataSources(var DSList: TStringList);
var
  dsn, descr: array[0..255] of char;
  henv, hdbc: Pointer;
  cbdsn, cbdescr: word;
begin
  DSList.clear;
  if (SQLAllocEnv(henv) <> SQL_SUCCESS) then
    raise EODBCError.Create('Cannot allocate ODBC handle');

  if (SQLAllocConnect(henv, hdbc) <> SQL_SUCCESS) then
    raise EODBCError.Create('Cannot allocate ODBC connection');

  if SQLDataSources(henv, SQL_FETCH_FIRST, dsn, sizeof(dsn), cbdsn, descr,
    sizeof(descr), cbdescr) = SQL_SUCCESS then
    DSList.add(strpas(dsn))
  else
    exit;

  while SQLDataSources(henv, SQL_FETCH_NEXT, dsn, sizeof(dsn), cbdsn, descr,
    sizeof(descr), cbdescr) = SQL_SUCCESS do
    DSList.add(strpas(dsn));

end;

procedure GetDataSources(const DSList: TStrings);
var
  dsn, descr: array[0..255] of char;
  henv, hdbc: Pointer;
  cbdsn, cbdescr: word;
begin
  DSList.clear;
  if (SQLAllocEnv(henv) <> SQL_SUCCESS) then
    raise EODBCError.Create('Cannot allocate ODBC handle');

  if (SQLAllocConnect(henv, hdbc) <> SQL_SUCCESS) then
    raise EODBCError.Create('Cannot allocate ODBC connection');

  if SQLDataSources(henv, SQL_FETCH_FIRST, dsn, sizeof(dsn), cbdsn, descr,
    sizeof(descr), cbdescr) = SQL_SUCCESS then
    DSList.add(strpas(dsn))
  else
    exit;

  while SQLDataSources(henv, SQL_FETCH_NEXT, dsn, sizeof(dsn), cbdsn, descr,
    sizeof(descr), cbdescr) = SQL_SUCCESS do
    DSList.add(strpas(dsn));

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetDataSources(ComboBox1.Items);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  ADOConnection1.ConnectionString :=
    'Provider=MSDASQL.1;Persist Security Info=False;Data Source=' + ComboBox1.Items
    [Combobox1.ItemIndex];
  ADOConnection1.GetTableNames(ListBox1.Items);
end;
odbc tanmı yaparak bağlantı SQL Server Provider veya Native Client ile yapılan bağlantılara göre daha zahmetli, dolaylı, eski ve bazı eklentilere bağımlı çalışan bir yöntemdir. Mecbur kalmadıkça tercih etmemekte pratiklik açısından fayda vardır aslında.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla