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

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

データベース1

データベース1

データベースⅠ

mySQLの利用

データベースⅡ

データベースⅡ

データベース1

DAOの利用

VB.NET解説

データアダプタ概要

MxLogonサーバサイドツールキット用UI

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

データベースⅠ

PowerPoint Presentation

VB実用③ アクセス操作Ⅰ

64bit環境で32bitコンポーネントの利用

Userコントロール

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

ファイル操作-インターネットキャッシュ

ルーレットプログラム

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

VB.NET解説

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

Microsoft Word - Android_SQLite講座_画面800×1280

ICONファイルフォーマット

構造体

データベースアクセス

MS Office オートメーション

グラフィックス

万年暦プログラム

データベースⅢ

ファイル操作

相性占いプログラム

Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

正規表現応用

VB実用⑦ エクセル操作Ⅰ

GUIプログラムⅡ

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None


VB実用⑯ 印刷Ⅵ(Excel)

HeartCoreインストールマニュアル

Microsoft Office操作(EXCEL)

回文作成支援プログラム

ビジネスサーバ設定マニュアル_Standard応用編

プロセス間通信

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版  

VB実用① データベースⅠ

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

Microsoft Word JA_revH.doc

PowerPoint プレゼンテーション

目次 目次 準備いただくもの 準備 SQLServer2008 R2 ExpressEdition のインストール インストールの前に インストール 設定一覧 機

HeartCoreインストールマニュアル(PHP版)

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

Prog2_12th

ブロック パニック

データベースⅢ

FormPat インポート設定ガイド

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

モデリング操作ガイド (データベースモデリング編)

MS Office オートメーション

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

プラグイン

プレポスト【問題】

相性占いプログラム

通信対戦プログラム

ブロック崩し風テニス

ListViewコントロール

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

Microsoft Word - tutorial3-dbreverse.docx

tkk0408nari

産直くん 9 リピートくん 9 バックアップ リストア作業チェックリスト バックアップ リストア作業項目一覧 作業項目作業目安時間概要 00 バックアップ リストア作業を行う前に 産直くん 9 リピートくん 9 のバックアップ リストア作業を円滑に行うための確認事項をまとめています 1. バックアッ

立ち読みページ

占領双六ゲーム

PowerPoint プレゼンテーション

ハッシュテーブル

3D回転体プログラム

回文作成支援プログラム

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

目次 目次... 2 はじめに SQL Server 2005 製品版へのアップグレード SQL Server 2005 製品版へのデータベース (DPM インスタンス ) の構築 / 設定 データベース (DPM インスタンス ) の構築

RADIUS サーバを使用して NT のパスワード期限切れ機能をサポートするための Cisco VPN 3000 シリーズ コンセントレータの設定

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

Webシステム授業資料

Microsoft Office操作

- 目次 - 1. 概要 インストール手順 イメージ作成モジュールのインストール DSN( データソース ) の設定 FTP の設定 操作説明 設定モジュール 監視モジュール... 11

PowerPoint プレゼンテーション

Microsoft Word - プリンター登録_Windows XP Professional.doc

Prog2_15th

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

10th Developer Camp - B5

Cuoreテンプレート

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

PowerPoint Presentation

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

NotifyIconコントロール

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

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

Transcription:

フリーデータベース Ⅱ VB オートメーション 10 プログラムの概要 事務処理に於いて Microsoft Office は 業界標準 (De Facto Standard) で有ると謂う事が出来る 此の Office には データベースソフトと仕て Access が用意されて居り 現在では データベースの代名詞とも謂う可き存在で有る 古くは MS-DOS 時代に 桐 と謂うデータベースが存在したが Windows 時代に成り Access が登場した事が データベースの普及を促進したと謂う事が出来る 併し 現在では 同じマイクロソフト社からネットワーク機能を強化した SQLServer が登場し 亦 無料のデータベースと仕て MySQL や postgresql がインターネット上で広く普及して居る 此等は 総て SQL に対応し 僅かなコードの書換で 他のデータベースに移行する事が容易で有る為 目的に応じてデータベースを選択する時代に突入したと謂う事が出来る 其処で 此処では 其の中から MySQL を Visual Basic から使用する手法に付いて学ぶ 前回は MySQL を単独で使用する方法を解説したが 今回は Visual Basic から MySQL を操作する方法に付いて解説する 今回の課題項目 MySQL データベースの作成 (MySQL エディタ CREATE DATABASE) MySQL データベースのユーザ作成 (MySQL エディタ GANT) MySQL データベースの ODBC 登録 (ODBC データソースアドミニストレータ ) MySQL データベースの接続 (ConnectionString DSN STMT) テーブルの操作 (CREATE TABLE DROP TABLE ALTER TABLE) レコードの操作 (INSERT UPDATE DELETE SELECT) クエリの実行 ( コネクションの Execute レコードセットの Open) 今回の重点項目 MySQL データベースの ODBC 登録 (ODBC データソースアドミニストレータ ) MySQL データベースの接続 (ConnectionString DSN STMT) テーブルの操作 (CREATE TABLE DROP TABLE ALTER TABLE) レコードの操作 (INSERT UPDATE DELETE SELECT) クエリの実行 ( コネクションの Execute レコードセットの Open) -1-

