Monday, June 1, 2009

Ruby et bases MS Access: Olé !!

J'ai eu besoin d'automatiser quelques manipulations de bases de données MS-Access. Une possibilité en Ruby est d'utiliser les ActiveX ADO grâce au module win32ole. Je vais montrer l'utilisation de ce module avant d'attaquer MS Access


Voici un exemple de pilotage d'Internet Explorer via OLE. Commençons par lancer irb et importer le module win32ole:

C:\sandbox>irb
irb(main):001:0> require "win32ole"
=> true

Créons une nouvelle instance d'Internet Explorer:


ie = WIN32OLE.new("InternetExplorer.Application")

Pour connaître la liste des attributs d'un objet OLE, on utilise WIN32OLE::ole_get_methods:

irb(main):002:0> ie.Application.ole_get_methods
=> [Application, Parent, Container, Document, TopLevelContainer, Type, Left, Top, 
Width, Height, LocationName, LocationURL, Busy, Name, HWND, FullName, Path, 
Visible, StatusBar, StatusText, ToolBar, MenuBar, FullScreen, ReadyState, Offline,
Silent, RegisterAsBrowser, RegisterAsDropTarget, TheaterMode, AddressBar, 
Resizable]

Affichons la fenêtre et allons sur un site au hasard :)

irb(main):003:0> ie.Visible=true
=> true
irb(main):004:0> ie.Navigate("http://magaloma.blogspot.com")
=> nil

Fini de jouer:

irb(main):005:0> ie.Quit
=> nil

Pour se connecter à une base MS Access, nous utilisons l'ActiveX ADODB.Connection. Par exemple:

dbcon = WIN32OLE.new("ADODB.Connection")
dbcon.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bibliotheque.mdb")

ADOX.Catalog perment d'inspecter la base:

catalog = WIN32OLE.new('ADOX.Catalog')
catalog.ActiveConnection = dbcon
catalog.Tables.count
=> 11
catalog.Tables.Item(0).Name
=> "auteurs"

On peut ensuite récupérer quelques enregistrements avec ADODB.Recordset:

recordset = WIN32OLE.new('ADODB.Recordset')
recordset.Open("SELECT * FROM livres", dbcon)

Pour ressortir les noms des champs:

recordset.Fields.each {|f| puts f.Name}

Ce qui nous retourne:

id
titre
autheur_id

GetRows permet de récupérer les données:

recordset.GetRows.transpose
=> [[1, "Pragmatic Thinking And Learning", 1], [2, "Art Of Unix Programming", 2]
, [3, "Practices Of An Agile Developper", 1]]

Voilà. Merci au site Ruby On Windows pour m'avoir bien aidé.

No comments:

Post a Comment