1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

All About ACS: ACS Mac Application Package の Mac 用 ODBC を試す

Last updated at Posted at 2020-08-12

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 を押します。

image.png

パスワードの入力が求められます。入力して return を押します。
導入の確認が求められます。return で導入を開始します。

image.png

しばらく、時間がががります。導入完了まであせらずに待ってください。

image.png

unixODBC driver manager の導入

Homebrew package manager を使って、unixODBC driver manager を導入します。
reaedme に従い、下記を実行します。

brew install unixodbc

導入されました。

image.png

Mac Application Package のダウンロード

ACS のダウンロードサイト から Mac Application Package をダウンロードします。
IBM ID でログイン、ライセンスの受諾などのステップをすすめると、ダウンロード可能なモジュールの一覧が表示されます。

「ACS Mac App Pkg」をダウンロードします。

image.png

「IBMiAccess_v1r1_macOS_AP.zip」というファイルがダウンロードされました。

Mac Application Package の導入

ダウンロードした「IBMiAccess_v1r1_macOS_AP.zip」Finder でダブルクリックして展開します。

pkg ファイルがあるのが確認できます。

image.png

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

単純にダブルクリックしましたが、怒られました。

image.png

右クリックか control クリックで回避とあります。

by right-clicking or ctrl-clicking

control を押しながら pkg ファイルをクリックし「このアプリケーション開く」「インストーラー」としました。「開く」でもかまいません。

image.png

今度は「開く」があります。「開く」をクリックします。

image.png

インストーラーが起動しました。「続ける」をクリックします。

image.png

unixODBC が前提というメッセージが表示されます。「続ける」をクリックします。

image.png

使用条件です。「続ける」をクリックします。

image.png

使用許諾に「同意する」をクリックします。

image.png

必要ならインストール先を変更します。「インストール」をクリックします。

image.png

パスワードを入力して「ソフトウェアをインストール」をクリックします。

image.png

導入されました。「閉じる」をクリックします。

image.png

ダイアログに「OK」をクリックします。

image.png

pkg ファイルをゴミ箱にいれるか聞かれます。このあたりは好みでしょう。
「ゴミ箱にいれる」を選んでも、ゴミ箱にはいるのは pkg だけで、展開されたフォルダーの他のファイルは、そのまま残ります。

image.png

/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

image.png

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 バイトのカラムにデータを入れてみます。

image.png

> 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 での取り込みができることを期待させます。

image.png

でも、ドライバーマネージャーがインストールされていないというエラーになります。

image.png

実は、オープンソースで主要な ODBC ドライバーマネージャーには、ACS で対応している unixODBC の他に iODBC というものもあります。

こちらなら Excel for Mac に対応しています。unixODBC は Excel for Mac に対応していないのです。
(このあたりは Mac の歴史的な経緯に理由があるようです。以前は macOS に ODBC ドライバーマネージャーがついてたようですし。

iODBC の Mac 用 ODBC ドライバーマネージャーは、iODBC のサイトからダウンロードできます。

ここにある mxkozzzz.dmg をインストールしたところ、先ほどの操作でデータソースを選択する iODBC の GUI が起動するようになりました、

image.png

しかし、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やビジネスパートナーに問い合わせることは、固くお断りします。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?