• 締切済み

VBのデータグリッドが表示されない!!!

こんにちはtmgmです。 データグリッドが表示されません。 状況としては 1.プログラムは正常に動いています。(「接続に成功しました」メッセージ、「レコード取得に成功しました」メッセージ、ともに表示されます。) 2.しかしデータグリッドには何一つ表示されません。(ツールボックスから貼り付けたままの状態です) 3.参照設定はMicrosoft ActiveX Data Objects 2.5 Library、コンポーネントはMicrosoft DataGrid Control6.0(SP5)(OLEDB)です。 どなたかお分かりになる方いらっしゃいますでしょうか?非常に困っています。 ご返答よろしくお願いします。 ------------------------------------------------ Dim CONN As ADODB.Connection 'レコードセットの宣言 Dim RECO As ADODB.Recordset '接続の宣言 Set CONN = New ADODB.Connection '接続のプロパティ With CONN .ConnectionString=     "provider=Microsoft.jet.oledb.4.0;" _ & "data source=C:\TESTMDB.mdb" .Open End With MsgBox "データベース接続に成功しました"   'レコードセットのプロパティ Set RECO = New Recordset With RECO .ActiveConnection = CONN .Source = "SELECT ~(省略)" .CursorLocation = adUseClient .CursorType = adOpenStatic .LockType = adLockOptimistic .Properties("IRowsetIdentity") = True .Open End With   'レコードセットをデータグリッドに連結 Set D_GRID.DataSource = RECO MsgBox "レコードセット取得に成功しました ------------------------------------------------

  • tmgm
  • お礼率17% (47/273)

みんなの回答

回答No.4

#3の続き SQL文のField名とグリッドのField名は一致していますか?括弧などあるとうまくいかない場合があります。 その場合は、SQL分でAS<別名>をつけグリットでも別名をfield名にするとうまきいきます。 これでだめならadodc経由でつないでみてはいかがでしょうか?

回答No.3

グリッドのデータソースを指定した後にグリッドの更新をしないと表示されません。 >  'レコードセットをデータグリッドに連結 >Set D_GRID.DataSource = RECO この後に  D_GRID.Refresh データコントロールを使用している場合には、  <データコントロール名>.Refresh

tmgm
質問者

補足

ご回答ありがとうございます。 D_GRID.Refreshと記述してみたんですが、だめでした。データグリッドのCaptionプロパティとかはきちんと反映されるんですけどねぇ~

  • Tibian
  • ベストアンサー率15% (30/188)
回答No.2

まず、SQLが正しいかどうか調べるためにDB上で実行してください。もし、それでレコードが取得できたのならプログラムに問題があります。 第二にADOコントロールで接続して表示できるか試してください。 残念ながらこのプログラムではメッセージボックスで文字が表示されたからと言って正常にレコードセットが取得できているとは確認できません。とれていなくてもでます。

回答No.1

見た感じでは問題なさそうですね ですが、2点ほどあります 1.レコードセットの宣言は良いのですが、展開時が?  ×Set RECO = New Recordset  ○Set RECO = New ADODB.Recordset 2.SQL文を省略されていますが、そのSQLは正しいですか?

tmgm
質問者

補足

1.Set RECO = New ADODB.Recordsetに修正しましたができませんでした。(泣) 2.SQL文の実行テストでは正確にデータを抽出してきました。 他の理由は考えられますか?

