http://esiyo.net - uordek.essiyoo.each { |yazi| esiyo.net << yazi }

Ruby ile Veri Tabanı - 1 (ODBC)

30.11.2006, yazan Tankut ŞENTÜRK

Merhabalar,

Bir önceki yazımda Ruby ile DB bağlantısının nasıl yapılabileceğine deyinmiş ve yollarını tarif etmiştik.

Bu yollardan en temel olanı özellikle 'Windows' programcıları için ODBC bağlantısıdır. Bu kütüphane 'One-Click Ruby Installer' ile beraber kurulumu gerçekleşen bir kütüphanedir. Yani ekstra bir ayar gerektirmez. Fazla sözü uzatmadan, umarım iyi bir başlangıç olur dilekleri ile örneğimize başlayalım.

Örneğimiz "Ms SQL Server" için olsun ve bağlantı işlemlerinden sorumlu olacak "DbTool" isimli bir sınıf kullanalım ki bağlantı işlemlerinin yorucu ve sıkıcılığından programımızı uzak tutalım. İşte bu "DbTool.rb" dosyası;

require "odbc"

# 'ODBC::' ön ekini kullanmamak için module 'include' edilir.
# Böylece ODBC::Driver.new yerine Driver.new kullanılabilir.
include ODBC

# ODBC kullanımı ile veri tabanına bağlantı.
class DbTool
    attr_reader :drv
   
    DRIVER = "SQL Server"
    USERNAME = "kullanici_ismi"
    PASSWORD = "kullanici_sifresi"
    SERVER = "makina_adi"
    DATABASE = "veri_tabani_adi"

    # Veri tabanı bağlantısı için bilgiler alınır, parametreler opsiyoneldir, eğer girilmez ise hemen üstte tanımlanmış bilgiler
    # kullanılır.
    def initialize(database = DATABASE, server = SERVER, username = USERNAME, password = PASSWORD, driver = DRIVER)
        @drv = Driver.new
        @drv.name = "DbTool"
        @drv.attrs["driver"] = driver
        @drv.attrs["server"] = server
        @drv.attrs["database"] = database
        @drv.attrs["uid"] = username
        @drv.attrs["pwd"] = password
    end
 
        # Veri tabanına, sürücü kullanılarak bağlantı kurulur.
    def connect()
        unless @db
            @db = Database.new
            @db.drvconnect(@drv)
            @db.ignorecase = false
            @db.timeout = 3000
        end
    end

    # İşlem bittiğinde veri tabanı kaynaklarını serbest bırakmak için kullanılır.
    def disconnect()
        if @db.connected?
            @db.drop_all
            @db.disconnect
        end
    end
   
    # Eğer herhangi bir blok verilir ise 'yield' işlemi güvenli bir biçimde @db ile ilgili işlemler yapılır
    # Eğer blok verilmez ise @db return edilir. Ve disconnect işleminin uygulanması çağıran kişiye bırakılır.
    def getDb()
       
        connect()
        if block_given?
            begin
                yield @db
            rescue Error => err
                puts "Odbc error = " + err + "\n" + err.backtrace.join("\n")
            rescue Exception => err
                puts "Standart error = " + err + "\n" + err.backtrace.join("\n")
            ensure
                disconnect()
            end
        else
            return @db
        end
    end
end

Yukarıda görmüş olduğunuz sınıf ile, veri tabanına güvenli bir bağlantı kurulabilir ve herhangi bir sql cümlesi çalıştırılabiliriz. Fazla lafı uzatmadan örneğimize devam edecek olursak, 'TestDbTool.rb' dosyasi ise;

# Yukarıda yazdığımız DbTool.rb dosyası
require 'DbTool.rb'

# DbTool sınıfında yazan varsayılan bağlantı parametreleri sürücü elde edilir.
myDriver = DbTool.new()

# Bu sürücü üzerinden belirtilen veri tabanına bağlantı kurulur.
myDriver.GetDb() do |db|
        # 'X' ile başlayan tablolar alınır.
    db.tables("X%").fetch_all.each do |table|
        tableOwner = table[1]
        tableName = table[2]
        # Eğer bu tablo'nun yapımcısı 'dbo' ise alanları (field) ile beraber ekrana yazdırılır.
        if tableOwner == "dbo" then
            columnNames = []
            db.columns(tableName).each do |column|
                columnName = column[3]
                columnNames.push(columnName)
            end
            p tableName
            p columnNames
        end
    end
end

şeklinde olmalıdır.

Böylece TestDbTool.rb dosyasını çalıştırdığımızda bizi bağlandığı veri tabanında yer alan "X" ile başlayan tabloların isimlerini tüm alanları (field) ile birlikte ekrana yazar..

Bir sonraki yazıda 'ODBC' kütüphanesinin detaylarına gireceğiz.

Kolay gelsin :)

Bağlı olduğu kategoriler; Bilgisayar, Ruby (Ruby on Rails)

2 Yorum

  1. metin haliloğlu

    kolay gelsin
    ben delphide bir uygulama gelistirdim odbc ye mysql conectorü 3,51 kurdum localde veri tabanımda sorun yok.sorun su
    veri tabanını kendi makinamda değilde netteki bir domaine attım odbc hata verdi
    yardımların için saol

  2. Tankut ŞENTÜRK

    Hatayı yazarsan yardımcı olabilirim.. Pek çok hata vermiş olabilir. Örneğin eğer Windows XP kullanıyorsan Firewall’un izin vermemiş olabilir.

Yaz aklındakini, çekinme :)

Lütfen: Yorumunuzun değerlendirilmesi ve yayınlanması uzun sürebilir. Yorumunuzu tekrar göndermeniz için bir neden yoktur, inanın tüm yorumları yayınlıyorum. Bazıları hariç :).