したがって、RubyでMS SQLデータベースへのクエリを実行していますが、すべて問題ありません。FreeTDS / ODBCのセットアップがあり、笑っています。どこからともなく、クエリの1つでこのエラーが発生します。
/home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in `fetch': negative string size (or size too big) (ArgumentError)
from /home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in `fetch'
from /home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220:in `fetch'
なに?さて、他のクエリは問題ありませんが、何らかの理由でこれは失敗します。クエリは「select*from[Provider]」です。かなり簡単です。クエリはMSSQLServerで問題なく実行されます。このクエリは、Ruby + FreeTDS+ODBCでセットアップした別のマシンで実行されていました。うーん..
次に、これを使用して簡単なrubyファイルを作成します。
#!/usr/bin/env ruby
require 'dbi'
db = DBI.connect('dbi:ODBC:MYDB', 'blahblah', 'blahblah')
select = db.prepare('select * from [Provider]')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
それはばかげています。次に、次のように、(*ではなく)いくつかの列を選択します。
#!/usr/bin/env ruby
require 'dbi'
db = DBI.connect('dbi:ODBC:MYDB', 'blahblah', 'blahblah')
select = db.prepare('select Address1, Address2 from [Provider]')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
そしてそれはうまくいきます!したがって、クエリを変更して、個々の列を選択するだけで(クエリで約13列のみを使用)、正常に機能しています。表の列の総数を数えたところ、103個あります。
だから、私は興味があると思います:なぜこれが私にぶつかるのですか?103列が多すぎて処理できませんか?
私は64ビットのDebianマシンで実行しており、VPN経由でオフィスに接続しています(MS SQL ServerマシンはオフィスLAN上にあります)。初めてこのようなエラーを見ました。
誰かアイデアはありますか?