関連するQ&A

  • VBのDataGridで見られるエラーについての質問

    こんにちはtmgmです。 VisualBasic6.0のデータベース連携プログラムで困っています。 ACCESSであらかじめ.mdbを作成しておいて、そのDBに接続し、DataGridにmdbのデータを表示するという単純なプログラムなんですが、どうしても決まったエラーが出てしまいます。 下記プログラムの、Set D_GRID.DataSource = RECOでいつもエラーになります。 エラー内容は「行セットにはブックマークを指定できません」です。 つまりはこのエラーの意味がわからないので困っています。 分かる方、ご返答よろしくお願いします。 <補足> プログラムはこんな感じです。 ---------------------------------------------------------------------------- Private Sub Form_Load() '接続の定義 Dim CONN As adodb.Connection 'レコードセットの宣言 Dim RS As adodb.Recordset Set CONN = New adodb.Connection With CONN .ConnectionString = "provider=Microsoft.jet.oledb.4.0;" _ & "data source=C:\TESTMDB.mdb" .Open End With MsgBox "データベース接続に成功しました。", vbOKOnly + vbInformation, "VBプログラミング" Set RECO = New Recordset With RECO .ActiveConnection = CONN .Source = "T_TEST" .CursorType = adOpenDynamic .LockType = adLockOptimistic .Properties("IRowsetIdentity") = True .Open End With Set D_GRID.DataSource = RECO   Msgbox "データの取得に成功しました。", vbOkOnly + vbInformation, "VBプログラミング" End Sub

  • VBのデータグリッドの表示が消えてしまいました。何故でしょうか?

      cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" cn.Open mySQL= "SELECT * FROM 2学年 " _ & "WHERE (((所属)='" & frmPW.cmb生徒.Text & "'))" Set rs= New ADODB.Recordset rs.Open mySQL, cn, adOpenStatic Set DataGrid1.DataSource = rs と記述していて、それまでデータグリッドにデータが上手く表示されていたのに、 接続先のmdbファイルにパスワードを設定して、ConnectionStringの設定部分を   cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" & _ "Jet OLEDB:Database Password=seito2;" に変更したところ、データグリッドにデータが表示されなくなりました。 データベースへの接続は上手くいっているようなのですが、何故データグリッドに データが表示されなくなったのでしょうか。 よろしくお願いします。

  • データグリッド・・・?

    データグリッドにデータを入れたいのですが、入りません。ソースを書きますのでご指摘お願いします。 Set cn = New ADODB.Connection Set rs = New ADODB.Recordset ' 接続文字列を設定 cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:¥aaa.mdb" ' コネクションをオープン cn.Open ' 選択クエリーを作成 strSQL = "Select * From bbb where ID = " & dbid & _ " ORDER BY 年月日 DESC" ' レコードセットをオープン rs.Open strSQL, cn, adOpenStatic, adLockOptimistic set DataGrid1.DataSource = rs ' オブジェクトを閉じる rs.Close cn.Close ' オブジェクトを解放 Set rs = Nothing Set cn = Nothing

  • 【VB】データグリッドコントロールにデータベースを表示させたい

    お世話になります。 フォーム上にMicrosoft DataGrid Control 6.0(OLEDB)を置いて、 データベースと接続し、データベースを表示させたいのですが、 データベースエンジンがMicrosoft.Jet.OLEDB3.51だとうまく表示してくれますが 4.0だとなぜか表示してくれません。 原因、対策などわかるでしょうか? ソースは以下のように単純なものです。 Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\パスワード管理.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "パスワード", cn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = rs End Sub

  • 条件つきの計算

    コンボボックスに入ってる値に基づいて、データベースから値をとってきて計算したいという機能をつくりたいですが、 環境:Access2003 VB6 テーブル(SCHOOL)はYear,Class,成績1、成績2、成績3などあります。 コンボボックス1(学年)が1を選択して、 コンボボックス2(クラス)が1Aを選択したとき、 テーブルに1年1Aの人数を計算する場合はSQLはどうかけばいいのでしょうか。 また、その人数の成績1、成績2、成績3を合計したい場合はどうしたらいいのでしょうか。 アドバイスよろしくお願いします。 下はデータベース接続とコンボボックスの設定ですが、 合計値はラベルに表示したいと考えてます。 詳しい方、よろしくお願いします。 Dim CONN As ADODB.Connection 'レコードセット Dim RECO As ADODB.Recordset Dim REDO As ADODB.Recordset Private Sub ConnOpen() Set CONN = New ADODB.Connection '接続文字列の設定 CONN.ConnectionString = "provider=Microsoft.jet.oledb.4.0;"   _& "data source=D:\DB\dbstudent.mdb" 'コネクションをオープン CONN.Open End Sub Private Sub RecoSet() Set RECO = CONN.Execute("Select * From SCHOOL") End Sub Private Sub RedoSet() Set REDO = CONN.Execute("Select Distinct Year From SCHOOL") End Sub Private Sub cbx1_Click() Cbx2.Clear End Sub Private Sub Cbx1_LostFocus() Set RECO = CONN.Execute("Select Distinct Class From SCHOOL WHERE Year = '" & Cbx1.Text & "'") RECO.MoveFirst Do Until RECO.EOF Cbx2.AddItem (RECO.Fields(0)) RECO.MoveNext Loop RECO.Close End Sub  

  • 2のコンボボックスの関連

    環境:Access2003 VB6.0 2つのコンボボックス関連させたいが、やり方がよくわからないです。 たとえばSCHOOLというテーブルに1YearとClassのフィールドがあります。そこで、YearのコンボボックスでYearフィールドの値を選択して、Classのコンボボックスに選択された値に対する値をセットしたいです。 例(1年と選択して、2個目のコンボボックスにA、B、C、Dとセットしたいです。 初心者で、説明がわかりにくいかもしれないですが、よろしくお願いします。 以下データベースの接続設定 Dim m_formlording As Integer Dim CONN As ADODB.Connection 'レコードセット Dim RECO As ADODB.Recordset Private Sub ConnOpen() Set CONN = New ADODB.Connection '接続文字列の設定 CONN.ConnectionString = "provider=Microsoft.jet.oledb.4.0;" _& "data source=D:\DB\dbstudent.mdb" 'コネクションをオープン CONN.Open End Sub Private Sub RecoSet() Set RECO = CONN.Execute("Select * From SCHOOL") End Sub 詳しい方、ご教授ください。

  • データグリッドコントロールに表示されません!

    OS:XP、VB6、ACCESS2000の環境でADOの勉強をしています。 ある参考書を見て、次のサンプルを実行しました。 【サンプル】 フォームにデータグリッドコントロールを貼り付ける。 フォームのLoadイベントプロシージャ内でデータベース(MDB)に接続し、レコードセットを取得して、データグリッドコントロールに取得したレコードセットを表示させる。 データベースはACCESS97で作成されたものです。 (ソース) --------------------------------------------------------------- Option Explicit Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'データーベースに接続 Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=G:\VB_TEST\Book.mdb" cn.Open 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "本", cn, adOpenStatic 'データグリッドコントロールに取得したレコードセットを表示 Set DataGrid1.DataSource = rs End Sub --------------------------------------------------------------- 上記のプログラムを実行するともちろんうまく表示されました。 が、接続プロバイダ名を "Provider=Microsoft.Jet.OLEDB.3.51;"  ↓↓↓↓↓ "Provider=Microsoft.Jet.OLEDB.4.0;" にすると表示されません。 そこで、データベースをACCESS2000で作成し直し、実行してもダメです。 この処理はJet4.0では出来ないのでしょうか?

  • データグリッドでBeforeDeleteイベントが発生しない

    現在データグリッドを使っていて、 ○レコード削除時の確認と ○リレーションテーブルレコードの削除をしようと思っています。 しかしグリッドで行選択し、Deleteボタンでレコードを削除しようとしても、BeforeDeleteイベントがスルーされます。何故なのでしょうか? 他に上記2つの目的を果たす事が出来る方法があればそれでもいいのですが・・。 よろしくお願いします。 環境等: Windows2000Pro VB6.0 DataGrid Control6.0 ADODB Connection Provider=Jet.OLEDB.3.51

  • VB6.0とaccessのDBを接続する

    初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!

  • VB2005 データグリッドについての質問です。

    はじめまして。 VB2005にてデータグリッドについて質問です。 データグリッドの初期化がうまくいかなく困っています。 ネットでもいろいろ探しましたが解決策が見つからない為、投稿しました。 下記にソースの一部を記述します。 Dim User_Clone As New ADODB.Recordset Private Sub AAA_Load() User_Clone = XXXX '-- XXXXにはデータベース接続情報が入っている。 DataGrid1.DataSource = User_Clone '-- ↑XXXXの内容が正しくDataGrid1に表示される。 End Sub Private Sub BBB_Click DataGrid1.DataSource = Nothing DataGrid1.Refresh() '-- ↑DataGrid1にはXXXXの内容が表示されたままとなっている。 End Sub なんとか対応をと思い、下記方法で試しましたが いまいち納得いきません。 Private Sub BBB_Click User_Clone = New ADODB.Recordset DataGrid1.DataSource = User_Clone '-- ↑DataGrid1には何も表示されませんが '-- Refresh等で初期化できれば・・・。 End Sub 長文ですみませんが、どなたかご教授願います。