Ruby ile Veri Tabanı – 4 (ODBC)

Bir önceki yazımızda artık ODBC modülü ile ilgili birçok sorumuza cevap bulmuştuk. Bu cevaplarla beraber bir iki adet faydalı örnek de vermiştik.

Bugün çalışmalarımızı örnekler üzerine yoğunlaştıralım ve örnekleri detaylı bir biçimde inceleyelim.
Örnek-1
[ruby]require “DbTool.rb”

myDriver = DbTool.new()

myDriver.getDb() do |db|
tableArr = db.tables().fetch_all
tableArr.each do |table|
tblType = table[3]
tblName = table[2]
if tblType != “SYSTEM TABLE” && tblType != “VIEW” && tblName!= “dtproperties” then
count = db.run(“SELECT COUNT(*) FROM dbo.[” + tblName+ “]”).fetch_all
puts “Table = ” + tblName+ “(” + count.to_s + “)”
end
end
tableArr.clear
end[/ruby]
Yukarıda verilen Örnek-1’i incelemeye baÅŸlarsak; Öncelikle

[ruby]require “DbTool.rb”

myDriver = DbTool.new()

myDriver.getDb() do |db|
….
….
….
end[/ruby]
bölümlerinin DbTool sınıfı kullanımı esnasında standart iÅŸlemler olduÄŸunu ve ‘db’ deÄŸiÅŸkeni içerisinde veri tabanı baÄŸlantısı gerekli olan ODBC::Database sınıfından bir nesne bulunur. Aynı zamanda ‘DbTool.getDb()’ method’u içerisinde tüm hata yakalama ve iÅŸlem sonucunda baÄŸlantıyı koparma ve kaynakları serbest bırakma iÅŸlemleri yer aldığından bunları burada yapmamıza gerek yok.

Bununla beraber
[ruby]
tableArr = db.tables().fetch_all
tableArr.each do |table|
tblType = table[3]
tblName = table[2]
….
end
tableArr.clear[/ruby]
bloÄŸu içerisinde de tüm tabloların “fetch_all” iÅŸlemi ile beraber alınması ile veriler “Disconnected” yani baÄŸlantısız ÅŸekilde elde ederiz. Daha sonra bu dizi üzerinde “each” ile beraber her satırda yer alan bilgiler iÅŸleniyor. “table” deÄŸiÅŸkeni de aynı zamanda bir diziyi ifade eder, bu ÅŸekilde 3. eleman tablonun tipini, 2. elemanı ise tablonun adını belirtir. Daha sonrasında;
[ruby]
if tblType != “SYSTEM TABLE” && tblType != “VIEW” && tblName!= “dtproperties” then
count = db.run(“SELECT COUNT(*) FROM dbo.[” + tblName+ “]”).fetch_all
puts “Table = ” + tblName+ “(” + count.to_s + “)”
end

[/ruby]
tipi “SYSTEM TABLE” ve “VIEW” olmayan aynı zamanda ismi “dtproperties” olmayan tabloları üzerinde iÅŸlem yapacağımızı belirtir ve tablolarda kaç adet kayıt olduÄŸunu öğrenmek için SELECT.. cümlesi hazırlanıp, db deÄŸiÅŸkeni kullanılarak koÅŸturulur. Dönen sonuç gene baÄŸlantısız bir biçimde “count” bilgisine yazılır. Ve bu bilgiler ekrana yazılır.

Soru: Neden bağlantısız veri akışı kullanıyoruz ?
Yanıt: EÄŸer bu ÅŸekilde baÄŸlantısız veri akışı kullanmaz isek, aynı anda açık birçok ODBC::Statement ortaya çıkacaktır. Fakat varsayılan olarak ODBC modülü bu ÅŸekilde tasarlanmamıştır, aynı iki ODBC::Statement açık olduÄŸunda “Connection is busy with results for another hstmt” hatası alınır. Benim önerim, güvenli çalışma için her zaman baÄŸlantısız nesneler kullanmamızdır.

Soru: getDb methodu neden “yield” kullanılarak yazıldı?
Yanıt: Her zaman data kurtarma, bağlantı kapatma ve hata yakalayıcıların yazılmasını istemiyorsak, bu şekilde yazım standardını kabul etmemiz gerekir. Ruby kullanıyorsanız bu şekilde bir yazım şeklini tercih etmelisiniz :).

Kolay gelsin..

Bir Cevap Yazın

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