MySQL の Visual Basic からの利用 データベースの作成 MySQL のサーバ ( デーモン )mysqld とモニタ mysql を起動し book と謂う名前のデータベースを新規作成する mysql> CREATE DATABASE book; Query OK, 1 row affected (0.05 sec) mysql> SHOW DATABASES; +-----------------+ Database +-----------------+ book invision mysql +-----------------+ 3 rows in set (0.00 sec) SHOW DATABASES で データベースが正しく新規作成されたか確認するが book と謂うデータベースがリストに含まれて居る事が確認されれば良い 表示されるデータベースの個数等は 状況に依り異なる ユーザ作成と権限付与 上記で新規作成したデータベース book に対して 全権限を持つ新規ユーザを squid と名前で作成する 猶 アクセスする為のパスワードは calamar とする mysql> GRANT ALL ON book.* TO squid@localhost IDENTIFIED BY 'calamar'; Query OK, 0 rows affected (0.11 sec) mysql> GRANT ALL ON book.* TO squid@'%' IDENTIFIED BY 'calamar'; Query OK, 0 rows affected (0.00 sec) 此処では 上記で新規作成したデータベース book に対して MySQL をインストールしたローカルマシン (squid@localhost) と 別のリモートマシン (squid@ % ) からアクセス可能なユーザを作成して居る 猶 権限 ALL は ユーザ管理 (GRANT) 以外の総ての権限を持つ 以上で ローカルマシンからもリモートマシンからも ユーザ名 squid パスワード calamar で 総ての権限を持ってアクセスする事の出来る空のデータベース book が作成された -2-

ODBC(Open Database Connectivity) 登録 任意のデータベースを ODBC に登録するには 先ず 下記の手順に従い ODBC データソースアドミニストレータを起動する 猶 以下の手順は MySQL サーバ ( デーモン ) を起動してから行う Windows 95/98/Me : スタートメニュー 設定 コントロールパネル ODBC データソース Windows NT/2000/XP : スタートメニュー 設定 コントロールパネル 管理ツール データソース (ODBC) Windows 98 系 Windows NT 系 下図の様なダイアログボックスが表示されるので システム DSN タブを選択し 追加 ボタンをクリックする 猶 ローカルマシンからしかアクセスしない場合は ユーザー DSN タブを選択しても良い 次に表示される下図の画面では ドライバ一覧が表示されるので ドライバに MySQL ODBC 3.51 Driver を選択して 完了 ボタンをクリックする -3-

次に表示される下図の画面では Login タブで 下記の項目を入力して OK ボタンをクリックする 項目名 入力値 DSN 情報 Data Source Name book 1 Description 任意の説明文 MySQL 接続パラメータ Server localhost 2 User squid 3 Password calamar 4 Database book 5 1 データベースを識別する為の任意の名前 ( 此処では book) を入力する 2 リモートアクセスする場合は MySQL データベースの在るマシンの IP アドレスを入力する 3 接続する MySQL データベースに設定されて居るユーザー名を ( 此処では squid) 入力する 4 接続する MySQL データベースに設定されて居るパスワードを ( 此処では calamar) 入力する 5 接続する MySQL データベースの名前 ( 此処では book) を選択する 猶 接続するポート番号を変更して居る場合 ( 設定を変更して居ない場合は 3306) は Connection Options タブの Port 欄で 接続するポート番号を設定する必要が有る 亦 データベースを操作する上で 各種の設定を行うには Advanced タグを選択して行うが 此処では 此等の設定は行わないで 既定の儘でデータベースを操作する事とする 猶 正しく接続されるか確認するには OK ボタンをクリックする前に Test ボタンをクリックして 接続テストを行う 下記のダイアログが表示されれば 正しく項目が設定されて居る -4-

