DBI: number of rows updated?

Is there a way with the DBI gem to figure out how many rows were
touched? I have the following ugly and naive code which, of course,
doesn't give me the number of rows updated (but works like a charm
otherwise):

def run_query query
  begin
    dbh = DBI.connect( 'DBI:ODBC:PACS' )
    statement_handle = dbh.prepare query
    statement_handle.execute
    rows = statement_handle.rows
    statement_handle.finish
    dbh.commit
  rescue DBI::DatabaseError => e
    puts "An error occurred"
    puts "Error code: #{e.err}"
    puts "Error message: #{e.errstr}"
    dbh.rollback
  ensure
    # disconnect from server
    dbh.disconnect if dbh
  end
  return rows rescue 0
end

  def fix_ultrasounds
    rows_updated = 0
    [UPDATE_QUERY1, UPDATE_QUERY2].each do |q|
      rows_updated += run_query q
    end
    puts "#{rows_updated} rows updated."
  end

···

--
Posted via http://www.ruby-forum.com/.

With Ruby 1.8.4 and DBI 0.1.0 this line works as expected for me. Have
you checked the value of rows right after it's assigned? Maybe there's
something else going on.

Jeremy

···

On Dec 24, 7:35 am, Aldric Giacomoni <ald...@trevoke.net> wrote:

Is there a way with the DBI gem to figure out how many rows were
touched?

rows = statement\_handle\.rows

Aldric Giacomoni wrote:

    statement_handle.execute

Have you checked the return value from this lin?

  return rows rescue 0

The 'rescue 0' is superfluous here, it can never be triggered.

Maybe you want:

  return rows || 0

(i.e. if rows is nil, return 0). Note that even if the statement which
assigns to rows has never been executed, it will contain nil.

e.g.

  if false
    foo = 123
  end
  puts foo.inspect # shows nil

···

--
Posted via http://www.ruby-forum.com/\.

yermej wrote:

···

On Dec 24, 7:35�am, Aldric Giacomoni <ald...@trevoke.net> wrote:

Is there a way with the DBI gem to figure out how many rows were
touched?

� � rows = statement_handle.rows

With Ruby 1.8.4 and DBI 0.1.0 this line works as expected for me. Have
you checked the value of rows right after it's assigned? Maybe there's
something else going on.

Jeremy

It all looks fine, and works fine when separated from the rest of the
code; so it must be broken somewhere else. Thanks for helping me check
this bit, both of you :slight_smile:
--
Posted via http://www.ruby-forum.com/\.