VisualBasicサンプル

SQLの学習用実行環境を作る

0.目次
1. はじめに
2.プログラムの概要
3.プログラムを試してみる
4.SQLについて
5.プログラムの作成
6.まとめ

1. はじめに

 VBも4.0以降、クライアントのプログラム作成ツールとして位置付けられてから、ビジネスアプリケーションの開発に利用されることが多くなりましたが、その多くはデータベースに関係した処理のプログラム開発が中心となっています。
データベースの利用となると、現状ではリレーショナルデータベースということになるのではないでしょうか、そして、リレーショナルデータベースと言うとSQLです。
 SQLはAccessからSQLServer、Oracle、さらにIBMなどの汎用機まで、方言のように微妙に違っていても、基本はほとんど違わず、どんな環境でも利用できます、ですから、SQLはプログラマの必須の知識となっています。
書籍も、以前はかなり専門的なコンピュータ関係の書棚にありましたが、最近はパソコン関係の書棚に、何冊か見ることができるようになり、かなり一般化していることがわかります。
私は、たまたまIBMのリレーショナルデータベース、DB2を利用したシステムの開発、運用にかかわる中で、SQLを利用する機会があり、QMFという端末の環境からコマンドをたたいて利用していますが、SQLの学習用にこんな環境があれば、もっと身近にSQLの勉強ができるのではないかと思い、Accessのデータベースを対象として、SQLの実行環境を作成してみました。

2.プログラムの概要

 私が利用しているQMFという環境は、図1のようなもので、SQL照会と言う部分に、SELECT・・・・とコマンドを入力しF・2のキーを押すと、実行結果が表示されます。

図1.IBM社のSQL実行環境、QMFの照会画面


IBM機の利用は、Windowsのようにビジュアルに入力することはできませんが、検索条件を変えながら処理結果を確認するときなど、いちいちマウスに手をやり、実行ボタンをクリックするというようなことがないので、かえって小気味よく操作が出来て、一種のここちよさもあります。
特に、SQLの場合、SELECT、FROM、WHERE、というコマンドを中心に、プログラムと言うほど長い文字列を打ち込むことはないためだと思います。
ただ、面倒だと感ずるのは、SELECTに続く項目名の入力です、これも一表に出力できるのは多くても130桁程度なのでそう多くはないのですが、システムの概要書、運用マニュアルを片手に入力しています。
QMFの画面には、図1のように、印刷、終了、ヘルプなどの機能が、ファンクションキーに割り当てられているので、大体のことは、キーをポンポンポンとたたくことで、実行できます。
また、SQL文に名前をつけて保存する、読み出す、など、SQL文を管理したり、実行を手助けするような機能がQMFには用意されていて、照会画面の下の方の、コマンド⇒の所にコマンドを入力することにより実行できます。
今回作成したプログラムは、QMFの照会画面に相当する、図2のようなダイアログと、

図2.照会ウィンドウ


図3.のデータベースのテーブルリストと選択されたテーブルの項目リストを表示するダイアログ、

図3.テーブルリストと、フィールドリストを表示するウィンドウ


図4.の抽出したデータを表示するダイアログ、

図4.SQL文の実行結果を表示するウィンドウ


図5.保存されているSQL文のファイルリストを表示するダイアログ

図5.プロシジャのファイルリストウィンドウ


からなっています。
図2のダイアログは、SQL文を入力するテキストボックス、コマンドを入力するテキストボックスからなっていて、図1に示した、QMFの画面に相当するものです。
このダイアログが処理の中心となるもので、処理の対象とするデータベースを、[ファイル]メニューの[開く]から選択し、SQL文を入力して実行キーのF・2キーが押されると、処理結果を図4のダイアログに表示し確認出来るようにするといった機能を果たします。
私がQMFを利用するのは、データベース中のデータのメンテナンス、確認に利用をしているわけですが、実際に利用するときは、ちょっとしたコメントを付けたり、一部が実行されないようにしたいことがあります、そのためリスト1のように、−−から行末までをコメントとして処理する機能もつけました。