下図の画面に戻るので 登録したデータベースの識別名が表示されて居る事を確認して OK ボタンをクリックする 以上で データベースの ODBC 登録は終了で有る 猶 設定を変更するには 変更するデータソースを選択し 構成 ボタンをクリックすると 設定を変更する事が出来る 亦 不要なデータソース ( 例えば テストで使用したデータソース ) は 上図で選択し 削除 ボタンをクリックすると ODBC 登録から削除される 参考 主キーの定義 テーブルを更新する事が出来る様にするには テーブルに主キーを定義する必要が有る 孰れかのフィールドに必ず主キーを設定して置く 亦 Visual Basic から ADO を通じて使用した場合 大きなサイズの整数 (8 バイト整数 :BIGINT) を処理する事は出来ない 此れは SHOW PROCESSLIST の様なクエリは正しく動作しない事を意味する 此れを解決するには ODBC 接続文字列にオプション OPTION=16384 を設定するか 又は MyODBC 接続画面の Advanced タグで Change BIGINT columns to INT を選択する 場合に依り Return matching rows も選択する必要が有る 文字コード 各種文字コードに対応して居ない古いバージョンの MySQL を使用して居る場合で ODBC に MyODBC3.x を使用し myodbc-3.51.06-conv_ujis.zip で日本語パッチを当てゝ居る場合は MySQL データソースの ODBC 登録の画面は 右図の様に成る 基本的な登録事項は 同じで有るが 此の場合は 文字化けを防止する為に Options をクリックして EUC 変換する にチェックを付ける -5-

プログラムリスト - テーブル作成 Option Explicit '================================================== ' 事前に MySQL サーバ ( デーモン ) を起動して置く '================================================== ' コマンドボタン ( テーブル作成 ) がクリックされた時の処理 Private Sub cmdcreatetable_click( ) Dim Cn As ADODB.Connection Dim SQL As String MySQL サーバが起動して居ないと 此のプログラムは動作しないので 事前に起動して置く 此処で宣言した変数の有効期間は宣言された時点から プロシージャの終了迄で有る ' コネクションの設定 Set Cn = New ADODB.Connection Cn.CursorLocation = aduseclient Cn.ConnectionString = "DSN=book" Cn.Open ODBC 接続の場合 各種パラメー タは ODBC に登録されて居る為 接続文字列は 簡潔で有る テーブル名やフィールド名に日本 ' 本テーブルの作成語を使用する事は可能だが 誤動 SQL = "CREATE TABLE BOOKS (" 作の原因と成る為 使用しない SQL = SQL & "ID INT AUTO_INCREMENT," SQL = SQL & "TITLE VARCHAR(50) NOT NULL," SQL = SQL & "PRICE SMALLINT UNSIGNED NOT NULL," SQL = SQL & "PURCHASED DATE," SQL = SQL & "CATEGORY_ID TINYINT UNSIGNED," SQL = SQL & "WRITER_ID TINYINT UNSIGNED," オートインクリメント項目は 必 SQL = SQL & "INDEX(ID)" ずインデックスを指定する必要が SQL = SQL & ");" 有る Cn.Execute SQL ' カテゴリテーブルの作成 SQL = "CREATE TABLE CATEGORIES (" SQL = SQL & "ID INT AUTO_INCREMENT," SQL = SQL & "NAME VARCHAR(50) NOT NULL," SQL = SQL & "TOTAL INT UNSIGNED DEFAULT'0'," SQL = SQL & "INDEX(ID)" SQL = SQL & ");" Cn.Execute SQL ' 著者テーブルの作成 SQL = "CREATE TABLE WRITERS (" SQL = SQL & "ID INT AUTO_INCREMENT," SQL = SQL & "NAME VARCHAR(50) NOT NULL," SQL = SQL & "PHONETIC VARCHAR(50) NOT NULL," SQL = SQL & "INDEX(ID)" SQL = SQL & ");" Cn.Execute SQL CREATE TABLE は テーブルを作成するクエリで有る 必ず1 個以上のフィールドを指定する DEFAULT で フィールドの初期値を指定する事が出来る 文字列型フィールドには 通常 VARCHAR か TEXT のデータ型を指定する 255 バイト以下の場合 VARCHAR を 其れ以上の場合 TEXT のデータ型を指定する MsgBox "3 個のテーブルを作成しました ", vbinformation, " 通知 " ' コネクションの後始末 Cn.Close Set Cn = Nothing 使用済のコネクションは 必ず閉 じて メモリから解放して遣る必 要が有る -6-

オブジェクト プロパティ一覧 1 テキストボックス 1 コマンドボタン 1 テキストボックス 2 テキストボックス 3 コンボボックス 1 テキストボックス 4 コンボボックス 2 ラベル コントロール配列 (0~5) データグリッド 1 コントロールの種類 プロパティ プロパティの設定値 フォーム オブジェクト名 Form1 Caption MySQL ODBC 接続 ラベル オブジェクト名 lblitem Index 0~5( コントロール配列 上から ) Caption ID TITLE PRICE PURCHASED CATEGORY WRITER テキストボックス1 オブジェクト名 txtb_id テキストボックス2 オブジェクト名 txtb_title テキストボックス3 オブジェクト名 txtb_price テキストボックス4 オブジェクト名 txtb_purchased コンボボックス1 オブジェクト名 cbob_categories コンボボックス2 オブジェクト名 cbob_writers データグリッド1 オブジェクト名 dgdbooks コマンドボタン1 オブジェクト名 cmdbooks Index 0~2( コントロール配列 上から ) Caption 追加 訂正 削除 -7-

オブジェクト プロパティ一覧 2 テキストボックス 5 コマンドボタン 2 テキストボックス 6 テキストボックス 7 ラベル コントロール配列 (6~8) データグリッド 2 コントロールの種類 プロパティ プロパティの設定値 ラベル オブジェクト名 lblitem Index 6~8( コントロール配列 上から ) Caption ID NAME TOTAL テキストボックス5 オブジェクト名 txtc_id テキストボックス6 オブジェクト名 txtc_name テキストボックス7 オブジェクト名 txtc_total データグリッド2 オブジェクト名 dgdcategories コマンドボタン2 オブジェクト名 cmdcategories Index 0~2( コントロール配列 上から ) Caption 追加 訂正 削除 -8-

オブジェクト プロパティ一覧 3 テキストボックス 8 コマンドボタン 3 テキストボックス 9 テキストボックス 10 ラベル コントロール配列 (9~11) データグリッド 3 コントロールの種類 プロパティ プロパティの設定値 ラベル オブジェクト名 lblitem Index 9~11( コントロール配列 上から ) Caption ID NAME PHONETIC テキストボックス8 オブジェクト名 txtw_id テキストボックス9 オブジェクト名 txtw_name テキストボックス10 オブジェクト名 txtw_phonetic データグリッド3 オブジェクト名 dgdwriters コマンドボタン3 オブジェクト名 cmdwriters Index 0~2( コントロール配列 上から ) Caption 追加 訂正 削除 -9-

プログラムリスト - テーブル操作 此のプログラムを実行する前に mysql でデータベースを作成し ODBC 登録して置く データベース作成データベース名 :book( テーブルは 前出のテーブル作成プログラムで作成する ) ODBC 登録データソース名 :book サーバー名 :localhost ユーザー名 :squid パスワード :calamar Option Explicit '================================================================================= ' 此のプログラムを実行する際に mysql サーバ ( デーモン ) を起動して置く必要が有る '================================================================================= Private Cn Private RsB Private RsC Private RsW As ADODB.Connection As ADODB.Recordset As ADODB.Recordset As ADODB.Recordset 此処で宣言した変数の有効期間は 宣言された時点から プログラム の終了迄で有る ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) Dim SQL As String ' コネクションの設定 Set Cn = New ADODB.Connection Cn.CursorLocation = aduseclient Cn.ConnectionString = "dsn=book;uid=squid;pwd=calamar;stmt=set names sjis" Cn.Open ' レコードセットの設定 Set RsB = New ADODB.Recordset SQL = "SELECT * FROM BOOKS;" RsB.Open SQL, Cn Set dgdbooks.datasource = RsB Set RsC = New ADODB.Recordset SQL = "SELECT * FROM CATEGORIES;" RsC.Open SQL, Cn Set dgdcategories.datasource = RsC Set RsW = New ADODB.Recordset SQL = "SELECT * FROM WRITERS;" RsW.Open SQL, Cn Set dgdwriters.datasource = RsW ' カテゴリ 著者項目をコンボボックスに追加 Call CboAddItem( 2 ) 此処で宣言した変数の有効期間は 宣言された時点から プロシージ ャの終了迄で有る キャラクタセットを指定しないと フィールド値に日本語を設定する と エラーが発生する 因みに stmt は 接続後に実行す るステートメントを指定するパラ メータで有る 各レコードセットに対応するテー ブルの総てのレコードを抽出して データグリッドに関連付ける 引数に依りコンボボックスに追加 する項目 (0: カテゴリ 1: 著 者 2: 両方 ) を指定する ' カテゴリのトータル設定 Call CateUpdate Call は サブルーチンに制御を移 すステートメントで有る -10-

' タブダイアログの初期化 tabdisp.tab = 0 ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) ' コネクションとレコードセットの後始末使用したコネクションやレコード RsB.Close RsC.Close セットは 使用後 必ずクローズ RsW.Close し メモリから解放する Cn.Close Set RsB = Nothing データグリッドとの関連の為 孰 Set RsC = Nothing れも持続性を必要とするので 終 Set RsW = Nothing 了時に実施して居る Set Cn = Nothing ' コマンドボタン ( 本 : 追加 変更 削除 ) をクリックした時の処理 Private Sub cmdbooks_click( Index As Integer ) Dim SQL As String Select Case Index ャ内で宣言する Case 0 SQL = "INSERT INTO BOOKS(TITLE,PRICE,PURCHASED,CATEGORY_ID,WRITER_ID) VALUES(" SQL = SQL & "'" & txtb_title.text & "'," SQL = SQL & txtb_price.text & "," SQL = SQL & "'" & Date & "'," ' ACCESS と異なり # でクオートするとエラーに成る SQL = SQL & cbob_categories.itemdata( cbob_categories.listindex ) & "," SQL = SQL & cbob_writers.itemdata( cbob_writers.listindex ) & ");" Case 1 If txtb_id.text = "" Then Exit Sub SQL = "UPDATE BOOKS SET " SQL = SQL & "TITLE='" & txtb_title.text & "'," SQL = SQL & "PRICE=" & txtb_price.text & "," SQL = SQL & "PURCHASED='" & txtb_purchased.text & "'," SQL = SQL & "CATEGORY_ID=" & cbob_categories.itemdata(cbob_categories.listindex) & "," SQL = SQL & "WRITER_ID=" & cbob_writers.itemdata(cbob_writers.listindex) SQL = SQL & " WHERE ID=" & txtb_id.text & ";" Case 2 If txtb_id.text = "" Then Exit Sub SQL = "DELETE FROM BOOKS WHERE ID=" & txtb_id.text & ";" End Select Debug.Print SQL Cn.Execute SQL タブダイアログの BOOKS タブが 最初に選択された状態に設定して 置く プロシージャ間で値の遣り取りを 必要と仕無い変数は プロシージ 日付型の値は MS Access とは異 なり シャープ ( # ) でクオート するとエラーが発生する INSERT UPDATE DELETE 等の アクションクエリは コネクショ ンの Execute メソッドで実行する RsB.Requery Set dgdbooks.datasource = RsB Call CateUpdate 変更をデータグリッドに反映させ る為 クエリを再実行し 再度関 連付けを行う ' コマンドボタン ( カテゴリ : 追加 変更 削除 ) をクリックした時の処理 Private Sub cmdcategories_click( Index As Integer ) Dim SQL As String -11-

