goo blog サービス終了のお知らせ 

VB POWER

visual basicは本当にpowerfulです。このVb powerを紹介していきます。

adoでexcel dataを取り出すには

2004-12-13 10:24:24 | ado&dao
Excelのdataを扱うとき、SQLで処理できればすごく便利。あえて、acccessにdataを移す必要は
ないです。以下は、excelが自分自身のdataをSQLで取り出すときの方法です。ただし、accessのときとの違い・注意は次の3点。
- connection stringに"Extended Properties=Excel 8.0;"を記述する。
- table nameの代わりにsheet nameを使えるが、[TABLENAME$]と[,],$をつける必要あり。
- sheetの一行目がtableのfieldに相当し、最初の数行でdata typeが自動的に判断されるので注意。
- accessと違って、メモリがうまく開放されないようで、同じprogram中で何度もacccessを繰り返すと、tableのリンクが外れてしまう。

Dim CN As New ADODB.Connection
CN.Open "Provider=Microsoft.Jet.OLEDB.4.0; Extended Properties=Excel 8.0; Data Source=" + ThisWorkbook.Path & "\" & ThisWorkbook.Name
Dim RS As New ADODB.Recordset
SQL1 = "Select * From [TABLENAME$]"
RS.Open SQL1, CN, 3, 3
I = 0
Do While Not RS.EOF
I = I + 1
FIELD1_DATA(I) = RS("FIELD1")
FIELD2_DATA(I) = RS("FIELD2")
RS.MoveNext
Loop
RECORDNUM = I
RS.Close
Set RS = Nothing
CN.Close
Set CN = Nothing

Access database tableの情報を得るには

2004-12-13 10:03:06 | ado&dao
Acccess databaseから情報を得るには以下のプログラム。Error resumeが必要なのはDescription propertyが空白なときにはerrorになるからです。説明の情報の所得は、ADOではできないようです。

On Error Resume Next
Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(ActiveWorkbook.Path + "dailyprod.mdb")
Debug.Print "テーブル名: "; db.TableDefs("dailyproddata_zadco").Name
Debug.Print "テーブル説明:"; db.TableDefs("dailyproddata_zadco").Properties("Description")
Debug.Print "フィールド説明:"; db.TableDefs("dailyproddata_zadco").Fields("date").Properties("Description")

ado使用時の書き方

2004-11-27 12:34:17 | ado&dao
ADO使用時は以下のように使用宣言をする。

Dim cn as new ADODB.Connection
Dim rs as new ADODB.Recordset

さらに以下のようにaccess fileを指定する。

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ActiveWorkbook.Path + "dailyprod.mdb"

次に
sql1="select * from tablename"
RS.Open sql1, CN, adOpenDynamic

adOpenDynamicは自由度の高い書き方である。

ここで、RSを使用してdataの受け渡しを行う。

最後に
RS.Close
Set RS = Nothing
CN.Close
Set CN = Nothing