リスト1.コメントを入れたSQL文のサンプル

insert into 会社
values ('0006','会社6','カイシャ6','001-0036','西1-6','第26ビル','03-321-5556',NULL
,'これは会社6のコメントです')
--値が無いところはNULLを指定すること


3.プログラムを試してみる

 ダウンロードしたファイルを解凍し、VB(VB5.0)で開いてください、または、dat_con_qmf.exe(アプリケーション)、会社情報.mdb(データベース)、select.mds(SQL文のファイル)とその他のmdsファイル、使い方.hlp(ヘルプ)を適当なディレクトリにコピーします。
dat_con_qmf.exeを実行し、図2のダイアログのコマンド⇒の右のテキストボックスに、disp a:¥select.mdsと入力しリターンキーを押します。
すると、図2.のように、ダイアログボックスの上段のテキストボックスに、読み出されたSQL文がセットされます。
ここで、上段のテキストボックスにカーソルが点滅していることを確認し、F・2のキーを押します、処理した結果が、図4のダイアログボックスに表示されます。
disp a:¥select.mdsと入力し、試してみましたが、〜.mdsファイルのファイル名を変えて、試してみてください。
 データベースファイルは、VB5.0のサンプルにある、Biblio.mdbを利用しても同様のことが出来ます。
その他のコマンドなどは、使い方.hlpを開いて確認してください。

4.SQLについて

 SQLコマンドは、テーブルそのものを操作するCREATE、DROP、ALTERといったDDLと、テーブルの中のフィールドを操作する、SELECT、INSERT、UPDATEなどのDMLからなっていますが、今回は、DMLを対象としています。
もっとも単純なSQL文の例として、リスト2のようなものをつくってみました、これは、VB5.0のサンプルデータベースBiblio.mdbのTITLEテーブルのデータから、発行年が1997年のものを抽出し、テーブルの全項目を表示するものです。

リスト2.簡単なSQL文の例

select *
from titles
where [Year published]=1997


この例のように、SQLは構文的にはいたって簡単ですが、なかなか高機能で、WHEREの中に(SELECT・・・・・)と書くことによって、テーブル間のデータの関係を利用した、データの抽出といったことも出来ます。
SQLを使っていると、何でこんなことが出来ないのかと思う点もありますが、その解決策が、なるほどと思うような方法で提供されていたりして、その奥深さを感ずることが出来ます。
 それでは、SQLはプログラムの中ではどのように利用されているのでしょうか。
VBで利用するときの例をリスト3に示します、リストの中段、Set qdef = db.createquerydef("q_1", "SELECT * FROM 会社 WHERE 会社コード='0001'")の部分にSQL文が利用されています。
別の例としては、リスト4のように、qu$ = "SELECT * FROM 会社 WHERE 会社コード='0001'"、Set fe = dbopenrecordset(qu$, dbopendynaset)と言う形で文字列変数を利用してSQL文が利用されています、このSQL文はSet fe = dbopenrecordset(qu$, dbopendynaset)のqu$の所へ、直接文字列として書くことも出来ます。

リスト3.SQLをVBで利用する例1

'
Dim db As Database
Dim qdef As querydef
Dim fe As Recordset

Set db = dbengine.workspaces(0).opendatabase("会社情報.mdb")
Set qdef = db.createquerydef("q_1", "SELECT * FROM 会社 WHERE 会社コード='0001'")

Set fe = dbopenrecordset("q_1", dbopendynaset)
'データ出力の処理
Do Until fe.EOF
Printer.Print fe!会社コード, fe!会社名
fe.Move
Loop


リスト4.SQLをVBで利用する例2

'--------------
Dim db As Database
Dim fe As Recordset

