- ベストアンサー
VB6のADO接続と効率的なコードの記述方法
- VB6のADO接続方法と、レコードカウントを取得する効率的なコードの記述方法について教えてください。
- 目的は、テーブル[Allloto6]のレコードカウントを取得し、変数[WOI(10)]に格納することです。
- コード内のFORループの繰り返し回数が増えると処理が遅くなりますが、問題なく実行する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- airhead-no1
- ベストアンサー率48% (45/92)
- airhead-no1
- ベストアンサー率48% (45/92)
- airhead-no1
- ベストアンサー率48% (45/92)
- airhead-no1
- ベストアンサー率48% (45/92)
関連するQ&A
- ADO1とADO2は意味は同じですか?
Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- vb ado → vb2005 ado.net変換
お世話になります。初めて投稿させていただきます。 VB6.0で下記のようなコードでコンボボックスcboMakerへフィールド値を格納しているのですがこのコードをVB2005のado.netで記述したいのですが可能でしょうか?可能であればどのようなコードを書けばよいのでしょうか。フィールドの値を1レコードづつ取得することは可能なのでしょうか? 初心者ですみません。宜しくお願いします。 Dim con As ADODB.Connection Dim rec As ADODB.Recordset Dim sql As String Dim recCnt As Long con = New ADODB.Connection con.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & パス con.Open() rec = New ADODB.Recordset sql = "SELECT * FROM " & テーブル名 rec.Open(sql, con, adOpenStatic, adLockReadOnly) If rec.RecordCount < 1 Then 'レコードが存在しない MsgBox("未登録です。", G_MB_CAUTION, G_SYSTEM_NAME) Exit Function Else ReDim CboMakerId(rec.RecordCount) End If 'コンボボックスに値を挿入 ※「.List(recCnt)」から値を挿入する With Me.cboMaker .Clear() recCnt = 0 .List(recCnt) = "" .ItemData(recCnt) = 0 Do Until rec.EOF recCnt = recCnt + 1 .List(recCnt) = rec("Name") .ItemData(recCnt) = rec("ID") rec.MoveNext() Loop End With Me.cboMaker.ListIndex = 0 rec.Close() : rec = Nothing con.Close() : rec = Nothing End Function
- 締切済み
- Visual Basic
- adoのループについて カレントレコードについて
adoのFor i = 1 To rs.RecordCountについて質問があります。 Sub test() Dim i As Long Dim MyFileName As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "Tテーブル", cn, adOpenKeyset, adLockOptimistic For i = 1 To rs.RecordCount Debug.Print rs.Fields(0).Value rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これを実行した時に、テーブルには、1,2,3・・・という値が入っていて、 イミディエイドウインドウにも1,2,3・・・と順番に取得されるのですが、 For i = 1 To rs.RecordCountを実行した時は、強制的にrs.MoveFirstされるのでしょうか? For i = 1 To rs.RecordCount rs.MoveFirst Debug.Print rs.Fields(0).Value rs.MoveNext Next これと同じ意味なのでしょうか? RecordCount プロパティ (ADO) のヘルプを見ましたが、この件に関する記述は探せませんでした。 ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Access ADOについて質問です。
Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing ←この部分 ' cn.Close: Set cn = Nothing ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- ADO オブジェクトの渡し方
こんにちは。ADOについてお教えください。 フォームをロード時に接続プロシージャと切断プロシージャを走らせたいと思います。 ConnectDatabaseを呼び出しは成功しますが、CloseDatabase呼び出しには失敗します。 スコープの問題で、rs、cnのオブジェクトが無い為だと思います。 ConnectDatabaseで作成されたcn、rsオブジェクトを別の関数で処理するにはどのようにコードをかけばよろしいでしょうか?宜しくお願い致します。 Private Sub Form_Load() Call ConnectDatabase Call CloseDatabase End Sub Module1 ------------------ sub ConnectDatabase() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset 処理~~~~ end sub sub CloseDatabase() rs.Close cn.Close Set rs = Nothing Set cn = Nothing end sub
- ベストアンサー
- Visual Basic
- ADOでレコードを閉じるタイミング。。Access2000/VB6/Win2K
レコードセットを返すFuncitonプロシージャーを作ってみたのですが。。。 下のGet_Recordsの方のレコードセットをCloseすると上の方のDisp_Dataでオブ ジェクトが閉じているといって怒られます。しかし、閉じないと下の方では開きっ ぱなしになると思うのですが。。。どのように処理すればいいのでしょうか? Public P_CN As ADODB.Connection Private Sub Disp_Date() Dim RS As ADODB.Recordset Dim SQL AS String Set RS = Get_Records(SQL) With RS If .RecordCount > 0 Then .MoveLast: .MoveFirst .Debug.Print !顧客_ID End If End With RS.Close Set RS = Nothing End Sub Public Function Get_Records(pSQL As String) As ADODB.Recordset Dim RS As ADODB.Recordset Set RS = New ADODB.Recordset RS.Open pSQL, P_CN, adOpenKeyset, adLockOptimistic Set Get_Records = RS ''' RS.Close ''' Set RS = Nothing End Function
- ベストアンサー
- その他(データベース)
- ADOでAccessファイルに接続して、ファイルの
ADOでAccessファイルに接続して、ファイルの更新日時を取得するには? access2003です、 Private Sub 更新日時を取得() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = "D:\My Documents\システム.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & MyFileName 'ここで更新日時を取得 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub この状態で、更新日時を取得するにはどうすればいいでしょう? ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ADO 「認証に失敗しました」
ADOでデータベースに接続したいのですが ”実行時エラー -2147217843(80040e4d) 認証に失敗しました。” になります。 コードは Sub ado() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source" & CurrentProject.FullName ★ rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub です。 ★ 印の所でエラーになります。 宜しくお願いいたします。
- ベストアンサー
- Visual Basic
- EXCEL→Access ADO接続
お世話になります 現在ADOにてEXCEL側からAccessDBにアクセスし 値を取得しているのですが 現在下方向に貼り付けしているのですが 横方向に貼り付けさせる方法はありますか? 下記参考(現状VBAです) 現状:日付で絞込みをしています 日付け絞込みをしてヒットしたものに対して下方向に貼り付けています それを横方向に貼り付けさせたいのです Private Sub CommandButton1_Click() Dim myConn As ADODB.Connection Dim myRs As ADODB.Recordset Dim mySQL As String Dim myConstr As String Dim myDBFName As String Dim myPswd As String Dim tableName As String Dim orderDate As String Dim shipDate As String orderDate = Format(DateValue(DTPicker1.Value), "mm/dd/yyyy") shipDate = Format(DateValue(DTPicker2.Value), "mm/dd/yyyy") myDBFName = "Accessパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL =SQL文 Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn Worksheets("シート名").Range("開始セル名").CopyFromRecordset myRs myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub わかる方ご教授願います
- ベストアンサー
- オフィス系ソフト
- VBSでADOを使ってaccessのテーブルに接続
VBSでADOを使ってaccessのテーブルに接続する方法は? Sub ADO_test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb" rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic MsgBox "test成功です" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub をACCESSVBAで実行すると成功しますが 全く同じコードをメモ帳に貼り付けてtest.vbsで保存し、ダブルクリックすると、 行:3 文字:11 エラー:ステートメントの末尾が不正です。 コード:800A0401 のエラーになります。 VBAは少しわかるのですが、VBSに関しては初心者です。 どこを修正すればコードが通るのか教えてください。
- ベストアンサー
- オフィス系ソフト
お礼
御教授頂いた事を参考にして、自分なりにサンプルを幾つか作って勉強してみようと思います。 また分からない時は、御付き合い頂ければ幸いです。 詳細な御教授を有難う御座いました。
補足
今晩は。 何度も詳細説明を有難う御座います。 さて、 失礼ですが、NO5 では [ FOR ]で2回繰り返しは「応答なし」、 代わりに、NO1 NO4 で、アタリでした。下記コードです。 30まで繰り返しで、所要時間約5分でした。 IY0 = "KM6" IY1 = "Allloto6" DDDD.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE =E:\U SS VB\IK NY DATA\" & IY0 & ".mdb" DDDD.Open For I1 = 1 To 30 IY2 = "SELECT Count(A) AS DataCount FROM " & IY1 & " WHERE A = " & I1 RTR.Open IY2, DDDD, adOpenForwardOnly, adLockReadOnly If RTR.Fields("DataCount").Value <> 0 Then WOI(I1) = RTR.Fields("DataCount").Value End If RTR.Close Next I1 DDDD.Close