NB.ado wrapper
NB.
NB. module for data access with ADO
NB.
NB. REQUIREMENT
NB.
NB. MDAC 2.6, or above
NB. http://msdn.microsoft.com/data
NB.
NB. USAGE
NB.
NB. cs=. prompt_ado_''
NB. myado=: cs&rs_ado_
NB. myado 'select * from tdata'
NB. Macdonald B F D101 19590600
NB. Genereaux S F D103 19450300
NB. ...
NB. Livingston P F D101 19580900
NB. Holliss D F D101 19600500
NB.
NB. Author: Oleg Kobchenko 03/09/2004
NB. 03/26/2004 added boxed results; field names; throw
NB. 03/28/2004 added typed results (tcols)
coclass 'ado'
throw=: 3 : 'jthrow_ado_=: y. throw.'
NB.*prompt_ado_ v choose ado connection
NB. strConnection=. prompt_ado_''
prompt=: 3 : 0
wd 'pc promptform'
try. try.
wd 'cc r oleautomation:DataLinks'
catch. throw 'DataLinks is required' end.
try.
wd 'olemethod r base PromptNew'
r=. wd 'oleget r temp ConnectionString'
catch. throw wd 'qer' end.
catcht. r=. ''[smoutput jthrow end.
wd 'pclose'
r
)
NB.*rs_ado_ v execute SQL with ado recordest
NB. result=. strConnection rs_ado_ strSQL
rs=: 4 : 0
wd 'pc rsform'
try. try.
wd 'cc r oleautomation:ADODB.Recordset'
catch. throw 'ADO is required' end.
try.
wd 'oleset r base ActiveConnection *',x.
wd 'olemethod r base Open *',y.
if. '1'=wd 'oleget r base State' do.
r=. mode wd 'olemethod r base GetString 2 ',":ROWS
wd 'olemethod r base Close'
else. r=. 1 end.
catch. throw wd'qer' end.
catcht. r=. ''[smoutput jthrow end.
wd 'pclose'
r
)
NB.*ROWS v output number of rows or _1 for all
NB. ROWS_ado_=: 10
ROWS=: _1
getcollect=: 4 : 0
wd 'oleget r base ',x.,'; oleid r ',x.
s=. '' for_i. i. 0". wd 'oleget r ',x.,' Count' do.
s=. s,<wd 'oleget r ',x.,' Item ',(":i),';oleget r temp ',y.
end. s
)
fields=: 'Fields'"_ getcollect 'Name'"_
types=: 'Fields'"_ (0&".&>@getcollect) 'Type'"_
fcells=: <;._2@(,&TAB) ;. _2
fcols=: <@:>"1@|: @ fcells
num=: ,.@(0&".)&.>
isnum=: e.&2 3 4 5 6 11 14 16 17 18 19 20 21 131 139
apply=: 4 : '(,@:(x.;.2)~ (#&1)@#) y.'
typed=: {&(str`num) @ isnum
NB.*mode v output mode: one of str|cells|cols|tcols
NB. mode_ado_=: cells_ado_
mode=: tcols
NB.*str v mode: tab and CR separated string
str=: ]
NB.*cells v mode: cells of boxed strings
cells=: fields , fcells
NB.*cols v mode: row of string columns
cols=: fields ,: fcols
NB.*tcols v mode: sames as cols, but numerics converted
tcols=: fields ,: typed@types apply fcols
NB. ==================================================
0 : 0 NB. press Ctrl+R on each line in succession
NB. select Microsoft Jet OLEDB, Next >>
NB. Select "<j home>\system\examples\data\jdata.mdb"
cs=. prompt_ado_''
myado=: cs&rs_ado_
myado 'select * from tdata'
mode_ado_=: cells_ado_
myado 'select * from tdata'
mode_ado_=: str_ado_
myado 'select * from tdata'
myado 'create table test1 (aa char(10), bb integer)'
myado 'insert into test1 (aa,bb) values (''a1'',22)'
myado 'insert into test1 (aa,bb) values (''a2'',44)'
myado 'select * from test1'
myado 'drop table test1'
)