Set db = dbengine.workspaces(0).opendatabase("会社情報.mdb")
qu$ = "SELECT * FROM 会社 WHERE 会社コード='0001'"
Set fe = dbopenrecordset(qu$, dbopendynaset)
'以下データ出力の処理


さらに、他のプログラム言語ではどうでしょうか、リスト5はCOBOLの例です。
EXEC SQL から END-EXEC句の間にFORに続いてSQLが書かれています、私はCOBOLをよく知りませんが、先にも書いたように言語、システムを超えてSQLが利用され、SQL文が直接的にプログラム中にが書かれている様子がわかります。

リスト5.SQLをCOBOLで利用する例

'----------------
EXEC SQL
DECLARE CURSOR1 CURSOR
FOR SELECT 会社コード,会社名
FROM 会社
WHERE 会社コード<'0003'
END-EXEC


EXEC SQL
OPEN CURSOR1
END-EXEC




EXEC SQL
CLOSE CURSOR1
END-EXEC


こうした例をからも、SQLがどんな処理結果を返してくるのか、どんなふうに記述したらいいのか身につけておくことと、プログラム開発にあたり手軽に試すことが出来る環境が、必要だと思います。
そもそも、IBMのQMFの環境も、プログラマのそうした利用を前提に作られたのではないかと思います、現実、プログラムのデバッグのときなど、プログラマの人が、ソースの中のSQL文をエディタでコピーして、QMFで処理結果を確認しているのを見たことがあります。

5.プログラムの作成

SQL文に関する処理は、図2のテキストボックスでText1_KeyDownイベントが発生したとき得られるKeyCodeにより、どのファンクションキーが押されたか判断し、それぞれの処理を実行します。
F・1のキーが押されたらヘルプを表示する、F・2キーが押されたらSQLを実行する、F・3のキーが押されたら終了する、と言った具合です。
このプログラムの中では、F・2のキーが押されたときの、SQLの実行処理、F・5が押されたときの、テーブルリストの表示処理、そして、F・6が押されたときの、Excelへのデータ出力が、主な機能になります。
この中から、F・2のキーが押されたときの、SQL文の実行処理について、はじめに説明します。
DMLの中では、SELECT・・・の処理がもっとも単純なもので、また、基本の処理になります。
この処理は、リスト4を応用して作成しました。
リスト6にSELECT・・・の処理ルーチンを示しますが、SQL文を引数として受け取り、SQL文をSet tabl = db.OpenRecordset(tx$, dbOpenDynaset)で処理し、処理結果を、Set Form4.Data1.Recordset = tablと言う形で、Form4のデータコントロールにわたしています、処理の内容は、リスト4そのままと言えます。
SELECT以外の処理、UPDATE、DELETE、INSERTについては、リスト7のように処理しています、これらの処理は、データを直接的に変更するため、別の処理になっています。

リスト6.SELECT文の実行

Private Sub run_sql(tx As String)
'---- SQL文の実行 ----- <SELECT ....> ------
'SQL文の実行 結果をForm4にセットします

On Error GoTo sql_err

'tx$ = "SELECT * FROM 会社" '--TEST ----

Dim db As Database
Dim tabl As Recordset
'Set db = DBEngine.Workspaces(0).OpenDatabase("a:\access\会社情報.mdb")
Set db = DBEngine.Workspaces(0).OpenDatabase(db_file$)
Set tabl = db.OpenRecordset(tx$, dbOpenDynaset)

Set Form4.Data1.Recordset = tabl
'---- TEST ------
'Do Until Form4.Data1.Recordset.EOF
' Debug.Print Form4.Data1.Recordset.Fields(0), Form4.Data1.Recordset.Fields(1)
' Form4.Data1.Recordset.MoveNext
'Loop

'----
On Error GoTo 0
Exit Sub

sql_err:
MsgBox "SQL文を実行したところ、エラーが発生しました" & Chr$(13) & Chr$(13) & _
"エラーコード:" & Err & " ( " & Err.HelpFile & " ) " & Chr$(13) & _
Err.Description

