Archive for 9月, 2012

  1. 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!
  2. 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!
  3. 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!
  4. 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!
  5. Hello, ADO(JScript) World!

    Posted on 9月 16th, 2012 by cx20

    ADO(JScript)

    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 データベース

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

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.\hello.mdb" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

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

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.\hello.accdb" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

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

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

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

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + SQL Server)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={SQL Server};SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + Oracle)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={Microsoft ODBC for Oracle};Server=ORCL", "scott", "tiger" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + MySQL)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={MySQL ODBC 5.1 Driver};Server=localhost", "root", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.js

    実行結果

    Message
    -----------------
    Hello, ADO World!
  6. Hello, DAO(JScript) World!

    Posted on 9月 15th, 2012 by cx20

    DAO

    DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
    長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(JScript + DAO + Jet データベース)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase("Hello.mdb");
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ACE データベース)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.120");
        var db = dbe.OpenDatabase("Hello.accdb");
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ODBC + SQL Server)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase( "", false, false, 
              "ODBC;Driver={SQL Server};"
            + "SERVER=(local);DATABASE=master;" 
            + "UID=sa;PWD=P@ssW0rd" );
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ODBC + Oracle)

    var dbOpenSnapshot = 4;
    var dbSQLPassThrough = 64;
     
    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase( "", false, false, 
              "ODBC;Driver={Oracle in OraDb11g_home1};"
            + "DBQ=ORCL;" 
            + "UID=scott;PWD=tiger" );
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
        // パススルークエリの例(データベース側に依存する SQL を実行する場合)
        //var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough );
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.js

    実行結果

    Message
    -----------------
    Hello, DAO World!
  7. Hello, oo4o(VBA) World!

    Posted on 9月 14th, 2012 by cx20

    oo4o

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

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

    Option Explicit
     
    Sub Main()
        Dim ses
        Dim db
        Dim rs
        Set ses = CreateObject("OracleInProcServer.XOraSession")
        Set db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 )
        Set rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4)
        While NOT rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
       Wend
    End Sub

    実行結果

    MESSAGE
    ------------------
    Hello, oo4o World!
  8. Hello, ADO(VBA) World!

    Posted on 9月 13th, 2012 by cx20

    ADO(VBA)

    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 データベース

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

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.hello.mdb"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

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

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.hello.accdb"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

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

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=SQLOLEDB;" & _
             "SERVER=(local);DATABASE=master;", _
             "sa", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

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

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBA + ADO + ODBC + SQL Server)

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={SQL Server};" & _
            "SERVER=(local);DATABASE=master;", _
            "sa", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBA + ADO + ODBC + Oracle)

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={Microsoft ODBC for Oracle};Server=ORCL", _
            "scott", "tiger"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBA + ADO + ODBC + MySQL)

    Option Explicit
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={MySQL ODBC 5.1 Driver};Server=localhost", _
            "root", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-------------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    実行結果

    Message
    -----------------
    Hello, ADO World!
  9. Hello, DAO(VBA) World!

    Posted on 9月 12th, 2012 by cx20

    DAO

    DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
    長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(VBA + DAO + Jet データベース)

    Option Explicit
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("Hello.mdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-----------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBA + DAO + ACE データベース)

    Option Explicit
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.120")
        Set db = dbe.OpenDatabase("Hello.accdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-----------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBA + DAO + ODBC + SQL Server)

    Option Explicit
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={SQL Server};" & _
            "SERVER=(local);DATABASE=master;" & _
            "UID=sa;PWD=P@ssW0rd;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-----------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBA + DAO + ODBC + Oracle)

    Option Explicit
     
    Const dbOpenSnapshot = 4
    Const dbSQLPassThrough = 64
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={Oracle in OraDb11g_home1};" & _
            "DBQ=ORCL;" & _
            "UID=scott;PWD=tiger;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
        ' パススルークエリの例(データベース側に依存する SQL を実行する場合)
        'Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough)
     
        While Not rs.EOF
            Debug.Print rs(0).Name
            Debug.Print "-----------------"
            Debug.Print rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    実行結果

    Message
    -----------------
    Hello, DAO World!
  10. Hello, ODP.NET(PowerShell) World!

    Posted on 9月 11th, 2012 by cx20

    ODP.NET(PowerShell)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(PowerShell + ODP.NET + Oracle)

    [void][Reflection.Assembly]::LoadWithPartialName("Oracle.DataAccess")
    $conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    $sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
    $con = New-Object Oracle.DataAccess.Client.OracleConnection($conStr)
    $cmd = New-Object Oracle.DataAccess.Client.OracleCommand($sqlStr, $con)
    $con.Open()
    $reader = $cmd.ExecuteReader()
    while ( $reader.read() )
    {
        $reader.getName(0)
        "---------------------"
        $reader[0]
    }
    $con.Close()

    実行方法

    C:¥> PowerShell -file Hello.ps1

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!