Select Case Index Case 0 SQL = "INSERT INTO CATEGORIES(NAME) VALUES('" & txtc_name.text & "');" Case 1 If txtc_id.text = "" Then Exit Sub SQL = "UPDATE CATEGORIES SET NAME='" & txtc_name.text SQL = SQL & "' WHERE ID=" & txtc_id.text & ";" Case 2 If txtc_id.text = "" Then Exit Sub SQL = "DELETE FROM CATEGORIES WHERE ID=" & txtc_id.text & ";" End Select Debug.Print は 引数の値をイミ Debug.Print SQL ディエイトウィンドウに出力する Cn.Execute SQL メソッドで有る RsC.Requery Set dgdcategories.datasource = RsC Call CboAddItem( 0 ) カテゴリ項目が変更されたので BOOKS タブのカテゴリ用コンボ ボックスの内容を更新する ' コマンドボタン ( 著者 : 追加 変更 削除 ) をクリックした時の処理 Private Sub cmdwriters_click( Index As Integer ) Dim SQL As String Select Case Index Case 0 SQL = "INSERT INTO WRITERS(NAME,PHONETIC) VALUES('" SQL = SQL & txtw_name.text & "','" & txtw_phonetic.text & "');" Case 1 If txtw_id.text = "" Then Exit Sub SQL = "UPDATE WRITERS SET NAME='" & txtw_name.text SQL = SQL & "',PHONETIC='" & txtw_phonetic.text SQL = SQL & "' WHERE ID=" & txtw_id.text & ";" Case 2 If txtw_id.text = "" Then Exit Sub SQL = "DELETE FROM WRITERS WHERE ID=" & txtw_id.text & ";" End Select Debug.Print は 編集時而巳有効 Debug.Print SQL Cn.Execute SQL で EXE ファイルにはコンパイル されない RsW.Requery Set dgdwriters.datasource = RsW Call CboAddItem( 1 ) 著者項目が変更されたので BOOKS タブの著者用コンボボッ クスの内容を更新する ' データグリッド ( 本 ) がクリックされた時の処理 Private Sub dgdbooks_click( ) Dim I As Integer データグリッドの左列をクリックすると 関連付けられたレコード If RsB.RecordCount > 0 Then セットの該当行がカレントレコー txtb_id.text = RsB.Fields("ID").Value & "" ドとなる txtb_title.text = RsB.Fields("TITLE").Value & "" txtb_price.text = RsB.Fields("PRICE").Value & "" txtb_purchased.text = RsB.Fields("PURCHASED").Value & "" -12-

For I = 0 To ( cbob_categories.listcount 1 ) If Val(RsB.Fields("CATEGORY_ID").Value & "") = cbob_categories.itemdata(i) Then cbob_categories.listindex = I Exit For Next I For I = 0 To ( cbob_writers.listcount 1 ) If Val(RsB.Fields("WRITER_ID").Value & "") = cbob_writers.itemdata(i) Then cbob_writers.listindex = I Exit For コンボボックスの ItemData には 各項目の ID 値が格納されて居る Next I ので 一致する物を捜して居る ' データグリッド ( カテゴリ ) がクリックされた時の処理 Private Sub dgdcategories_click( ) If RsC.RecordCount > 0 Then txtc_id.text = RsC.Fields("ID").Value & "" txtc_name.text = RsC.Fields("NAME").Value & "" txtc_total.text = RsC.Fields("TOTAL").Value & "" ' データグリッド ( 著者 ) がクリックされた時の処理 Private Sub dgdwriters_click( ) If RsW.RecordCount > 0 Then txtw_id.text = RsW.Fields("ID").Value & "" txtw_name.text = RsW.Fields("NAME").Value & "" txtw_phonetic.text = RsW.Fields("PHONETIC").Value & "" ' コンボボックスにアイテムを追加するジェネラルプロシージャ Private Sub CboAddItem( N As Integer ) Dim Rs As ADODB.Recordset Dim SQL As String Dim I As Integer ' レコードセットのインスタンス生成 Set Rs = New ADODB.Recordset フィールドに値が設定されて居な い時の値は Null で有り 此れをテ キストボックスの Text プロパテ ィに代入すると エラーに成る Null 値にヌルストリングを結合 する事に依り 文字列型にキャス トして居る 因みに Null 値か何うかを判定す るには IsNull 関数を使用する事 も出来る 此処で宣言した変数は 宣言した プロシージャ内でしか 値の設定 と取得が出来ない オブジェクト型の変数は 宣言し た丈では インスタンスが生成さ れず 使用する事は出来ない ' カテゴリ項目の設定 If N = 0 Or N = 2 Then AddItem は コンボボックスにリ SQL = "SELECT * FROM CATEGORIES;" ストアイテムを追加するメソッド Rs.Open SQL, Cn で有る I = 0: cbob_categories.clear Do Until Rs.EOF cbob_categories.additem Rs.Fields("NAME").Value & "" cbob_categories.itemdata(i) = Val( Rs.Fields("ID").Value & "" ) Rs.MoveNext: I = I + 1 Loop ItemData は 対応するリストア Rs.Close イテムに数値データを保持させる 為のプロパティで有る -13-

