Ruby ile Veri Tabanı – 1 (ODBC)

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ı;
[ruby]
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
[/ruby]

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;
[ruby]
# 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
[/ruby]
ş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 :)

Ruby ile Veri Tabanı – 1 (ODBC)” üzerine 3 yorum

  1. 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. Hatayı yazarsan yardımcı olabilirim.. Pek çok hata vermiÅŸ olabilir. ÖrneÄŸin eÄŸer Windows XP kullanıyorsan Firewall’un izin vermemiÅŸ olabilir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir