条件つきの計算とデータベース接続に関する質問

このQ&Aのポイント
  • Access2003 VB6を使用して、コンボボックスから選択された値を基にデータベースから値を取得し、計算する方法を教えてください。
  • コンボボックス1で学年を、コンボボックス2でクラスを選択した時、テーブル内の該当するデータの人数を計算するSQL文と、その人数の成績を合計する方法について教えてください。
  • データベースに接続し、コンボボックスの値に基づいてデータを取得する方法について詳しく教えてください。
回答を見る
  • ベストアンサー

条件つきの計算

コンボボックスに入ってる値に基づいて、データベースから値をとってきて計算したいという機能をつくりたいですが、 環境: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  

質問者が選んだベストアンサー

  • ベストアンサー
  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.2

LblNumbers.Caption = RECO.Fields("Numbers") ↓これでどうでしょう if not reco.eof then LblNumbers.Caption = RECO.Fields("Numbers").value end if 若しくは if not reco.eof then LblNumbers.Caption = RECO!Numbers end if あるいは if not reco.eof then LblNumbers.Caption = RECO(2) end if

sinomori
質問者

お礼

うまく表示できました。 ありがとうございます。

その他の回答 (1)

  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.1

SQL文です。 ・人数計算 Select Year,Class,COUNT(*) From SCHOOL WHERE Year = '" & Cbx1.Text & "' AND Class= '" & Cbx2.Text & "' GROUP BY Year,Class" ・合計計算 Select Year,Class,SUM(成績1),SUM(成績2),SUM(成績3) From SCHOOL WHERE Year = '" & Cbx1.Text & "' AND Class= '" & Cbx2.Text & "' GROUP BY Year,Class" 上記でいけるはずです。 因みに合計計算の方はNullがない物として記述しています。

sinomori
質問者

補足

回答ありがとうございます。 Private Sub Cbx2_GotFocus() Set RECO = CONN.Execute("Select Year,Class,COUNT(*) as numbers From SCHOOL WHERE Year = '" & Cbx1.Text & "' AND Class= '" & Cbx2.Text & "' GROUP BY Year,Class") LblNumbers.Caption = RECO.Fields("Numbers") RECO.Close End Sub このように設定したんですが、実行したら、BOFかEOFがtureになっていると、またはレコードが削除されています。というエラーが出るんですが、原因がわからないです。。 もし知ってたら、ご教授ください。

