2009-10-13 97 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