ACS Mac Application Package の Mac 用 ODBC を試す
「All About ACS: IBM i Access Client Solutions 1.1.8.5 利用可能。Mac 用 AP(ODBCドライバー)も!」で、お知らせしたとおり、ACS に Mac 用の Application Package が利用可能になっています。
「IBM i Access - Client Solutions 5733XJ1」より抜粋します。
Mac Application Package last updated on July 2020 (Latest Updates)
The next available update is planned for September 2020
Features include: ODBC, Programming Toolkit
Linux や IBM i の pase 用ど同様に ODBC が使えるようです。
Mac Application Package の導入
下記で readme が確認できます(Qiita では ftp:// が期待したリンクにならないのでコピペしてください)。
ftp://ftp.software.ibm.com/as400/products/clientaccess/solutions/MacAP/readme_macos.txt
前提として、unixODBC driver manager の導入が必要なこと、unixODBC driver manager は、Homebrew package manager で導入すること、Mac AP の導入前に unixODBC driver manager が導入されていればドライバーの登録は Mac AP の自動で行われる、そうでない場合は手動で後から「 /Library/IBMiAccess/register_driver 」登楼するように、と記述されています。
1.2 PREREQUISITES
------------------
> > The unixODBC driver manager is required for the ODBC driver to function. It can be installed using the Homebrew package manager, available from https://brew.sh. Once Homebrew is installed, unixODBC can then be installed with: > > brew install unixodbc > > If unixODBC is not installed at the time of installation of this service pack, the installer will not be able to register the driver with unixODBC, however the driver can be manually registered once unixODBC has been installed by running the following command: > > /Library/IBMiAccess/register_driverそこで、下記の順番で導入します。
- Homebrew package manager
- unixODBC driver manager
- Mac Application Package
Homebrew package manager の導入
Qiita に「Homebrewのインストール」という記事がありました。
Homebrewページに移動し、記載されているインストールコマンド(シェルスクリプト)をターミナル画面にペーストし実行(Enter)します。
Homebrewページ には、こうあります。
これをmacOSのターミナルまたはLinuxのシェルプロンプトに貼り付けて下さい。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
コマンドを貼り付けて、return を押します。
パスワードの入力が求められます。入力して return を押します。
導入の確認が求められます。return で導入を開始します。
しばらく、時間がががります。導入完了まであせらずに待ってください。
unixODBC driver manager の導入
Homebrew package manager を使って、unixODBC driver manager を導入します。
reaedme に従い、下記を実行します。
brew install unixodbc
導入されました。
Mac Application Package のダウンロード
ACS のダウンロードサイト から Mac Application Package をダウンロードします。
IBM ID でログイン、ライセンスの受諾などのステップをすすめると、ダウンロード可能なモジュールの一覧が表示されます。
「ACS Mac App Pkg」をダウンロードします。
「IBMiAccess_v1r1_macOS_AP.zip」というファイルがダウンロードされました。
Mac Application Package の導入
ダウンロードした「IBMiAccess_v1r1_macOS_AP.zip」Finder でダブルクリックして展開します。
pkg ファイルがあるのが確認できます。
readme.txt に導入方法の記載があります。
1.3 INSTALLING
---------------
The service pack includes a standard macOS installer package. It can be
installed by double clicking it or using the pkgutil command from the command
line.
You may get a message when attempting to run the installer that says
"[package] can't be opened because it is from an unidentified developer" and
the dialog box will only have an "OK" button, preventing the package from
being installed. If this occurs, temporarily override the security controls to
allow its installation by right-clicking or ctrl-clicking on the installer and
choose "Open". This will bring up the same dialog with the same warning, but
now there will be "Open" and "Cancel" buttons instead. By choosing "Open", you
can proceed with the installation.
In case the above steps do not work, you can find more information from Apple
at the following web page:
https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unidentified-developer-mh40616/mac
単純にダブルクリックしましたが、怒られました。
右クリックか control クリックで回避とあります。
by right-clicking or ctrl-clicking
control を押しながら pkg ファイルをクリックし「このアプリケーション開く」「インストーラー」としました。「開く」でもかまいません。
今度は「開く」があります。「開く」をクリックします。
インストーラーが起動しました。「続ける」をクリックします。
unixODBC が前提というメッセージが表示されます。「続ける」をクリックします。
使用条件です。「続ける」をクリックします。
使用許諾に「同意する」をクリックします。
必要ならインストール先を変更します。「インストール」をクリックします。
パスワードを入力して「ソフトウェアをインストール」をクリックします。
導入されました。「閉じる」をクリックします。
ダイアログに「OK」をクリックします。
pkg ファイルをゴミ箱にいれるか聞かれます。このあたりは好みでしょう。
「ゴミ箱にいれる」を選んでも、ゴミ箱にはいるのは pkg だけで、展開されたフォルダーの他のファイルは、そのまま残ります。
/usr/local/etc/odbcinst.ini を確認すると「IBM i Access for macOS ODBC Driver」が登録されているのが確認できます。
onoda@MBPro ~ % cat /usr/local/etc/odbcinst.ini
[IBM i Access ODBC Driver]
Description=IBM i Access for macOS ODBC Driver
Driver=/Library/IBMiAccess/lib/libcwbodbc.dylib
Threading=0
DontDLClose=1
UsageCount=1
Mac Application Package の構成
「odbcinst -j」を実行して、データソースの場所を確認します。
利用する範囲がシステム全体なのかログインユーザーだけかのか、ini 形式かファイル形式か...で場所が変わります。
onoda@MBPro ~ % odbcinst -j
unixODBC 2.3.7
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/onoda/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
今回は自分だけが使うことができればいいので、USER DATA SOURCES である 「/Users/onoda/.odbc.ini」を構成します。
onoda@MBPro ~ % nano /Users/onoda/.odbc.ini
構成内容はこちら。以前 ubuntu で ODBCCreateDataSourceQ4 の GUI を使って、ACS Linux Application Package の ODBC に対して構成したのもを、そのまま使っています。
onoda@MBPro ~ % cat .odbc.ini
[ACS_ODBC]
Description = IBM i Access ODBC Driver
Driver = IBM i Access ODBC Driver
System = myDb2i
UserID = user
Password = password
Naming = 0
DefaultLibraries = QGPL
Database =
ConnectionType = 0
CommitMode = 2
ExtendedDynamic = 1
DefaultPkgLibrary = QGPL
DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
MaxFieldLength = 32
BlockFetch = 1
BlockSizeKB = 128
ExtendedColInfo = 0
LibraryView = ENU
AllowUnsupportedChar = 0
ForceTranslation = 0
Trace = 0
ini の先頭に [ACS_ODBC] あるとおり、「ACS_ODBC」が DNS 名です、
isql で確認しましょう。
「isql DNS名 ユーザー名 パスワード」で接続します。
「Connected!」と出力されたら、接続できています。
「SQL>」のプロンプトに SQL 文を入力して実行します。
終了する時は「quit」です。
onoda@MBPro ~ % isql ACS_ODBC user password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select * from sysibm.sysdummy1
+--------+
| IBMREQD|
+--------+
| Y |
+--------+
SQLRowCount returns -1
1 rows fetched
SQL> quit
onoda@MBPro ~ %
正しく動作しているようです。
日本語処理について
日本語のデータを見てみます。一見正しいようですが、不自然な「?」があるのがわかります。
SQL> SELECT TKBANG, TKΩAKN, TKNAKJ, TKADR1, TKADR2 FROM qeol.tokmsp WHERE TKBANG = '01010'
+-------+---------------------+---------------------+---------------------+---------------------+
| TKBANG| TKNAKN | TKNAKJ | TKADR1 | TKADR2 |
+-------+---------------------+---------------------+---------------------+---------------------+
| 01010 | アイ リヨカン | 阿井旅館 ?| 東京都渋谷区?| 桜ヶ丘29 ?|
+-------+---------------------+---------------------+---------------------+---------------------+
Mac の日本語環境は UTF-8 として動作しています。
onoda@MBPro ~ % export | grep LANG
LANG=ja_JP.UTF-8
UTF-8では文字列の長さがEBCDICとは異なります。1 バイトの半角カナも 2 バイトのDBCS文字も UTF-8 では 3 バイトになります(ごく一部に UTF-8 で 4 バイトになるDBCS文字があります)。
そのため、EBCDIC で 10 バイトの文字に対して、UTF-8 で10 バイト用意するだけでは、データが入り切りません。
10 バイトのカラムにデータを入れてみます。
> create schema acs_test
スキーマACS_TESTが作成されました。
> create table acs_test.tab1 ( col1 char(10) )
テーブルTAB1がACS_TESTに作成された。
> insert into acs_test.tab1 values
('1234567890'),
('アイウエオカキクケコ'),
('あいうえ')
ACS_TESTのTAB1に3行が挿入された。
Mac から ODBC 経由で取得します。
半角カナも 2 バイトのDBCS も UTF-8 では一文字 3 バイトなので、3 文字 9 バイトまでは表示されています。10 バイトに入り切らない 4 文字目の一部が「?」で表示されています。
SQL> select * from acs_test.tab1
+-----------+
| COL1 |
+-----------+
| 1234567890|
| アイウ?|
| あいう?|
+-----------+
SQLRowCount returns -1
3 rows fetched
全体を表示するには 30 バイト必要なので CAST でカラム長を 30 バイトに再定義すれば、全体が取得できます。
SQL> select cast( col1 as char(30) ) from acs_test.tab1
+-------------------------------+
| 00001 |
+-------------------------------+
| 1234567890 |
| アイウエオカキクケコ|
| あいうえ |
+-------------------------------+
SQLRowCount returns -1
3 rows fetched
Excel for Mac からは...利用できません
結論から言うと Excel for Mac からは利用できません。これが一番期待したことだったのですが...
Excel for Mac にも「データ」矢印「新しいデータベースクエリー」があって「データベース」からで、ODBC での取り込みができることを期待させます。
でも、ドライバーマネージャーがインストールされていないというエラーになります。
実は、オープンソースで主要な ODBC ドライバーマネージャーには、ACS で対応している unixODBC の他に iODBC というものもあります。
こちらなら Excel for Mac に対応しています。unixODBC は Excel for Mac に対応していないのです。
(このあたりは Mac の歴史的な経緯に理由があるようです。以前は macOS に ODBC ドライバーマネージャーがついてたようですし。
iODBC の Mac 用 ODBC ドライバーマネージャーは、iODBC のサイトからダウンロードできます。
ここにある mxkozzzz.dmg をインストールしたところ、先ほどの操作でデータソースを選択する iODBC の GUI が起動するようになりました、
しかし、ACS の Mac 用ドライバー は、あくまで unixODBC 用で iODBC には対応していません。当然ですが、ここから追加・構成ができません。Excel for Mac から ACS Mac Application Package の ODBC は利用できません。
2020-08-12 作成
2020-08-13 誤字、イメージリンクの修正
「All About ACS」では IBM i に対する新しいクライアント「IBM i Access Client Solutions」の情報をいろいろ提供していきます。
記事一覧はこちらで確認いたけます。
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。