教えて!goo限定 1000名様に電子コミック1000円分が当たる!!

こんにちは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 "レコードセット取得に成功しました
------------------------------------------------

このQ&Aに関連する最新のQ&A

A 回答 (4件)

#3の続き


SQL文のField名とグリッドのField名は一致していますか?括弧などあるとうまくいかない場合があります。
その場合は、SQL分でAS<別名>をつけグリットでも別名をfield名にするとうまきいきます。

これでだめならadodc経由でつないでみてはいかがでしょうか?
    • good
    • 0

グリッドのデータソースを指定した後にグリッドの更新をしないと表示されません。


>  'レコードセットをデータグリッドに連結
>Set D_GRID.DataSource = RECO
この後に
 D_GRID.Refresh

データコントロールを使用している場合には、
 <データコントロール名>.Refresh

この回答への補足

ご回答ありがとうございます。

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

補足日時:2004/01/22 10:09
    • good
    • 0

まず、SQLが正しいかどうか調べるためにDB上で実行してください。

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

見た感じでは問題なさそうですね


ですが、2点ほどあります

1.レコードセットの宣言は良いのですが、展開時が?
 ×Set RECO = New Recordset
 ○Set RECO = New ADODB.Recordset

2.SQL文を省略されていますが、そのSQLは正しいですか?

この回答への補足

1.Set RECO = New ADODB.Recordsetに修正しましたができませんでした。(泣)

2.SQL文の実行テストでは正確にデータを抽出してきました。

他の理由は考えられますか?

補足日時:2004/01/22 08:50
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDataSetの内容がDataGridViewに反映されない

現在、VB2005でアプリケーションの開発をしているのですが
DataSetの内容がDataGridViewに反映されなくて困っています。

表示させたいデータをデータセットにとってくるところは問題ないようで
1回目は上手く表示されるのですが、データセットの中身を変更して
セットし直しても表示が変わりません。

以下がソースを抜き出したものになります。

Grid.DataSource = Nothing
Grid.DataMember = Nothing

Grid.DataSource = DataSet
Grid.DataMember = "M_kbn"

よろしくお願いします。

Aベストアンサー

デザイナでDataGridViewのDataSourceプロパティを編集していませんか?
もしそうであれば、デザイナでの設定を削除してコードでDataSourceの設定を行うようにしてみてください。

C#ですが、同様の現象のようです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47099&forum=7&1

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む

QDataGridViewで変更した値を反映させたい。

VB2005、SqlServer2005環境です。

デザイナ上で、DataTableをドラッグしてやると、自動的に
バインドされたDataGridViewが出てくれるので、その方法で
DataGridViewを1つ設置しました。

このDataGridViewの表の値を変えた時、それを実際のDBのテーブルにも
反映させたいなと思ってます。
これを実現するための方法を教えていただけないでしょうか?
バインドされているので、保存できればそのまま更新されるような
イメージなのですが…その方法がわかりません。

宜しくお願いします。

Aベストアンサー

ビューからだとUpdateやDeleteなど元のテーブル対する操作は自動生成されないようです

フォームに張り付いているデータセットにクエリを追加して
テーブルを操作できるようにします
表示されているテーブルアダプタをアクティブにして データ > 追加 > Queryを実行
SQLステートメントを使用するにチェック で次へ
UPDATE で次へ
ここで クエリビルダ もしくは 直接SQLを編集し『完了』をクリック

フォームに更新用ボタンを配置
そのクリックイベントに

dim row as DataRow
for each row in DS.DaTable.Rows
  if row.RowState = DRowState.Modified then
    TableAdapter.UpdateQuery( Row("Name"), Row("ID") )
  end if
next
といった具合で更新を掛けます
# 変数名などは適宜修正してください
# DS.DaTable.Rows、TableAdapter、Row("Name"), Row("ID")などです

ビューからだとUpdateやDeleteなど元のテーブル対する操作は自動生成されないようです

フォームに張り付いているデータセットにクエリを追加して
テーブルを操作できるようにします
表示されているテーブルアダプタをアクティブにして データ > 追加 > Queryを実行
SQLステートメントを使用するにチェック で次へ
UPDATE で次へ
ここで クエリビルダ もしくは 直接SQLを編集し『完了』をクリック

フォームに更新用ボタンを配置
そのクリックイベントに

dim row as DataRow
for each row in DS.Da...続きを読む

QDataGridViewの、選択されている行を取り出したい

いつもお世話になっております。

DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。

DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。

DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか?

ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。

ご存知の方ご教授いただけると助かります。
よろしくお願いします。

Aベストアンサー

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data.DataRow dr = (System.Data.DataRow)drv.Row;

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim drv As System.Data.DataRowView = CType(dgr.DataBoundItem, System.Data.DataRowView)
Dim dr As System.Data.DataRow = CType(drv.Row, System.Data.DataRow)

※最後のキャストを変更すれば、型付データセットにも対応可能のはずです

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data...続きを読む

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QDataGridの列の数、行の数

いつもお世話になっております
VB6.0でDataGridをつかって
Accessのようにデータを表示しているのですが
表示しているデータの最大列数と最大行数を
求めたいのですが、やり方がわかりません
どうしたら最大列数と最大行数を求められるか
教えて下さい!お願いします

Aベストアンサー

こんばんは
最大列数は、DataGrid.Columns.Countで
最大行数は、表示してるレコードセットのRecordCountプロパティから得る。

でいかがでしょうか?

QDataGridViewでコードで値を入力したい

VB2005のDataGridViewですが、行と列を指定して
そのセルに値を入力したいと思いますが、どのプロ
パティに行番号・列番号を入れればいいのでしょうか?

Aベストアンサー

VB2005のDataGridView.rows(1).cells(2).value=3


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング