Private Sub FitGrid(gr As MSHFlexGrid) Dim i As Integer, j As Long, maxW As Long, curW As Long gr.AllowUserResizing = flexResizeBoth 'グリッドの列幅調整を手作業でもできるように For i = 0 To gr.Cols - 1 '各列について繰り返す gr.Col = i '現在の列をカレント列に gr.Row = 0 '1行目をカレント行に ' maxW = gr.CellFontSize * LenB(gr.Text) * 20 / 2 maxW = TextWidth(gr.Text) 'カレントセルのセル幅を、フォントサイズ、文字バイト数から求める For j = 1 To gr.Rows - 1 '2行目以降について gr.Row = j 'カレント行に設定し ' curW = gr.CellFontSize * LenB(gr.Text) * 20 / 2 curW = TextWidth(gr.Text) '列幅を求める If curW > maxW Then maxW = curW '最大の列幅であれば、それを変数に残す Next j gr.ColWidth(i) = maxW * 1.2 '列幅を最大値に設定する Next i End Sub Private Sub Command1_Click() Unload f_chap3 End Sub Private Sub Command10_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As New ADODB.Connection 'Connectionも新しく作成 Dim fNum As Integer, i As Integer, oneRow As String Dim fieldData As Variant, cs As String cs = "Provider=SQLOLEDB;Data Source=CLOSE" con.Open cs, "user", "user" 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う rs.Open 'レコードセットを構築する fNum = rs.Fields.Count 'レコードセットのフィールド数を数える MSHFlexGrid1.Cols = fNum + 1 'グリッドの列数をフィールド数+1にする MSHFlexGrid1.Rows = 0 'これから行を設定するので既存の行をクリアする oneRow = "" For i = 0 To fNum - 1 oneRow = oneRow + vbTab + rs.Fields(i).Name 'フィールド名をタブで区切ったテキストに入れる Next i MSHFlexGrid1.AddItem oneRow 'グリッドの1行目にフィールド名が表示される rs.MoveFirst '念のため、カレントレコードは先頭にしておく Do While (rs.EOF <> True) '最後のレコードまで繰り返す oneRow = CStr(rs.AbsolutePosition) '1列目はレコード番号 For i = 0 To fNum - 1 'フィールドの数だけ繰り返す fieldData = rs.Fields(i).Value 'フィールドのデータを取り出す If IsNull(fieldData) Then 'もしNullなら oneRow = oneRow + vbTab '何もデータを追加しないで区切りのタブのみを設定 Else 'Nullでないなら oneRow = oneRow + vbTab + CStr(fieldData) 'タブ区切りテキストとしてつなげる End If Next i MSHFlexGrid1.AddItem oneRow 'グリッドの新しい行に続ける rs.MoveNext 'カレントレコードを次のレコードに Loop rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる MSHFlexGrid1.FixedCols = 1 MSHFlexGrid1.FixedRows = 1 'グリッドの1列目、1行目を固定する FitGrid MSHFlexGrid1 'グリッドの各列幅を文字にあわせて調整 End Sub Private Sub Command11_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fNum As Integer, i As Integer, oneRow As String Dim fieldData As Variant Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う 'rs.Source = "select id,company from customers where id<110" 'レコードセットに取り込むデータをSQLステートメントで指定 rs.CursorLocation = adUseServer rs.CursorType = adOpenDynamic rs.LockType = adLockPessimistic rs.Open 'レコードセットを構築する rs.AddNew rs.Fields("name").Value = "testXX" rs.Update Debug.Print rs.Fields("id").Value 'X = rs.Bookmark rs.MoveFirst rs.Resync 'rs.Bookmark = X Debug.Print rs.Fields("id").Value rs.Close End Sub Private Sub Command12_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fNum As Integer, i As Integer, oneRow As String Dim fieldData As Variant Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する 'rs.Source = "customers" 'テーブルを使う rs.Source = "select id,company from customers where id<110" 'レコードセットに取り込むデータをSQLステートメントで指定 Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Open 'レコードセットを構築する rs.Save "c:\rs_presist.rs" End Sub Private Sub Command13_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する rs.Open "c:\rs_presist.rs", , adOpenDynamic, adLockPessimistic fNum = rs.Fields.Count 'レコードセットのフィールド数を数える MSHFlexGrid1.Cols = fNum + 1 'グリッドの列数をフィールド数+1にする MSHFlexGrid1.Rows = 0 'これから行を設定するので既存の行をクリアする oneRow = "" For i = 0 To fNum - 1 oneRow = oneRow + vbTab + rs.Fields(i).Name 'フィールド名をタブで区切ったテキストに入れる Next i MSHFlexGrid1.AddItem oneRow 'グリッドの1行目にフィールド名が表示される rs.MoveFirst '念のため、カレントレコードは先頭にしておく Do While (rs.EOF <> True) '最後のレコードまで繰り返す oneRow = CStr(rs.AbsolutePosition) '1列目はレコード番号 For i = 0 To fNum - 1 'フィールドの数だけ繰り返す fieldData = rs.Fields(i).Value 'フィールドのデータを取り出す If IsNull(fieldData) Then 'もしNullなら oneRow = oneRow + vbTab '何もデータを追加しないで区切りのタブのみを設定 Else 'Nullでないなら oneRow = oneRow + vbTab + CStr(fieldData) 'タブ区切りテキストとしてつなげる End If Next i MSHFlexGrid1.AddItem oneRow 'グリッドの新しい行に続ける rs.MoveNext 'カレントレコードを次のレコードに Loop rs.Close 'レコードセットを閉じる MSHFlexGrid1.FixedCols = 1 MSHFlexGrid1.FixedRows = 1 'グリッドの1列目、1行目を固定する FitGrid MSHFlexGrid1 'グリッドの各列幅を文字にあわせて調整 End Sub Private Sub Command14_Click() Dim p1 As Long, p2 As Long p1 = DataEnvironment1.StoredProcedure1(10, p2) Debug.Print p1, p2 End Sub Private Sub Command15_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fNum As Integer, i As Integer, oneRow As String Dim fieldData As Variant Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する 'rs.Source = "customers" 'テーブルを使う 'rs.Source = "select id,name from items where exists" & _ ' "(select * from meisai" & _ ' " where item_id = items.id AND id between 300 and 303)" 'rs.Source = "select id,name from items where id IN" & _ ' "(select item_id from meisai" & _ ' " where id between 300 and 303)" 'rs.Source = "select item_id,name,sum(price) from meisai_item_name" & _ ' " group by item_id,name" rs.Source = "select * from items" & _ " where id=any (select item_id from meisai" & _ " where id between 390 and 399)" 'レコードセットに取り込むデータをSQLステートメントで指定 rs.CursorLocation = adUseClient Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Open 'レコードセットを構築する fNum = rs.Fields.Count 'レコードセットのフィールド数を数える MSHFlexGrid1.Cols = fNum + 1 'グリッドの列数をフィールド数+1にする MSHFlexGrid1.Rows = 0 'これから行を設定するので既存の行をクリアする oneRow = "" For i = 0 To fNum - 1 oneRow = oneRow + vbTab + rs.Fields(i).Name 'フィールド名をタブで区切ったテキストに入れる Next i MSHFlexGrid1.AddItem oneRow 'グリッドの1行目にフィールド名が表示される rs.MoveFirst '念のため、カレントレコードは先頭にしておく Do While (rs.EOF <> True) '最後のレコードまで繰り返す oneRow = CStr(rs.AbsolutePosition) '1列目はレコード番号 For i = 0 To fNum - 1 'フィールドの数だけ繰り返す fieldData = rs.Fields(i).Value 'フィールドのデータを取り出す If IsNull(fieldData) Then 'もしNullなら oneRow = oneRow + vbTab '何もデータを追加しないで区切りのタブのみを設定 Else 'Nullでないなら oneRow = oneRow + vbTab + CStr(fieldData) 'タブ区切りテキストとしてつなげる End If Next i MSHFlexGrid1.AddItem oneRow 'グリッドの新しい行に続ける rs.MoveNext 'カレントレコードを次のレコードに Loop rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる MSHFlexGrid1.FixedCols = 1 MSHFlexGrid1.FixedRows = 1 'グリッドの1列目、1行目を固定する FitGrid MSHFlexGrid1 'グリッドの各列幅を文字にあわせて調整 End Sub Private Sub Command2_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fNum As Integer, i As Integer, oneRow As String Dim fieldData As Variant Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する 'rs.Source = "customers" 'テーブルを使う rs.Source = "select id,company from customers where id<110" 'レコードセットに取り込むデータをSQLステートメントで指定 rs.CursorLocation = adUseClient rs.Fields.Append "name", adVarChar, 100 Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Open 'レコードセットを構築する fNum = rs.Fields.Count 'レコードセットのフィールド数を数える MSHFlexGrid1.Cols = fNum + 1 'グリッドの列数をフィールド数+1にする MSHFlexGrid1.Rows = 0 'これから行を設定するので既存の行をクリアする oneRow = "" For i = 0 To fNum - 1 oneRow = oneRow + vbTab + rs.Fields(i).Name 'フィールド名をタブで区切ったテキストに入れる Next i MSHFlexGrid1.AddItem oneRow 'グリッドの1行目にフィールド名が表示される rs.MoveFirst '念のため、カレントレコードは先頭にしておく Do While (rs.EOF <> True) '最後のレコードまで繰り返す oneRow = CStr(rs.AbsolutePosition) '1列目はレコード番号 For i = 0 To fNum - 1 'フィールドの数だけ繰り返す fieldData = rs.Fields(i).Value 'フィールドのデータを取り出す If IsNull(fieldData) Then 'もしNullなら oneRow = oneRow + vbTab '何もデータを追加しないで区切りのタブのみを設定 Else 'Nullでないなら oneRow = oneRow + vbTab + CStr(fieldData) 'タブ区切りテキストとしてつなげる End If Next i MSHFlexGrid1.AddItem oneRow 'グリッドの新しい行に続ける rs.MoveNext 'カレントレコードを次のレコードに Loop rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる MSHFlexGrid1.FixedCols = 1 MSHFlexGrid1.FixedRows = 1 'グリッドの1列目、1行目を固定する FitGrid MSHFlexGrid1 'グリッドの各列幅を文字にあわせて調整 End Sub Private Sub Command3_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う 'rs.Source = "select id,company from customers where id<110" 'レコードセットに取り込むデータをSQLステートメントで指定 'rs.CursorLocation = adUseServer 'rs.CursorType = adOpenForwardOnly 'rs.LockType = adLockPessimistic 'カーソルとロックの設定を行う rs.Open 'レコードセットを構築する MSHFlexGrid1.Cols = 2 'グリッドの列数を2にする MSHFlexGrid1.Rows = 0 'これから行を設定するので既存の行をクリアする MSHFlexGrid1.AddItem "定義定数" + vbTab + "値" 'グリッドの1行目にフィールド見出しを表示する MSHFlexGrid1.AddItem "adAddNew" + vbTab + CStr(rs.Supports(AddNew)) MSHFlexGrid1.AddItem "adApproxPosition" + vbTab + CStr(rs.Supports(adApproxPosition)) MSHFlexGrid1.AddItem "adBookmark" + vbTab + CStr(rs.Supports(adBookmark)) MSHFlexGrid1.AddItem "adDelete" + vbTab + CStr(rs.Supports(adDelete)) MSHFlexGrid1.AddItem "adFind" + vbTab + CStr(rs.Supports(adFind)) MSHFlexGrid1.AddItem "adHoldRecords" + vbTab + CStr(rs.Supports(adHoldRecords)) MSHFlexGrid1.AddItem "adMovePrevious" + vbTab + CStr(rs.Supports(adMovePrevious)) MSHFlexGrid1.AddItem "adNotify" + vbTab + CStr(rs.Supports(adNotify)) MSHFlexGrid1.AddItem "adResync" + vbTab + CStr(rs.Supports(adResync)) MSHFlexGrid1.AddItem "adUpdate" + vbTab + CStr(rs.Supports(adUpdate)) MSHFlexGrid1.AddItem "adUpdateBatch" + vbTab + CStr(rs.Supports(adUpdateBatch)) 'サポート機能をチェックし、グリッドに書き込む rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる MSHFlexGrid1.FixedCols = 1 MSHFlexGrid1.FixedRows = 1 'グリッドの1列目、1行目を固定する FitGrid MSHFlexGrid1 'グリッドの各列幅を文字にあわせて調整 End Sub Private Sub Command4_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fList(3), vList(3) Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う rs.CursorLocation = adUseServer rs.CursorType = adOpenForwardOnly rs.LockType = adLockPessimistic 'カーソルとロックの設定を行う rs.Open 'レコードセットを構築する fList(0) = "company": vList(0) = "test1" fList(1) = "name": vList(1) = "test1" fList(2) = "zip": vList(2) = "test1" fList(3) = "address1": vList(3) = "test1" 'rs.AddNew fList, vList rs.AddNew rs.Fields("company").Value = "test2" rs.Update rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる End Sub Private Sub Command5_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Dim fList(3), vList(3) Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う rs.CursorLocation = adUseServer rs.CursorType = adOpenForwardOnly rs.LockType = adLockPessimistic 'カーソルとロックの設定を行う rs.Open 'レコードセットを構築する rs.MoveFirst Do While (rs.EOF <> True) If IsNull(rs.Fields("section").Value) Then rs.Fields("section") = "xxxxxxxx" End If If rs.AbsolutePosition Mod 2 = 0 Then rs.CancelUpdate End If rs.MoveNext Loop rs.Close 'レコードセットを閉じる con.Close 'Connectionを閉じる End Sub Private Sub Command6_Click() Dim rs As New ADODB.Recordset 'レコードセットを新しく用意する Dim con As ADODB.Connection 'Connectionは既存のものを使う Set con = DataEnvironment1.Connection1 'Data EnvironmentにあるConnectionを参照する con.Open 'Connectionを開く Set rs.ActiveConnection = con 'レコードセットに利用するConnectionを設定する rs.Source = "customers" 'テーブルを使う rs.CursorLocation = adUseServer rs.CursorType = adOpenForwardOnly rs.LockType = adLockPessimistic 'カーソルとロックの設定を行う rs.Open 'レコードセットを構築する Set MSHFlexGrid1.Recordset = rs MSHFlexGrid1.AllowUserResizing = flexResizeBoth End Sub Private Sub Command7_Click() Dim rs As ADODB.Recordset Set rs = MSHFlexGrid1.Recordset rs.Filter = "id<110" End Sub Private Sub Command8_Click() Dim rs As ADODB.Recordset Set rs = MSHFlexGrid1.Recordset rs.Sort = "name desc" End Sub Private Sub Command9_Click() Dim act As ADODB.Command Dim pList(2), af As Integer 'Set act = DataEnvironment1.Commands("Command2") pList(0) = "test3-1" pList(1) = "test3-2" pList(2) = "test3-3" 'act.Execute af, pList DataEnvironment1.Command2 "zz", "zz", "zz" End Sub