' 著者項目の設定 List コレクションは画面への表示 If N = 1 Or N = 2 Then 用 ItemData コレクションは内 SQL = "SELECT * FROM WRITERS;" 部での処理用と謂える Rs.Open SQL, Cn I = 0: cbob_writers.clear Do Until Rs.EOF cbob_writers.additem Rs.Fields("NAME").Value & "" cbob_writers.itemdata(i) = Val( Rs.Fields("ID").Value & "" ) Rs.MoveNext: I = I + 1 Loop 1レコードを処理した後は 必ず Rs.Close MoveNext しないと 無限ループ に陥るので 注意を要する ' レコードセットのインスタンス開放 Set Rs = Nothing ' カテゴリ別データ数を更新するジェネラルプロシージャ Private Sub CateUpdate( ) Dim Rs1 As ADODB.Recordset Dim Rs2 As ADODB.Recordset Dim SQL As String Dim I As Integer Dim N As Integer Dim M As Integer ' レコードセットのインスタンス生成 Set Rs1 = New ADODB.Recordset Set Rs2 = New ADODB.Recordset プロシージャ内で生成したインスタンスは 必ずプロシージャ内で破棄する必要が有る プロシージャ内で宣言した変数はプロシージャを抜けると 自動消滅するが インスタンスは 自動消滅しない レコードセットは 此の様に 必要に応じて幾つでも生成する事が出来る ' カテゴリ別データ数の更新 Val 関数は 文字列を数値化する SQL = "SELECT ID FROM CATEGORIES;" 関数で有るが 引数がヌルストリ Rs1.Open SQL, Cn ングの場合 0 を返す Do Until Rs1.EOF N = Val( Rs1.Fields("ID").Value & "" ) SQL = "SELECT COUNT(ID) AS TTL FROM BOOKS" SQL = SQL & " WHERE CATEGORY_ID=" & CStr( N ) & ";" Rs2.Open SQL, Cn If Rs2.RecordCount > 0 Then M = Val( Rs2.Fields("TTL").Value & "" ) SQL = "UPDATE CATEGORIES SET TOTAL=" & CStr( M ) SQL = SQL & " WHERE ID=" & CStr( N ) & ";" Cn.Execute SQL Rs2.Close Rs1.MoveNext Loop Rs1.Close ' レコードセットのインスタンス開放 Set Rs1 = Nothing Set Rs2 = Nothing オブジェクトのインスタンスは Nothing をセットする事に依りメ モリから解放する事が出来る -14-

MySQL データベースへの接続方法 ( 参考 ) MyODBC ドライバを使用してローカルのデータベースに接続 Cn.Open "Driver={mySQL};" & _ "Server=localhost;" & _ "Option=16834;" & _ "Database= データベース名 " MyODBC ドライバを使用してリモートのデータベースに接続 Cn.Open "Driver={mySQL};" & _ "Server= サーバのドメイン ;" & _ "Port=3306;" & _ "Option=131072;" & _ "Stmt=;" & _ "Database= データベース名 ;" & _ "Uid= ユーザ名 ;" & _ "Pwd= パスワード " MySQL ODBC 3.51 ドライバを使用してローカルのデータベースに接続 Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _ "Server=localhost;" & _ "Port=3306;" & _ "Option=16384;" & _ "Stmt=;" & _ "Database= データベース名 ;" & _ "Uid= ユーザ名 ;" & _ "Pwd= パスワード " 又は Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _ "SERVER=localhost;" & _ "DATABASE= データベース名 ;" & _ "USER= ユーザ名 ;" & _ "PASSWORD= パスワード ;" 最初に MySQL をインストールした時に sys データベースの user テーブルに root ユーザアカウントが パスワード無しで 作成される 設定ファイル my.ini の default-character-set で 文字セットを設定しても 此れは MySQL が提供するアプリケーション而巳に対して有効で有り Visual Basic 等で作成した独自のアプリケーションには効果が無い 其の為 接続後に実行するステートメントを指定する STMT パラメータを使用して 初期化時にキャラクタセットを指定する必要が有る Shift-JIS に設定する例を示す STMT=set names sjis( 又は STMT=set character set sjis) -15-