2009-10-13 94 views
2

好吧,這似乎是一個重複的問題: SQL Super Search 但它是一種不同的方法。在我尋找一種精簡且高效的方式完全在數據庫方面完成之前,現在我想知道是否有人知道如何在Ruby中做這樣的事情。SQL在紅寶石搜索

我試過這個,雖然我可以運行一個基本

*SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS* 

我不能似乎沒有得到

' WARNING: #<ODBC::Statement:0x2c73e84> was not dropped before garbage collection. ' 

有人能告訴我一個非常簡單的方法運行後續查詢只運行sql文本並解析結果(理想情況下根據這些結果運行更多查詢)?

編輯:爲了澄清,我的數據庫代碼到目前爲止是沿着線:

oConn = DBI.connect('DBI:ODBC:AX') 
oConn2 = DBI.connect('DBI:ODBC:AX') 

sth = oConn.execute("Select table\_name, column\_name from information\_schema.columns") 
sth.fetch do |row| 
    table = row["table\_name"] 
    column = row["column\_name"] 
    puts table + "," + column 
#Dynamic sql here 
    sth2.fetch do |row2| 
    puts row2[0] 
    end 
end 
sth.finish 

回答

2

這一警告是feature, according to Christian Werner。在oConn.execute之後嘗試oConn.finish,最後不要忘記.disconnect

irb(main):033:0> require 'dbi' 
=> false 

irb(main):034:0> oConn=DBI.connect('DBI:ODBC:Blacklisted') 
=> #<DBI::DatabaseHandle:0x2d50af0 @trace_mode=2, @handle=#<DBI::DBD::ODBC::Database:0x2d50a3c @attr={}, @handle=#<ODBC::Database:0x2d50a64>>, @trace_output=#<IO:0x2846adc>> 

irb(main):035:0> sth = oConn.execute("Select * from blacklistednews where id=12140") 
=> #<DBI::StatementHandle:0x2d4c838 @trace_mode=2, @fetchable=true, @row=[nil, nil, nil, nil, nil, nil], @handle=#<DBI::DBD::ODBC::Statement:0x2d4c784 @arr=[],@params=[], handle=#<ODBC::Statement:0x2d4c7c0>>, @cols=["id", "title", "url","description", "pubdate", "synced"], @trace_output=#<IO:0x2846adc>, @prepared=false> 

irb(main):036:0> sth.finish 
=> nil 

irb(main):037:0> oConn.disconnect 
=> nil 

irb(main):038:0> 
+0

我得到一個NoMethodError'Drop' – LoveMeSomeCode 2009-11-18 16:48:45

+0

感謝LoveMe。 drop是一種odbc方法; dbi使用.finish – avguchenko 2009-11-18 18:20:34

+0

我仍然完成: odbc.rb:7:未定義的方法'完成'爲#(NoMethodError) – LoveMeSomeCode 2009-11-18 19:23:41