CDATAのSAS.ds対応が正式版に!
気づいたら9/27に正式版がリリースされていたみたいです。
問い合わせをしたら前回の担当者が申し訳なさげに、前回報告してくれた不具合は直ったよ、ここから最新版をダウンロードしてみてね、と連絡が来ました。
ウッキウッキしながら洗い物を終わらせ、検証を始めます…。
CDATA SAS Dataset対応についての経緯はこちらからどうぞ
CDATAにSAS.ds対応が来た! - 我輩はブロガーではない。ネタもまだない
CDATAにSAS.ds対応が来た! その2 - 我輩はブロガーではない。ネタもまだない
CDATA SAS.dsを使ってみる(その1:データセットアクセス編) - 我輩はブロガーではない。ネタもまだない
CDATA SAS.dsを使ってみる(その2:属性編) - 我輩はブロガーではない。ネタもまだない
CDATA SAS.dsを使ってみる(その3:CRUD編) - 我輩はブロガーではない。ネタもまだない
CDATA SAS.dsを使ってみる(その4:追加検証編) - 我輩はブロガーではない。ネタもまだない
前回の検証後、使えないからもういらないや、と捨ててしまった環境を再度構築します。
ブログが役に立ちました。人様には役に立たなくても自分に役に立てばいいですね!
2. Delphiの新規アプリケーション作成で
TFDPhysCDataSASDataSetsDriverLink
TFDConnection
TFDQuery
TFDGUIxWaitCursor
TFDMetaInfoQuery
TDBGrid
TDatasource
TCombobox
TButton
をフォームに貼り付けます。
3. FDConnection1をダブルクリックしてドライバIDから「CDataSASDataSets」を選択して閉じます。
4. フォームをダブルクリックしてonFormCreateに以下のコードを書きます
FDConnection1.Params.Add('URI=C:\Temp'); combobox1.Text:=''; combobox1.Items.Clear; combobox1.Items.Add(''); FDMetaInfoQuery1.Connection := FDConnection1; FDMetaInfoQuery1.MetaInfoKind := mkTables; FDMetaInfoQuery1.Open; while(not(FDMetaInfoQuery1.Eof))do begin combobox1.Items.Add(FDMetaInfoQuery1.FieldByName('TABLE_NAME').AsString); FDMetaInfoQuery1.Next; end; FDMetaInfoQuery1.Close;
5. Button1をダブルクリックして、onClickに以下のコードを書きます
fdquery1.Close; fdquery1.SQL.Text:='select * from '+combobox1.Items[combobox1.ItemIndex]+';'; fdquery1.Open(); DataSource1.DataSet:=fdquery1;
これだけ。すげー簡単。
SASでは以下のコードをsubmitし、テストデータを作成します。
/* サンプルデータ */
data temp.test;
length char $5;
do i=1 to 50;
char=' '||byte(64+i)||' ';
output;
end;
run;
/* PWでパスワードを指定 */
data temp.pw(pw=abc);
set temp.test(firstobs=2);
run;
/* READ、WRITE、ALTERパスワードを別々に指定 */
data temp.rwa(read=a write=b alter=c);
set temp.test(firstobs=4);
run;
/* パスワード+暗号化 */
data temp.enc(pw=abc encrypt=yes);
set temp.test(firstobs=6);
run;
/* 圧縮 */
data temp.cmp(compress=yes);
set temp.test(firstobs=7);
run;
/* フォーマット確認 */
data temp.fmt;
length char $10;
format
time time8.
yymmdd yymmdd10.
e8601dt e8601dt19.
date date9.
weekdate weekdate21.
nengo nengo9.
jnengo jnengo16.
jdateymd jdateymd14.
datetime datetime16.
yen yen8.
dollar dollar12.2
comma comma7.
z z7.
hex hex6.
best12 best12.
best32 best32.
;
array n{*} _numeric_;
do i=1 to dim(n);
n{i}=10000;
end;
char='SAMPLE';
best12=1234567890.1234567;
best32=1234567890.1234567;
drop i;
run;
最後に、DelphiでF9実行し、動作を確認します。
- 相変わらず、パスワードは無視してくれます。
- 圧縮データセットは正しくアクセスできるようになりました
- 暗号化データセットは未だ読めず
続いて、SQLを実行してみます。
FDConnectionのSQLタブから
create table NEWDS (name VARCHAR(20), age INT);
で新しいデータセットを作成し、
insert into NEWDS (name,age) values ('Taro',30),('山田',31);
でobsを追加し、
update NEWDS set name='' where age=30;
でupdatぉぉ…
同じエラーです。
やっぱり対応してないんですね。(deleteも同じでした)
ちゃんちゃん。