On Error GoTo 0

End Sub


リスト7.UPDATE,DELETE,INSERT文の実行

Private Sub run_sql_up(tx As String)
'---- SQL文の実行 ----- <UPDATE,DELETE,INSERT> ------
'SQL文の実行 結果をForm4にセットします

On Error GoTo sql_err

'tx$ = "SELECT * FROM 会社" '--TEST ----

Dim db As Database
Dim tabl As Recordset
'Set db = DBEngine.Workspaces(0).OpenDatabase("a:\access\会社情報.mdb")
Set db = DBEngine.Workspaces(0).OpenDatabase(db_file$)
db.Execute tx$

On Error GoTo 0
Exit Sub

sql_err:
MsgBox "SQL文を実行したところ、エラーが発生しました" & Chr$(13) & Chr$(13) & _
"エラーコード:" & Err & " ( " & Err.HelpFile & " ) " & Chr$(13) & _
Err.Description

On Error GoTo 0

End Sub


処理のそのものは、tx$にSQL文を受け取り、db.Execute tx$の部分で処理をしています。
ただ、UPDATEと、DELETEの処理では、一度対象データを表示して利用者の確認を取り、OKならデータの更新・削除をしています。
これは、QMFでもそのようになっているため、QMFにあわせてそのように処理しみました。
この処理を実現するためには、UPDATE (テーブル名) SET (項目名)=(値)となっているSQL文から、SELECT・・・のSQL文を作成する必要があります。
この処理をしているプログラムをリスト8に示します。

リスト8.UPDATE文をSELECT文に変換する

Private Sub up_ch_select(in_t As String, out_t As String)
'UPDATEをFROMに変換し、SELECT 文をつくる
in_t_len = Len(in_t$)
'UPDATEを探す
sk1 = 1
While Mid$(in_t$, sk1, 1) <> " "
sk1 = sk1 + 1
Wend
st1$ = Left$(in_t$, sk1 - 1)
'SETの文字列を探す
sk2 = sk1
Do While sch$ <> "set" And sch$ <> "SET" And sk2 <= in_t_len
sk2 = sk2 + 1
sch$ = ""
While Mid$(in_t$, sk2, 1) <> " " And Mid$(in_t$, sk2, 1) <> Chr$(10) _
And sk2 <= in_t_len 'TextBoxの改行はchr$(10)
sch$ = sch$ + Mid$(in_t$, sk2, 1)
'Debug.Print Asc(Mid$(in_t$, sk2, 1))
sk2 = sk2 + 1
Wend
Loop
st2$ = Mid$(in_t$, sk1, sk2 - sk1 - 3)
'WHEREの文字列を探す
sk3 = sk2
Do While sch$ <> "where" And sch$ <> "WHERE" And sk3 <= in_t_len
sk3 = sk3 + 1
sch$ = ""
While Mid$(in_t$, sk3, 1) <> " " And Mid$(in_t$, sk3, 1) <> Chr$(10) _
And sk3 <= in_t_len 'TextBoxの改行はchr$(10)
sch$ = sch$ + Mid$(in_t$, sk3, 1)
sk3 = sk3 + 1
Wend
Loop
sk3 = sk3 - 1
st3$ = ""
st3$ = Right$(in_t$, in_t_len - sk3)
'MsgBox st1$ & " " & st2$ & " " & st3$

'select .....文を作る
out_t$ = "select * " + Chr$(13)
If Right$(st2$, 1) = Chr$(10) Then
out_t$ = out_t$ + "from " + st2$
Else
out_t$ = out_t$ + "from " + st2$ + Chr$(13)
End If
If Len(st3$) >= 1 Then
If Right$(st3$, 1) = Chr$(10) Then
out_t$ = out_t$ + "where " + st3$
Else
out_t$ = out_t$ + "where " + st3$ + Chr$(13)
End If
End If
'MsgBox out_t$

End Sub


表示する項目は、SELECT * として、全項目を表示するようにしています、続けて、FROMの後には、UPDATEの後のテーブル名を取り出して挿入し、SELECT・・・の文を作成して、リスト6の処理にわたしています。
DELETEの処理も、UPDATEの処理同様に、DELETE FROMに続くテーブル名を取りだし、SELECT・・・文を作成しています、この処理をリスト9に示します。

リスト9.DELET FROM…文をSELECT…文に変換する

Private Sub del_ch_select(in_t As String, out_t As String)
'DELETE FROMをFROMに変換し、SELECT 文をつくる
in_t_len = Len(in_t$)
'DELETEを探す
sk0 = 1
While Mid$(in_t$, sk0, 1) <> " "
sk0 = sk0 + 1
Wend
st0$ = Left$(in_t$, sk0 - 1)
'FROMを探す
sk1 = sk0
Do While sch$ <> "from" And sch$ <> "FROM" And sk1 <= in_t_len
sk1 = sk1 + 1
sch$ = ""
While Mid$(in_t$, sk1, 1) <> " " And Mid$(in_t$, sk1, 1) <> Chr$(10) _
And sk1 <= in_t_len 'TextBoxの改行はchr$(10)
sch$ = sch$ + Mid$(in_t$, sk1, 1)
sk1 = sk1 + 1
Wend
Loop
st1$ = Mid$(in_t$, sk0 + 1, sk1 - sk0)

'WHEREの文字列を探す
sk3 = sk1
Do While sch$ <> "where" And sch$ <> "WHERE" And sk3 <= in_t_len
sk3 = sk3 + 1
sch$ = ""
While Mid$(in_t$, sk3, 1) <> " " And Mid$(in_t$, sk3, 1) <> Chr$(10) _
And sk3 <= in_t_len 'TextBoxの改行はchr$(10)
sch$ = sch$ + Mid$(in_t$, sk3, 1)
sk3 = sk3 + 1
Wend
Loop
sk3 = sk3 - 1
st3$ = ""
If sk3 <> in_t_len Then
st2$ = Mid$(in_t$, sk1 + 1, sk3 - sk1 - 5)
st3$ = Right$(in_t$, in_t_len - sk3)
Else
st2$ = Mid$(in_t$, sk1 + 1, sk3 - sk1)
End If
'MsgBox "0:" & st0$ & " 1:" & st1$ & " 2:" & st2$ & " 3:" & st3$

'select .....文を作る
out_t$ = "select * " + Chr$(13)
If Right$(st2$, 1) = Chr$(10) Then
out_t$ = out_t$ + "from " + st2$
Else
out_t$ = out_t$ + "from " + st2$ + Chr$(13)
End If
If Len(st3$) >= 1 Then
If Right$(st3$, 1) = Chr$(10) Then
out_t$ = out_t$ + "where " + st3$
Else
out_t$ = out_t$ + "where " + st3$ + Chr$(13)
End If
End If
'MsgBox out_t$

End Sub


続いて、F・5のキーが押されたときの、テーブルリストの表示機能について説明します。
開いたデータベースにあるテーブル名の一覧を、図3のダイアログの左側のGridに表示します。
このテーブル名の一覧を表示するする処理は、データベースファイルが選択されたときの処理に続けて処理をしています。
その処理はリスト10のようになっていて、Form3.MSFlexGrid1.TextArray(f1_ar + 1) = db_table.Nameの部分で、Gridにテーブル名をセットしています。
テーブル名が選択されると、右のGridに項目名を表示するのですが、これについてはリスト11のように処理しています。

リスト10.テーブルリストの作成

'--- テーブルリストの作成 --------------------
'f_name$ = "a:\access\会社情報.mdb"

'---テーブル名、項目名のセット
'Dim db_name As Database
'Dim db_work As Workspace
'Dim db_table As TableDef

