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:
idtitre
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