La culpa fue del spectrum

La culpa fue del spectrum

miércoles, 30 de junio de 2010

SQL desde ruby al AS400

Aquí un breve ejemplo de como haría una consulta SQL al AS400 desde ruby utilizando una conexión ODBC.

require 'rubygems'
require 'odbc'
require 'dbi'

sentencia='select max(FECHA) from biblioteca.TABLA'
dbh = DBI.connect('DBI:ODBC:AS400', 'usu', 'pas')
sth = dbh.prepare(sentencia)
sth.execute
while row=sth.fetch do
eFEC=row[0]
end
sth.finish
dbh.disconnect

Para los que no sepan nada de ruby, require lo utilizamos para indicar las gemas que necesitas, digamos que las gemas son algo parecido a tener programas de servicio, o módulos en ile que vas a utilizar desde este programa.

En sentencia guardo la select que quiero hacer.
En el objeto dbh creo la conexión por odbc utilizando DBI, AS400 es el nombre de la conexión, usu y pas son usuario y contraseña para realizar la conexión.
A sth le asigno la conexión pasando como parámetro la sentencia y después ejecuto (sth.execute).
A row le voy pasando todos los datos que devuelve el cursor de la sentencia, en este caso solo devuelve un registro ya que busco la fecha más reciente, row es una matriz que tiene tantos valores como campos de la tabla tengamos seleccionados, las matrices en ruby empiezan desde cero, en este caso como solo hay un valor paso row[0] a una variable.
Después finalizo la ejecución cerrando el cursor y en la siguiente finalizo la conexión.

Esto es lo que realiza el programa, supongo que alguien experto en ruby lo explicaría mejor, pero estoy seguro de que esto servirá de ayuda a quien quiera empezar ha realizar algo en ruby teniendo que obtener datos del AS400.

Hay mucha información y manuales sobre ruby en la red pero no fue fácil encontrar información sobre como acceder por ODBC y mucho menos a una base de datos de un AS400.

Yo personalmente para la gente que tenga curiosidad recomiendo esta web, aquí podéis descargar la versión gratuita de un libro para empezar a aprender ruby desde cero.

Conduce entre la niebla

La culpa fue del spectrum