Set db_work = DBEngine.Workspaces(0)
'Set db_name = db_work.OpenDatabase("a:\access\会社情報.mdb")
Set db_name = db_work.OpenDatabase(db_file$)
'MSFlexGridの行数を決めるため、一回読んでみる
f1_item = 1
For Each db_table In db_name.TableDefs
'MsgBox f1_item & " " & db_table.name
f1_item = f1_item + 1
Next
Form3.MSFlexGrid1.Rows = f1_item + 1
'Form1.MSFlexGrid1にフィールド名をセットする
f1_r = 1
For Each db_table In db_name.TableDefs
f1_ar = f1_r * Form3.MSFlexGrid1.Cols
Form3.MSFlexGrid1.TextArray(f1_ar + 0) = Str$(f1_r)
Form3.MSFlexGrid1.TextArray(f1_ar + 1) = db_table.Name
Form3.MSFlexGrid1.TextArray(f1_ar + 2) = ""
f1_r = f1_r + 1
'MsgBox f1_r & " " & db_feld.Name
Next
'
Form3.Label1.Caption = db_file$
Form1.Label1.Caption = "処理中のD/B:" + db_file$

リスト11.テーブルの中の項目一覧を作成する

Private Sub MSFlexGrid1_Click()
Dim k_f1 As String '選択されたテーブル名
Dim k_work(15) As String 'データ移動用ワークエリア

'--- Form1.MSFlexGridで選択されたテーブル名を得る
f31_row = Form3.MSFlexGrid1.Row
f31_col = Form3.MSFlexGrid1.Col
k_f1$ = Form3.MSFlexGrid1.Text
sel_tname$ = k_f1$
'MsgBox "行 " & MSFlexGrid1.Row & " 列 " & MSFlexGrid1.Col & Chr$(13) & _
"テーブル名 " & k_f1$

'---テーブルが選択済みか確認する、選択されていなければ
' 選択されたテーブル名を太字にする
If Form3.MSFlexGrid1.CellFontBold = False Then
'--- 前に選択されていた文字を元の太さにもどす
Form3.MSFlexGrid1.Row = sel_tno
For k = 1 To Form3.MSFlexGrid1.Cols - 1
Form3.MSFlexGrid1.Col = k
Form3.MSFlexGrid1.ColSel = k
Form3.MSFlexGrid1.CellFontBold = False '普通の太さに
Form3.MSFlexGrid1.CellBackColor = &H80000005 '背景を灰色に
Next k
'--- 選択されていなければ、もじを太字に変更
Form3.MSFlexGrid1.Row = f31_row
sel_tno = f31_row
For k = 1 To Form3.MSFlexGrid1.Cols - 1
Form3.MSFlexGrid1.Col = k
Form3.MSFlexGrid1.ColSel = k
Form3.MSFlexGrid1.CellFontBold = True '太字に
Form3.MSFlexGrid1.CellBackColor = &HC0C0C0 '背景を灰色に
Next k

'--項目数、項目名を得る
'Dim db_table As TableDef
Dim db_feld As Field
Dim f3g1_item As Integer
'Dim f1_r As Integer '処理している行No

'注.Feldeの数はどうしたら調べられるのでしょう??
f3g1_item = 0
For Each db_feld In db_name.TableDefs(k_f1$).Fields
f3g1_item = f3g1_item + 1
Next

'**** ここでForm3のGrid2の行数を設定している ********
Form3.MSFlexGrid2.Rows = f3g1_item + 1

'----フィールド名、データ型をセットする
f3g2_r = 1
For Each db_feld In db_name.TableDefs(k_f1$).Fields
Form3.MSFlexGrid2.Row = f3g2_r
Form3.MSFlexGrid2.Col = 0
Form3.MSFlexGrid2.Text = Str$(f3g2_r)
Form3.MSFlexGrid2.Col = 1
Form3.MSFlexGrid2.Text = db_feld.Name