関連するQ&A

  • 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 詳しい方、ご教授ください。

  • 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のデータグリッドが表示されない!!!

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

  • ACCESSを用いたデータベースでのコンボボックスの連動について

    おせわになっております。 VBでデータベースを作っているのですが、 コンボボックスでの検索での絞込みがうまくいきません。 例えば、コンボボックス1で選ばれたファールドにより 絞込みが行われ、コンボボックス2で表示するレコードは コンボボックス1で選択されたレコードに該当するものしか表示しないようにするというとです。 どこかおかしい個所はありますでしょうか?? よろしくお願い致します。 Private Sub dbc1_Click(Area As Integer) '1つめのコンボボックス Dim criteria As String ' 検索条件 If dbc1.Text = "" Then Exit Sub End If criteria = "県名 = '" & dbc1.SelText & "'" rs.MoveFirst rs.Find criteria, , adSearchForward dbc2.SetFocus `dbc2にフォーカスを移す End Sub Private Sub dbc2_Click(Area As Integer) ’2つ目のコンボボックス Dim mySQL As String mySQL = "SELECT 市名 FROM 地名" _ & "where 県名 = '" & dbc1.SelText & "'" ’コンボボックス1で選択されたものを抽出条件とする。 Set rs = New ADODB.Recordset rs.Open mySQL, cn, adOpenStatic Set Dbc2.DataSource = rs End Sub

  • 同じコンボボックスを二つ以上作る方法

    今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?

  • EXCEL2000

    今エクセル2000を使っているのですが、コンボボックスの作り方まではわかるのですが、そのリストに文字を表示する方法がわかりません。本を買ってきて文字が出たと思ったら、コンボボックスを開いて選択しその次見るとリストに同じものがもう1セット増えています、もう一度やるとさらに1セットという風に増えていました。なぜでしょう?? コードというのがあり Private Sub ComboBox2_Change() With ComboBox2 .AddItem "リスト1" .AddItem "リスト2" End With End Sub という具合に入っています。誰か教えてください。

  • SQLの条件に変数を

    はじめまして。よろしくお願いします select文のwhere条件にidを指定したいのですがうまくいきません。 べつに変数を使用しなくてもよいのですが良い方法がありましたらご教授下さい Private Sub コマンド8_Click() Dim adoCON As ADODB.Connection Dim adoRS As ADODB.Recordset Dim no As interger no=me.id Set adoCON = Application.CurrentProject.Connection Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id=no")strName = adoRS!varcodeno adoRS.Close adoCON.Close Set adoRS = Nothing Set adoCON = Nothing Me.jancode.Value = strName End Sub

  • 全て文字を選択状態にする荷をやめたい

    アクセスのフォームにコンボボックスを設置して 更新後処理に Private Sub コンボ1_AfterUpdate() MsgBox "test" End Sub としたのですが、 適当にコンボ1に値を入れてタブキーを押すと、 msgboxが表示されますが、 閉じた後に、入れた文字が全て選択状態になります。 これをやめたいのですがどうすればいいですか? 更新後処理が発生しても、コンボボックスの文字を全て選択したくないです。 setフォーカスを使おうと思ったのですが、他にコントロールはないし そのコンボボックスにカーソルはあててたいです。

  • データベース操作時エラーについて

    VB初心者です。 VB6+Access2000の環境下でプログラムを実行すると 「実行時エラー’3219’ このコンテキストで操作は許可されていません」とエラーになります。 下のプログラムの(2)の箇所でエラーになります。 (1)はエラーになりません。 つまり次のレコードに移動は問題ないのですが、前のレコードを表示 させようとするとエラーになります。 原因と解決方法をご教授ください。 ----------------------------------------------------------- プログラム Private mCn As ADODB.Connection Private mRs As ADODB.Recordset --------------------------------- Private Sub Form_Load() Set mCn = New ADODB.Connection mCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source=.\word.mdb" mCn.Open Set mRs = mCn.Execute("Select * From week_cel") End Sub --------------------------------- Private Sub Command1_Click() ’(1) mRs.MovePrevious If mRs.BOF Then mRs.MoveFirst End If End Sub -------------------------------- Private Sub Command2_Click() ’(2)   mRs.MoveNext If mRs.EOF Then mRs.MoveLast End If End Sub   

  • 年を条件にデータを抽出するには?

    フィールド1 2012/01/01 2012/01/02 2011/01/01 2011/01/02 2010/01/01 2010/01/02 と言うデータがあり、それをもとに表形式でフォームを作りました。 フォームヘッダーにコンボボックス(名前:コンボ3)を作り、 値集合タイプ:値リスト 値集合ソース:"2012";"2011";"2010" にしました。 コンボボックスのAfterUpdateイベントでコンボ3に表示されている値を年を抽出したいのですが vbaでどうやればいいのでしょうか? クエリは作りません。 Private Sub コンボ3_AfterUpdate() Me.Form.Filter = "フィールド1 Between #" & Me.コンボ3.Value & "# And #" & Me.コンボ3.Value & "#" & "'" Me.Form.FilterOn = True End Sub や Private Sub コンボ3_AfterUpdate() Me.Form.Filter = "フィールド1 Between #" & Me.コンボ3.Value & "/01/01" & "# And #" & Me.コンボ3.Value & "/12/31" & "#" & "'" Me.Form.FilterOn = True End Sub にすると 実行時エラー クエリ式 <式> の <メッセージ> (エラー 3075) 入力した式が、メッセージに示されている原因によって無効です。フィールド名と区切り記号を正しく入力していることを確認してから、もう一度実行してください。 となってしまいます。 2010/01/01と2010/01/02を抽出させたいです。 ご回答よろしくお願いします。

専門家に質問してみよう