DAOの利用

Similar documents
グラフィックス

ICONファイルフォーマット

mySQLの利用

データアダプタ概要


VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

データベースⅠ

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

AccessVBA−‹ŠpŁÒ-flO“Z

untitled

ファイル操作

プロセス間通信

ブロック パニック

VB.NET解説

ルーレットプログラム

Userコントロール

VB実用⑦ エクセル操作Ⅰ

VB実用③ アクセス操作Ⅰ

ブロック崩し風テニス

NotifyIconコントロール

データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コー

正規表現応用

Oracle Lite Tutorial

構造体

ListViewコントロール

Excel ダッシュボードのご紹介 株式会社アイエルアイ総合研究所内藤慶一

ファイル操作-バイナリファイル

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

PowerPoint プレゼンテーション

ハッシュテーブル

MS Office オートメーション

MVP for VB が語る C# 入門

データベースプログラミング

プレポスト【問題】

VB.NET解説

PowerPoint プレゼンテーション

バスケットボール

相性占いプログラム

VB実用⑯ 印刷Ⅵ(Excel)

ADO.NETのアーキテクチャ

Oracle Lite Tutorial


ファイル監視

sinfI2005_VBA.doc

VB実用① データベースⅠ


Microsoft Excel操作

ウィンドウ操作 応用

データベースの更新の実行

Microsoft Office操作

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

モグラ叩きプログラム

いまさら聞けないVB2008 ADO.NET超入門

C# bit 環境用 C# 2005 基礎 Ⅱ 電脳梁山泊烏賊塾 データベース操作プログラム Ⅰ C# プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚

Lesson 1 1 EXVBA2000 Lesson01 Lesson01.xls 2

ExcelVBA

システム分析とデータベース設計

エクセル詳細 アドイン

コンピュータ概論

Microsoft Office操作(EXCEL)

3軸加速度センサーモジュール MM-2860 書込み済みマイコンプログラム通信コマンド概要

PowerPoint プレゼンテーション

VB実用⑩ エクセル操作Ⅳ

VB実用Ⅲ⑩ フリーデータベースⅡ

Oracle Lite Tutorial

PowerPoint プレゼンテーション

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

VB実用Ⅲ⑩ フリーデータベースⅡ

占領双六ゲーム

Microsoft認定資格問題集(70-483_demo)

データベースⅢ

チャットプログラム

MS-ExcelVBA 基礎 (Visual Basic for Application)

VFD256 サンプルプログラム

Transcription:

DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12) & _ " ファイル名 " & "*.xls") xlsheetname = " シート名 " & "$" Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;IMEX=1") Set RS = DB.OpenRecordset(xlSheetName) Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = DataSheetPath & Dir(DataSheetPath & " ファイル名 " & "*.xls") xlsheetname = " シート名 " & "$" DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;IMEX=1") RS = DB.OpenRecordset(xlSheetName) 'Recordset オブジェクトのオープン 名前 'OpenDatabase' は宣言されて居ませんと謂うエラーに成る 斯う謂う時は OpenDatabase が 何のオブジェクトのメソッドで有るかを調べると解決する DAO のヘルプやオブジェクトブラウザで確認すると OpenRecordset が DBEngine 及び Workspace のメンバで有る事を確認出来る筈で有る DBEngine とは DAO の最上位に有るオブジェクトなので 先ずは其れを下記の様に生成し 此のオブジェクトから辿って行けば良い Dim engine As New DAO.DBEngine( ) 本来で有れば VB6 でも DBEngine オブジェクトを生成す可きなのだが DBEngine はグローバルオブジェクトに成って居るので VB6 では宣言を省略する事が出来たので有る Marshal.ReleaseComObject に依るオブジェクトの解放処理も記述して有るので 多少冗長なコードに見えるかも知れないが 下記に具体例を示す -1-

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load ' DAO のオブジェクト生成 Dim engine As New dao.dbengine( ) Dim db As dao.database = _ engine.opendatabase("c: test.xls", False, False, "Excel 8.0;HDR=NO;IMEX=1") Dim rs As dao.recordset = db.openrecordset("sheet1$") ' 画面表示用の DataTable の準備 table = ds.tables.add("sheet1") Dim fs As dao.fields = rs.fields Dim maxcount As Integer = fs.count - 1 Dim f(maxcount) As dao.field f(n) = fs(n) table.columns.add(f(n).name) ' Recordset から読み込んで DataTable に格納 Do Until rs.eof Dim items As New ArrayList() items.add(f(n).value) table.rows.add(items.toarray()) rs.move() Loop ' DAO オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(f(n)) System.Runtime.InteropServices.Marshal.ReleaseComObject(fs) rs.close() System.Runtime.InteropServices.Marshal.ReleaseComObject(rs) db.close() System.Runtime.InteropServices.Marshal.ReleaseComObject(db) System.Runtime.InteropServices.Marshal.ReleaseComObject(engine) ' 画面に表示 DAO の.Fields は COM オブジェクトなので Fields(0) を使う前に.Fields を変数に受け 其の変 -2-

