↓ソースコードのダウンロード ブラウザでダウンロード 列の作成通常、初期処理として良く使用される フォームの Load イベントで プロシージャ一覧用の、列を追加します。 ColumnHeadersHeightSizeMode は、自動にしてしまうと 長いタイトル文字列が折れ返されてしまいます。 ' ****************************************************** ' 初期処理 ' ****************************************************** Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' プロシージャ一覧の LboxGrid を初期化 Me.LboxGrid2.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.EnableResizing Me.LboxGrid2.AddColumn("NAME", "プロシージャ名") Me.LboxGrid2.AddColumn("STATUS", "状態") Me.LboxGrid2.AddColumn("TYPE", "タイプ") Me.LboxGrid2.AddColumn("CREATE", "作成日") Me.LboxGrid2.AddColumn("UPDATE", "更新日") End Sub プロシージャ一覧を呼び出す為の SQL を準備プロジェクトでディレクトリを追加し、そこに外部データとして SQL を記述したテキストを作成します。 select OBJECT_NAME as "プロシージャ名" ,STATUS as "状態" ,OBJECT_TYPE as "タイプ" ,CREATED as "作成日" ,LAST_DDL_TIME as "更新日" from USER_OBJECTS where OBJECT_TYPE in ('FUNCTION','PROCEDURE') order by "プロシージャ名" 一覧作成用のメソッドを作成他で呼び出す事を考え、イベントに直接書かずにメソッドとして作成し、 ダイアログの接続処理から呼び出すようにします ' ****************************************************** ' プロシージャ一覧作成 ' ****************************************************** Private Function Init_Proc_List() As Boolean ' 行データを全て削除 Me.LboxGrid2.Clear() ' DB にアクセスする為の SQL を外部から取得する為に特化された ' スタティックなメソッドを使用する Dim Query As String = DbHelper.GetSql("..\..\データ\proc_list.sql") ' 内容を確認する為に、コンソールに出力しておく Console.WriteLine(Query) ' 読み出し If Not db.Query(Query) Then Console.WriteLine(db.myError) Return False End If ' LboxGrid にデータを追加 Do While db.Read() ' 行追加 Me.LboxGrid2.AddRow() ' DB よりデータセット ' ( AddRow 直後なので、行のインデックスを指定する必要が無い ) Me.LboxGrid2.SetColumnText("NAME", db.GetValue("プロシージャ名")) Me.LboxGrid2.SetColumnText("STATUS", db.GetValue("状態")) Me.LboxGrid2.SetColumnText("TYPE", db.GetValue("タイプ")) Me.LboxGrid2.SetColumnText("CREATE", db.GetValue("作成日")) Me.LboxGrid2.SetColumnText("UPDATE", db.GetValue("更新日")) Loop Return True End Function 以下のようして呼び出しています ( ダイアログ呼び出しの詳細はこちらを参照 ) ' 接続 If Not db.Connect() Then LboxText.MessageError("接続に失敗しました") Console.WriteLine(db.myError) ' カーソルとウインドウをを元に戻す Me.Cursor = Cursors.Default Me.Enabled = True Exit Sub End If ' プロシージャ一覧作成 If Not Init_Proc_List() Then LboxText.MessageError("プロシージャ一覧の読み出しに失敗しました") End If ' 接続解除 db.Close() リストをダブルクリックしてソースを表示Oracle 用の DB クラスには、ストアードプロシージャのテキストを取得する メソッドを用意してあるのでそれを使います。 LboxEditor1.Editor の Editor は、リッチテキストボックスのインスタンスです ' ****************************************************** ' セルをダブルクリック( 行と列の位置を取得 ) ' ****************************************************** Private Sub LboxGrid2_CellDoubleClick(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles LboxGrid2.CellDoubleClick Dim col As Integer = e.ColumnIndex ' カラム位置( ここでは使用しない ) Dim row As Integer = e.RowIndex ' 行位置 Dim proc As String = Me.LboxGrid2.GetColumnText(row, "NAME") ' 確認の為に、コンソールに表示 Console.WriteLine(proc) ' 接続 If Not db.Connect() Then LboxText.MessageError("接続に失敗しました") Console.WriteLine(db.myError) Exit Sub End If Me.LboxEditor1.Editor.Text = db.QueryProcText(proc) ' 接続解除 db.Close() End Sub DbOracle.QueryProcText
' ****************************************************** ' SQL を実行して プロシージャのテキストを取得 ' ****************************************************** Public Function QueryProcText(ByVal proc As String) As String Me._SqlString = String.Format( _ "select * from USER_SOURCE where NAME = '{0}'" + _ " order by LINE ", proc.ToUpper()) ' 読み取りオブジェクトが閉じていない場合は、閉じる If Not Me.myReader Is Nothing Then If Not Me.myReader.IsClosed Then Me.myReader.Close() End If End If Me.myCommand.CommandText = Me._SqlString Try Me.myReader = myCommand.ExecuteReader() Catch ex As Exception Me._myError = ex.Message Return "ERROR" End Try Dim ret As String ret = "" Do While Me.Read() ret &= Me.GetValue("TEXT") Loop Me.Close() Return ret End Function |