2009-10-13 5 views
2

Ok, cela semble être une question en double: SQL Super Search mais c'est une approche différente. Avant je cherchais un moyen efficace et léger de le faire entièrement du côté de la base de données, mais maintenant je me demandais si quelqu'un savait comment faire quelque chose comme ça dans Ruby.Recherche SQL dans Ruby

Je l'ai essayé, et pendant que je peux courir une base

*SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS* 

Je ne peux pas sembler exécuter des requêtes suivantes sans obtenir

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

que quelqu'un peut me montrer un moyen très facile juste exécuter le texte sql et analyser les résultats (et idéalement exécuter plus de requêtes basées sur ces résultats)?

EDIT: Pour clarifier, mon code db à ce jour est le long des lignes de:

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 

Répondre

2

Cet avertissement est un feature, according to Christian Werner. Essayez oConn.finish après oConn.execute et n'oubliez pas de .disconnect à la fin.

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

Je reçois un NoMethodError sur 'drop' – LoveMeSomeCode

+0

merci LoveMe. drop est une méthode odbc; dbi utilise .finish – avguchenko

+0

je l'obtiens toujours avec finition: odbc.rb: 7: méthode non définie 'finish 'pour # (NoMethodError) – LoveMeSomeCode

Questions connexes