1) ツールボックスから、MenuStrip を Form にドラッグ&ドロップ
2) メニュー項目を3つ作成
A) テーブル一覧
B) CSV出力
C) 接続先情報の変更
メニューの動作を確認
拡張子:
Private Sub テーブル一覧ToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles テーブル一覧ToolStripMenuItem.Click
MessageBox.Show("テーブル一覧")
End Sub
Private Sub CSV出力ToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CSV出力ToolStripMenuItem.Click
MessageBox.Show("CSV出力")
End Sub
Private Sub 接続先情報の変更ToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles 接続先情報の変更ToolStripMenuItem.Click
MessageBox.Show("接続先情報の変更")
End Sub
Private Sub 接続先情報の変更ToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles 接続先情報の変更ToolStripMenuItem.Click
Dim MyDialog As New Dialog1()
Dim ret As DialogResult = MyDialog.ShowDialog(Me)
MyDialog.Dispose()
End Sub
Public Server As String
Public User As String = "lightbox"
Public Pass As String = "lightbox"
処理毎に、DB アクセス用のインスタンスを作成
拡張子:
Dim db As New DbOracle(Server, User, Pass)
メニュー項目のイベントに以下を実装
拡張子:
Dim db As New DbOracle(Server, User, Pass)
If Not db.Connect() Then
MessageBox.Show("接続に失敗しました")
Return
End If
db.Query("select * from USER_TABLES order by TABLE_NAME")
Me.LboxGrid1.Clear()
Do While db.Read()
Me.LboxGrid1.AddRow()
Me.LboxGrid1.SetColumnText("TABLE", db.GetValue("TABLE_NAME"))
Loop
db.Close()
Imports System.Windows.Forms
Public Class Dialog1
Private Sub Dialog1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.サーバー.Text = Form1.Server
Me.ユーザー.Text = Form1.User
Me.パスワード.Text = Form1.Pass
End Sub
Private Sub OK_Button_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles OK_Button.Click
Form1.Server = Me.サーバー.Text
Form1.User = Me.ユーザー.Text
Form1.Pass = Me.パスワード.Text
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
End Class
Private Sub LboxGrid1_CellClick(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles LboxGrid1.CellClick
If e.RowIndex < 0 Then
Return
End If
TableName = LboxGrid1.GetColumnText(e.RowIndex, "TABLE")
Dim db As New DbOracle(Server, User, Pass)
If Not db.Connect() Then
MessageBox.Show("接続に失敗しました")
Return
End If
Dim Query As String = "select * from USER_TAB_COLUMNS "
Query += " where TABLE_NAME = '" + TableName + "'"
Query += " order by COLUMN_ID"
db.Query(Query)
Me.LboxGrid2.Clear()
Do While db.Read()
Me.LboxGrid2.AddRow()
Me.LboxGrid2.SetColumnText("COL", db.GetValue(1))
Me.LboxGrid2.SetColumnText("ATT", db.GetValue("DATA_TYPE"))
Me.LboxGrid2.SetColumnText("LEN", db.GetValue("CHAR_COL_DECL_LENGTH"))
Loop
db.Close()
End Sub
/**********************************************************/
/* 定義部分 */
/**********************************************************/
検索cur SYS_REFCURSOR;
---------------------------------------------------------
/**********************************************************/
/* 動的 SELECT */
/**********************************************************/
WK_VALUE := 'SELECT * FROM 社員マスタ WHERE 社員コード >= :仮引数';
OPEN 検索cur for WK_VALUE using PM_STRING;
LOOP
FETCH 検索cur INTO 社員_REC;
EXIT when 検索cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( 社員_REC.社員コード || ' : ' || 社員_REC.氏名);
END LOOP;
CLOSE 検索cur;
引数の文字列で、動的カーソルを作成する
拡張子:
PROCEDURE CSV高速出力
(
PM_STRING IN VARCHAR2
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
検索cur SYS_REFCURSOR;/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
OPEN 検索cur for PM_STRING;
CLOSE 検索cur;/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
DB からデータを取得
拡張子:
PROCEDURE CSV高速出力
(
PM_STRING IN VARCHAR2
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
検索cur SYS_REFCURSOR;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
OPEN 検索cur for PM_STRING;
LOOPFETCH 検索cur INTO WK_VALUE;EXIT when 検索cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( substr(WK_VALUE,1,20) );
END LOOP;
CLOSE 検索cur;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
ファイルの出力先を決定
拡張子:
PROCEDURE CSV高速出力
(
PM_STRING IN VARCHAR2
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
検索cur SYS_REFCURSOR;
FILEHANDLE UTL_FILE.FILE_TYPE;/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
FILEHANDLE := UTL_FILE.FOPEN( 'CSV', '高速出力.CSV', 'w' );
OPEN 検索cur for PM_STRING;
LOOP
FETCH 検索cur INTO WK_VALUE;
EXIT when 検索cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( substr(WK_VALUE,1,20) );
END LOOP;
CLOSE 検索cur;
UTL_FILE.FCLOSE( FILEHANDLE );
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
データを出力
拡張子:
PROCEDURE CSV高速出力
(
PM_STRING IN VARCHAR2
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
RET_VALUE VARCHAR2(2000);
WK_VALUE VARCHAR2(2000);
検索cur SYS_REFCURSOR;
FILEHANDLE UTL_FILE.FILE_TYPE;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
FILEHANDLE := UTL_FILE.FOPEN( 'CSV', '高速出力.CSV', 'w' );
OPEN 検索cur for PM_STRING;
LOOP
FETCH 検索cur INTO WK_VALUE;
EXIT when 検索cur%NOTFOUND;
UTL_FILE.PUTF( FILEHANDLE, '%s\n', WK_VALUE );
DBMS_OUTPUT.PUT_LINE( substr(WK_VALUE,1,20) );
END LOOP;
CLOSE 検索cur;
UTL_FILE.FCLOSE( FILEHANDLE );
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
Dim db As New DbOracle(Server, User, Pass)
If Not db.Connect() Then
MessageBox.Show("接続に失敗しました")
Return
End If
Dim str As String
str = strLine.Replace("'", "''")
str = "BEGIN CSV高速出力('" + str + "' ); END;"
If db.Execute(str) = -2 Then
MessageBox.Show(db.myError)
End If
db.Close()