2010/05/12

access2010 データマクロ ストアドプロシージャ的ななにか

該当するレコードがあれば主キーを返し、なければインサートしてから主キーを返す的ななにか。

Function FrtnID(PK_Date As Date, PK_Num As LongPtr) As LongPtr
    DoCmd.SetParameter "pPK_Date", "#" & Format(PK_Date, "yyyy/mm/dd") & "#"
    DoCmd.SetParameter "pPK_Num", PK_Num
    DoCmd.RunDataMacro "t_01.Func_ID"
    FrtnID = ReturnVars!rtnID
End Function

Sub test2()
    Debug.Print FrtnID(#10/30/2010#, 103)
End Sub 
マクロで実行ならこうなる

抽出条件の日付時間について、データ型が一致しないというエラーで難儀した。
パラメータにそのままDate/Time型を渡してもうまく評価されない。
文字列と日付時間については、’ と # でくくると塩梅よく進む感じ。
きっと、2010/5/1を渡すと評価時に除算してるんでないかと。

access2010 MySQL接続でのメモ

Option Compare Database
Option Explicit

Const cnString = "Driver={MySQL ODBC 5.1 Driver};" & _
                 "server=mySQLServer;" & _
                 "port=3306;" & _
                 "database=test;" & _
                 "uid=testuser;" & _
                 "pwd=password;"

Sub test()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cn.Open cnString
    rs.CursorLocation = adUseClient
    rs.Open "select * from test_table;", cn
    Debug.Print "rs.RecordCount", rs.RecordCount, TypeName(rs.RecordCount)
    rs.Close: cn.Close
    Set rs = Nothing: Set cn = Nothing
End Sub
このコード実行結果:rs.RecordCount 31 LongLong
recordcountにはLongLongで値が戻る。

なので、格納先はLongPtrを使用/Longにキャスト/Variantで受けてDecimal。
64bit環境のみならばLongLong使用可。

<追記>
Win7SP1時点で、ADOに修正が入る。修正以降は、LongLongが戻らず、Longで戻る模様。

2010/05/11

VBA ADOconnectionString memo

Option Compare Database
Option Explicit

'Public Const cnString = ""


'********** MySQL **********
'Public Const cnString = "Driver={MySQL ODBC 5.1 Driver};" & _
                        "server=server_name;" & _
                        "port=3306;" & _
                        "database=DBName;" & _
                        "uid=Account_Name;" & _
                        "pwd=Password;" & _
                        "option=3;"

'Public Const cnString = "Driver={MySQL ODBC 3.51 Driver};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "User=myUsername;" & _
                        "Password=myPassword;" & _
                        "Option=3;"

'********** Access **********
'Public Const cnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=C:\myFolder\myAccessfile.accdb;" & _
                        "Persist Security Info=False;"

'Public Const cnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=C:\myFolder\myAccessfile.accdb;" & _
                        "Jet OLEDB:Database Password=MyDbPassword;"

'Public Const cnString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" & _
                        "DBQ=C:\myFolder\myAccessfile.accdb;"

'Public Const cnString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" & _
                        "DBQ=C:\myFolder\myAccessfile.accdb;" & _
                        "Pwd=MyDbPassword;" & _
                        "Uid="
'********** MS-SQL **********
'Public Const cnString = "Driver={SQL Server Native Client 10.0};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "Uid=myUsername;" & _
                        "Pwd=myPassword;"
'
'Are you using SQL Server 2008 Express?
'Don't miss the server name syntax Servername\SQLEXPRESS
'where you substitute Servername with the name of the
'computer where the SQL Server 2008 Express installation resides.
'
'Public Const cnString = "Driver={SQL Server Native Client 10.0};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "Trusted_Connection=yes;"
'
'Equivalent key-value pair: "Integrated Security=SSPI" equals "Trusted_Connection=yes"


access2010 RuntimeとODBCドライバ

access2010 runtime
Microsoft Access Database Engine 2010 Redistributable 
ということで
まっさらの環境

ここにインストールします。まずは、ドライバの方

excelとaccessのドライバがインストールされます。いずれも14.00
設定をまっさらに戻して、runtimeをインストールしてみます。
 当たり前に同じものがインストールされます。で
よくありがちなパターンでトレースします。
XPSP3+Office2003std
 accessのドライバは4.00
ここに、2007Runtimeをインストールしてみます。
access/excelともに12.00が追加されました。
さらに2010Runtimeをインストールしてみます。
access/excelとも12.00から14.00に差し替わっています。4.00はそのまま。
無事起動しました。 2007はそのままになってますが、起動されることはないでしょう
 ついでに、別件確認
XPにaccess2010をインストール
ADOは予想通り2.8。Vista以降6.0のはず

2010/05/10

access2010 Webクエリ デザインビュー

生意気にもmougに書き込んじゃったのでメモ
'参照設定:Microsoft Office 14.0 Library
Sub OpenWebQueryDesignView()
    DoCmd.OpenQuery "Webクエリ"
    CommandBars.FindControl(msoControlButton, 2952).Execute
End Sub
WebクエリをVBA(クライアント)でデザインビューモードで開く

また書いちゃったのでメモ
'参照設定:Microsoft Office 14.0 Library
Sub OpenWebQueryDesignView()
    DoCmd.OpenQuery "Webクエリ"
    CommandBars.ExecuteMso ("ViewsDesignView")
End Sub