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..