数から (0) を得る様にし 最後に 其の変数を Marshal.ReleaseComObject で解放せねば成らない (ADO.NET の場合は COM オブジェクトではないので 然うした手間は不要で有る ) 上記の例では rs.fields(0).value の構文を使わず 態々 rs.fields を dao.fields 型の変数 fs に入れて置き 其処から更に fs(0) で得たオブジェクトを dao.field 型の変数配列 f に受け 最後に 其等のオブジェクトを Marshal.ReleaseComObject して居る 但し 本当は DAO に頼るよりも ADO.NET( 或いは ADO) に依るデータアクセスに移行す可きで有る 其の方が解放処理も簡単で有る 下記に ADO 版を示す DataAdapter に依るサポートが有るので DAO よりも扱い易いと想う Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load Dim constr As New OleDb.OleDbConnectionStringBuilder() constr.provider = "Microsoft.JET.OLEDB.4.0" constr.datasource = "C: test.xls" constr("extended Properties") = "Excel 8.0;HDR=NO;IMEX=1" ' ADO のオブジェクト生成 Dim rs As New ADODB.RecordsetClass() rs.cursorlocation = ADODB.CursorLocationEnum.adUseClient rs.open("sheet1$", constr.connectionstring,,, _ ADODB.CommandTypeEnum.adCmdTableDirect) ' 画面表示用の DataTable に読込 Using da As New OleDb.OleDbDataAdapter() da.fill(ds, rs, "Sheet1") End Using table = ds.tables("sheet1") ' ADO オブジェクトの解放 If System.Runtime.InteropServices.Marshal.IsComObject(rs) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(rs) End If ' 画面に表示 最後に ADO.NET 版を下記に示す 此の場合 COM オブジェクトの解放処理が不要に成る -3-

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load Dim constr As New OleDb.OleDbConnectionStringBuilder() constr.provider = "Microsoft.JET.OLEDB.4.0" constr.datasource = "C: test.xls" constr("extended Properties") = "Excel 8.0;HDR=NO;IMEX=1" Dim sql As String = "SELECT * FROM [Sheet1$]" Using da As New OleDb.OleDbDataAdapter(sql, constr.connectionstring) da.fill(ds, "Sheet1") End Using table = ds.tables("sheet1") VB2005 で DAO レコードセットの更新 Dim Myquerydef As dao.querydef Dim strsql As String Dim rs As dao.recordset Dim i As String Dim j As String Dim DAODBEngine As New dao.dbengine db = DAODBEngine.OpenDatabase(mypath) i = [ 生徒区分 ID].Text 'j = Format(i, "'00'") On Error Resume strsql = "SELECT * From M_ 生徒区分 " ' WHERE 生徒区分 ID=" & i Myquerydef = db.createquerydef("", strsql) rs = Myquerydef.OpenRecordset(dao.RecordsetTypeEnum.dbOpenSnapshot) With rs.addnew().fields(" 生徒区分 ID").Value = [ 生徒区分 ID].Text.Fields(" 生徒区分 ").Value = [ 生徒区分 ].Text.Update() End With rs.close() dbopensnapshot だと更新不可で dbopendynaset にする -4-

VB2005 を使って ACCESS のテーブルを別のデータベースにエクスポート Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; C: A.mdb") Dim cmd As OleDbCommand = cn.createcommand Dim strsql As String strsql = "select * into [;database=c: B.mdb].[B.mdb に追加するテーブル名 ] " & _ "FROM [ エクスポートさせるテーブル名 ]" cmd.commandtext = (strsql) cn.open() cmd.executenonquery() cn.close() 少しだけ手直しすれば 動作する -5-