2014年10月17日金曜日

accessのテーブルリンクをモジュールで変更する方法(覚え書き)

ネットの情報を参考に、accessのテーブルリンクをモジュールを使って
変更する方法を考えてみた


Sub HenkoLink(path, tbname)
Dim db As DAO.Database, tb As DAO.TableDef
    Set db = CurrentDb
    Set tb = db.TableDefs(tbname)
    tb.Connect = ";DATABASE=" + path + ";TABLE=" + tbname + ";pwd=****"
    tb.RefreshLink
End Sub

Sub LinkHenkoMacro()
pathd = InputBox("path=\\***\")

'テーブル数が多いときは配列で
Dim tbname(15), dm As String
tbname(1) = "テーブル1"
tbname(2) = "テーブル2"
tbname(3) = "テーブル3"

For i = 1 To 3
 Call HenkoLink(pathd + "test1.mdb", tbname(i))
Next i

'配列使わず、ひとつずつやるなら
Call HenkoLink(pathd + "test2.mdb", "テーブル4")


End Sub


2014年10月6日月曜日

プログラミングHaskell P143 exprs関数について

P143 exprs関数の適用についても、少しくわしく考えてみた。
(途中の式表現は、正しい表現と言えないところもありかも...)

exprs ::[Int]->[Expr]
exprs [] = []
exprs [n]=[Val n]
exprs ns = [e | (ls,rs) <-split ns,  l  <- exprs ls,  r  <- exprs rs,    e <- combine l r ]

combine :: Expr -> Expr -> [Expr]
combine l r = [App o l r | o<- ops]

ops  :: [Op]
ops =[Add,Sub,Mul,Div]

exprs [1,2,3]=[e| (ls,rs) <-split [1,2,3],  l  <- exprs ls,  r  <- exprs rs, e <- combine l r ]
  (ls,rs) <-split [1,2,3]は、次の2とおり
([1],[2,3])           ([1,2],[3])
ひとつめで l  <- exprs ls,  r  <- exprs rs,  e <- combine l r を考えて
  exprs ls=exprs [1]=[Val 1]  
exprs rs=exprs [2,3]= [e | (ls,rs) <-split [2,3],  l  <- exprs ls,  r  <- exprs rs,    e <- combine l r ]
= [e |([2,],[3]),  l  <- exprs [2],  r  <- exprs [3],    e <- combine l r ]
= [e |([2,],[3]), [Val 2], [Val 3],    e <- combine [Val 2] [Val3] ]
=[App Add (Val2) (Val3),App Sub …..4種類の演算]

[Val 1]と[App Add (Val2) (Val3),App Sub …..4種類の演算]についても4種類の演算がある

ふたつめも同様に可能

こんな感じで、すべての演算を表せそうだ。

プログラミングHaskell P142 split関数

プログラミングHaskell 読んでみた。 P142でsplit関数の適用がよくわからなかったので
自分なりに、丁寧にたどってみた。

split  :: [a]->[([a],[a])]
split[] =[]
split[_]=[]
split (x:xs) = ([x],xs) : [(x : ls , rs) | ( ls , rs ) <- split xs]

split [4]=[]

split [3,4]= ([3],[4]): [(3 : ls , rs) | ( ls , rs ) <- split [4]]
         =([3],[4]): [(3: ls , rs) | ( ls , rs ) <- []] = ([3],[4])
split [2,3,4]=([2],[3,4]): [(2 : ls , rs) | ( ls , rs ) <- ([3],[4]) ]
          ==([2],[3,4]): [(2 :[3] ,[4]) ]= [([2],[3,4]),([2,3] ,[4]) ]
split [1,2,3,4]
=([1],[2,3,4]):[(1:ls,rs) | (ls,rs)<- [([2],[3,4]),([2,3] ,[4]) ] ]
=([1],[2,3,4]):[(1:[2],[3,4]),(1:[2,3],[4])]
=([1],[2,3,4]):[[1,2],[3,4]),([1,2,3],[4])]

という感じでいいのだろうか