2009/07/09

access2007:パスワードロックしたaccdbへのアクセス

Dim cn As New ADODB.Connection
Dim cnStr As String, dbDir As String, Pswd As String

    dbDir = "\\hogehoge\database\hogeDB.accdb"
    Pswd = "Passw0rd"
    cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & dbDir & ";" & _
            "Jet OLEDB:Database Password=" & Pswd & ";"
    cn.Open cnStr
http://www.connectionstrings.com/
ここは有益だ

2009/07/07

ADO:CSV読み込み

ADOを使用した、CSV→recordset
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strFolder As String, cnStr As String
Dim fileName As String, selectSQL As String

cnStr = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="
strFolder = "C:\hogehoge"
fileName = "hogehoge.csv"
selectSQL = "SELECT * FROM " & fileName

cn.Open cnStr & strFolder
rs.Open selectSQL, cn, adOpenKeyset, adLockReadOnly

Do Until rs.EOF
  **お好みのupdate処理**
rs.MoveNext
Loop

rs.Close: cn.Close
Set rs = Nothing: Set cn = Nothing

ヘッダがないなら、Jetです。
cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
strFolder = "C:\hogehoge;"
exProp = "Extended Properties=""text;HDR=No;FMT=Delimited;"";"
cn.Open cnStr & strFolder & exProp

mySQL-Win-x64

win2008SVstdいじくり倒し用サーバにmySQL5を導入してみた。
インストール自体は無事に済んだが、セットアップウィザードが完了しない。
administratorでログインしたら成功した。

2009/07/02

access2007:分割フォーム

分割フォーム上でDirty時のみ押下できるButtonControl(更新ボタン)を配置した場合
分割フォーム側で操作した時はRequeryしてやらないと反映されない。

Private Sub Form_Undo(Cancel As Integer)
Me.btnUpdate.Enabled = False
Me.btnUpdate.Requery
End Sub

Private Sub Form_Current()
Me.btnUpdate.Enabled = False
Me.btnUpdate.Requery
End Sub

Private Sub Form_Dirty(Cancel As Integer)
Me.btnUpdate.Enabled = True
Me.btnUpdate.Requery
End Sub

access2007:UniqueTableプロパティ

非連結フォーム+ADO接続で、Inner Joinで複数のテーブルを連結している場合、UniqueTableプロパティを指定すると更新ができるようになる。削除追加はできるけどやらない。
Unique側更新だけにとどめる。
Private Sub Form_Open(Cancel As Integer)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim selectSQL As String, fld As ADODB.Field

selectSQL = "SELECT tblProducts.sID, tblProducts.商品名, tblCategories.CategoryID, tblCategories.Category FROM tblCategories INNER JOIN tblProducts ON tblCategories.CategoryID=tblProducts.cID;"

Set cn = Application.CurrentProject.Connection

rs.CursorLocation = adUseClient
rs.Open selectSQL, cn, adOpenKeyset, adLockOptimistic

Set Me.Recordset = rs
Me.UniqueTable = "tblProducts"
For Each fld In rs.Fields
  Me.Controls(fld.Name).ControlSource = fld.Name
Next

Set rs = Nothing: Set cn = Nothing
End Sub
Unique側については、Form_Errorで7787、30014を使える