d_type_na db_feld.Type, k_type$ 'データ型コードを名称に換える
Form3.MSFlexGrid2.Col = 2
Form3.MSFlexGrid2.Text = k_type$
Form3.MSFlexGrid2.CellAlignment = 1 'セル内の文字の左詰
f3g2_r = f3g2_r + 1
'MsgBox f3g2_r & " " & db_feld.Name
Next

Else
'選択済みの時はなにもしない
End If

End Sub


選択されたテーブル名を太字に変え、背景を灰色に変更するなどの処理をしていますが、この中で、項目名をセットしているのは、Form3.MSFlexGrid2.Text = db_feld.Nameの部分になります。
最後に、F・6が押されたときの、Excelにデータを出力する処理をリスト12に示します。

リスト12.Excelへデータを出力する

Case 117 'F6 Excelへデータを出力
'注意.Excelが開いているときに実行すると、エラーになる
'Excel97 OLE Link
'Dim exl_obj As Object Generalで宣言している
On Error GoTo exl_ole_err

Set exl_obj = CreateObject("excel.sheet")
exl_obj.application.Visible = True

'Excel OLE data SET
For k = 0 To Form4.MSFlexGrid1.Cols - 1
Form4.MSFlexGrid1.Col = k
For k1 = 0 To Form4.MSFlexGrid1.Rows - 1
Form4.MSFlexGrid1.Row = k1
ms_grid$ = Form4.MSFlexGrid1.Text
exl_obj.worksheets.application.cells(k1 + 1, k + 1).Value = ms_grid$
Next k1
Next k

On Error GoTo 0

'注.本来はExcelのオブジェクトを開放するのだが
' Excelを閉じるから開放しなくてもいい??
'Excel OLE quit
'exl_obj.application.quit
'Set exl_obj = Nothing

exl_ole_err:
'Excel OLE のエラー処理
MsgBox "Excelが開いていると、エラーになります。" & Chr$(13) & _
"続けてExcelにデータを出力するときは、" & Chr$(13) & _
"必要なデータを保存した上で、Excelを終了し、実行してださい"
On Error GoTo 0


Excelへは、OLEを利用してデータを転送しています。
データコントロールから直接Excelにデータを書きこむことも出来るようですが、今回は抽出データをExcelに転送するようにしました。
以上説明した処理以外に、コマンドの実行などがありますが、シーケンシャルファイルに書き出す、シーケンシャルファイルから読み込むといった一般的な処理のため、ここでは説明を割愛したいと思います。
また、コメント行の実行を無効にする処理は、実行時に編集用のテキストボックスから、実行用のテキストボックスにSQL文を移しているのですが、この処理の中で−−から行末までを除いて移すようにしています、内容的には単純な処理のため、必要であれば、出版社のサイトのソースファイルを参考にしてください。

6.まとめ

 今回はAccessを対象にしてプログラムを作成してみましたが、本を読んでSQLはこんなものかと言うだけでなく、実際にさわって試せることが大切だと思います。
多少の方言はあるとしても、SQLの表現方法は変わらないと思います、パソコンにある自分のデータベースや、VB5.0のンプルのデータベースを利用して、副照会やUNIONの使い方など、試してみてはどうかと思います。
実際のシステム開発のときは、今回作成したプログラムの、リスト6、リスト7が利用できるのではないかと思います、そして、システム開発中は、データ更新のテストをし、データを元に戻して、何回かテストを繰り返すことがあると思うのですが、特定のデータを抽出して、データを変更したいと言うときにも利用できると思います。


参考文献

「データアクセス オブジェクト ガイド」 マイクロソフト(株)
「標準SQLプログラミング」       啓学出版(株)
「DB2プログラミング教本」       (株)ビー・エヌ・エヌ

 


トップページにもどる  Monjyo ホームページにもどる   VisualBasic サンプルペーシにもどる