1. Hello, ODBC(Python) World!

    Posted on 9月 26th, 2012 by cx20

    DB API

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    Python DB API は Python 向けの Database Interface(API)である。
    ODBC ドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Python + DB API + ODBC + SQL Server)

    import pyodbc
     
    cn = pyodbc.connect("DRIVER={SQL Server};SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd")
    cur = cn.cursor()
    cur.execute("SELECT 'Hello, ODBC World!' AS Message")
    rows = cur.fetchall()
     
    for row in rows:
        print "Message"
        print "-------------------"
        print row[0]
     
    cur.close()
    cn.close()

    実行方法(Windows)

    C:¥> python hello.py

    実行結果

    Message
    -----------------
    Hello, ODBC World!
  2. Hello, ADO(Python) World!

    Posted on 9月 25th, 2012 by cx20

    ADO(Python)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    以下は Python による ADO ライブラリの使用例となっている。

    ソースコード(Python + ADO + OLEDB + Jet データベース)

    import win32com.client
     
    cn = win32com.client.Dispatch('ADODB.Connection')
    cn.Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.hello.mdb" )
    rs = cn.Execute( "SELECT 'Hello, ADO World!' AS Message" )[0]
    while not rs.EOF:
        print rs.Fields(0).Name
        print "-------------------"
        print rs.Fields(0).Value
        rs.MoveNext()
     
    rs.Close()
    cn.Close()

    ソースコード(Python + ADO + OLEDB + ACE データベース)

    import win32com.client
     
    cn = win32com.client.Dispatch('ADODB.Connection')
    cn.Open( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.hello.accdb" )
    rs = cn.Execute( "SELECT 'Hello, ADO World!' AS Message" )[0]
    while not rs.EOF:
        print rs.Fields(0).Name
        print "-------------------"
        print rs.Fields(0).Value
        rs.MoveNext()
     
    rs.Close()
    cn.Close()

    ソースコード(Python + ADO + OLEDB + SQL Server)

    import win32com.client
     
    cn = win32com.client.Dispatch('ADODB.Connection')
    cn.Open( "Provider=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" )
    rs = cn.Execute( "SELECT 'Hello, ADO World!' AS Message" )[0]
    while not rs.EOF:
        print rs.Fields(0).Name
        print "-------------------"
        print rs.Fields(0).Value
        rs.MoveNext()
     
    rs.Close()
    cn.Close()

    ソースコード(Python + ADO + OLEDB + Oracle)

    import win32com.client
     
    cn = win32com.client.Dispatch('ADODB.Connection')
    cn.Open( "Provider=MSDAORA;Data Source=ORCL", "scott", "tiger" )
    rs = cn.Execute( "SELECT 'Hello, ADO World!' AS Message FROM DUAL" )[0]
    while not rs.EOF:
        print rs.Fields(0).Name
        print "-------------------"
        print rs.Fields(0).Value
        rs.MoveNext()
     
    rs.Close()
    cn.Close()

    実行方法(Windows)

    C:¥> python hello.py

    実行結果

    Message
    -----------------
    Hello, ADO World!
  3. Hello, DB API(Python) World!

    Posted on 9月 24th, 2012 by cx20

    DB API

    Python DB API は Python 向けの Database Interface(API)である。
    各データベースドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Python + DB API + MySQL)

    import MySQLdb
     
    cn = MySQLdb.connect(db="test", host="127.0.0.1", port=3306, user="root", passwd="P@ssW0rd")
    cur = cn.cursor()
    cur.execute("SELECT 'Hello, DB API World!' AS Message")
    rows = cur.fetchall()
     
    for row in rows:
        print "Message"
        print "-------------------"
        print row[0]
     
    cur.close()
    cn.close()

    実行方法(Windows)

    C:¥> python hello.py

    実行結果

    Message
    -----------------
    Hello, DB API World!
  4. Hello, ODBC(Ruby) World!

    Posted on 9月 23rd, 2012 by cx20

    DBI

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    DBI は Ruby 向けの Database Interface(API)である。
    DBI 用 ODBC ドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Ruby + DBI + ODBC + SQL Server)

    require 'rubygems'
    require "dbi"
    dbh = DBI.connect("DBI:ODBC:Driver={SQL Server};Server=(local);DATABASE=master", "sa", "P@ssW0rd")
    sth = dbh.prepare("SELECT 'Hello, DBI World' AS Message")
    sth.execute()
    while row = sth.fetch do
        print "Message", "n";
        print "-------------------n";
        print row[0]
    end
    sth.finish
    dbh.disconnect

    ライブラリ導入方法

    C:¥> gem install dbi
    C:¥> gem install dbd-odbc

    以下のエラーが出る場合は、odbc.so と odbc_utf8.so が足りていない可能性がある為、ODBC Binding for Ruby より i386-msvcrt-ruby-odbc.zip を入手し、%RUBY_HOME%librubysite_ruby1.8i386-msvcrt にコピーする必要がある。

    C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:300:in `load_driver': Unable to load driver 'ODBC' (underlying error: uninitialized constant DBI::DBD::ODBC) (DBI::InterfaceError)
            from C:/ruby-1.8/lib/ruby/1.8/monitor.rb:242:in `synchronize'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect'
            from hello.rb:3

    なお、2012.09 現在、1.9 版のライブラリは提供されていない模様。

    実行方法(Windows)

    C:¥> ruby hello.rb

    実行結果

    Message
    -----------------
    Hello, DBI World!
  5. Hello, ADO(Ruby) World!

    Posted on 9月 22nd, 2012 by cx20

    ADO(Ruby)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    ソースコード(Ruby + ADO + OLEDB + Jet データベース)

    require 'win32ole'
     
    cn = WIN32OLE.new("ADODB.Connection")
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\Hello.mdb"
    rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
    while !rs.EOF
        print rs.Fields[0].name + "n"
        print "-------------------n"
        print rs.Fields[0].value + "n"
        rs.MoveNext
    end
     
    rs.Close
    cn.Close

    ソースコード(Ruby + ADO + OLEDB + ACE データベース)

    require 'win32ole'
     
    cn = WIN32OLE.new("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Hello.accdb"
    rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
    while !rs.EOF
        print rs.Fields[0].name + "n"
        print "-------------------n"
        print rs.Fields[0].value + "n"
        rs.MoveNext
    end
     
    rs.Close
    cn.Close

    ソースコード(Ruby + ADO + OLEDB + SQL Server)

    require 'win32ole'
     
    cn = WIN32OLE.new("ADODB.Connection")
    cn.Open "Provider=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd"
    rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
    while !rs.EOF
        print rs.Fields[0].name + "n"
        print "-------------------n"
        print rs.Fields[0].value + "n"
        rs.MoveNext
    end
     
    rs.Close
    cn.Close

    ソースコード(Ruby + ADO + OLEDB + Oracle)

    require 'win32ole'
     
    cn = WIN32OLE.new("ADODB.Connection")
    cn.Open "Provider=MSDAORA;Data Source=ORCL", "scott", "tiger"
    rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
    while !rs.EOF
        print rs.Fields[0].name + "n"
        print "-------------------n"
        print rs.Fields[0].value + "n"
        rs.MoveNext
    end
     
    rs.Close
    cn.Close

    実行方法(Windows)

    C:¥> ruby hello.rb

    実行結果

    Message
    -----------------
    Hello, ADO World!
  6. Hello, DBI(Ruby) World!

    Posted on 9月 21st, 2012 by cx20

    DBI

    DBI は Ruby 向けの Database Interface(API)である。
    各データベースドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Perl + DBI + MySQL)

    require "dbi"
    dbh = DBI.connect("dbi:Mysql:test:localhost", "root", "P@ssW0rd")
    sth = dbh.prepare("SELECT 'Hello, DBI World' AS Message")
    sth.execute()
    while row = sth.fetch do
        print "Message", "n";
        print "-------------------n";
        print row[0]
    end
    sth.finish
    dbh.disconnect

    ライブラリ導入方法

    C:¥> gem install dbi
    C:¥> gem install dbd-mysql

    実行方法(Windows)

    C:¥> ruby hello.rb

    実行結果

    Message
    -----------------
    Hello, DBI World!
  7. Hello, ODBC(Perl) World!

    Posted on 9月 20th, 2012 by cx20

    ODBC

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(Perl + ODBC + SQL Server)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={SQL Server};Server=(local);UID=sa;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    ソースコード(Perl + ODBC + MySQL)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    ------------------
    Hello, ODBC World!
  8. Hello, ADO(Perl) World!

    Posted on 9月 19th, 2012 by cx20

    ADO(Perl)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    ソースコード(Perl + ADO + OLEDB + Jet データベース)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.\hello.mdb" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + ACE データベース)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.\hello.accdb" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + SQL Server)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    ソースコード(Perl + ADO + OLEDB + Oracle)

    use strict;
    use Win32::OLE;
     
    my $cn = Win32::OLE->new("ADODB.Connection");
    $cn->Open( "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger" );
    my $rs = $cn->Execute( "SELECT 'Hello, ADO World!' AS Message FROM DUAL" );
     
    while ( !$rs->EOF ) {
        print $rs->Fields(0)->{Name}, "n";
        print "-------------------n";
        print $rs->Fields(0)->{Value}, "n";
       $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    -----------------
    Hello, ADO World!
  9. Hello, DBI(Perl) World!

    Posted on 9月 18th, 2012 by cx20

    DBI

    DBI は Perl 向けの Database Interface(API)である。
    各データベースドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Perl + DBI + ODBC + SQL Server)

    use strict;
    use DBI;
     
    my $dbh = DBI->connect('dbi:ODBC:Driver={SQL Server};Server=(local)', 'sa', 'P@ssW0rd');
    my $sth = $dbh->prepare("SELECT 'Hello, DBI World' AS Message");
    $sth->execute();
     
    while (my $row = $sth->fetchrow_array) {
        print "Message", "n";
        print "-------------------n";
        print $row, "n";
    }
    $sth->finish();
    $dbh->disconnect();

    ソースコード(Perl + DBI + MySQL)

    use strict;
    use DBI;
     
    my $dbh = DBI->connect('dbi:mysql:test', 'root', 'P@ssW0rd');
    my $sth = $dbh->prepare("SELECT 'Hello, DBI World' AS Message");
    $sth->execute();
     
    while (my $row = $sth->fetchrow_array) {
        print "Message", "n";
        print "-------------------n";
        print $row, "n";
    }
    $sth->finish();
    $dbh->disconnect();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    -----------------
    Hello, DBI World!
  10. Hello, oo4o(JScript) World!

    Posted on 9月 17th, 2012 by cx20

    oo4o

    oo4o(Oracle Objects for OLE)は、COM ベースの Oracle Database 接続用 API である。
    Windows 環境で VB による開発に用いられることが多い。

    ソースコード(JScript + oo4o + Oracle)

    main();
     
    function main() {
        var ses = new ActiveXObject("OracleInProcServer.XOraSession");
        var db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 );
        var rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4);
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

    実行方法

    C:¥> CScript //Nologo Hello.js

    実行結果

    MESSAGE
    ------------------
    Hello, oo4o World!