- 締切済み
SQLでの処理
開発環境:WindowsXP、VB6、Access2000 ADO接続前提 ファイル全体のデータ(全レコード)に対して連続して処理するにはSQLで対応するのがいいのだと思いますが やりかたがわかりません。 たとえば、つぎのようなAccessのファイルがあったとします。 ファイル名:kojin.mdb テーブル名:name_tbl 名前 年齢 性別 太郎 20 M 花子 40 F 三郎 30 M 洋子 50 F 質問1 年齢順にレコードを並べかえる。 質問2 性別のFをWに一括変換する。 なお、SQLの文法を質問しているのではありません。 下のプログラム1でレコード表示を行ってます。 また、省略しますが、次のレコードや前のレコードを表示したり、レコードの更新・追加・削除などを行うこともできています。 これからどうすればSQL文を使って質問1や2の処理が可能になるのでしょうか? ご教授お願いしたします。 <プログラム1> Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private DBfile As String 'DBファイル名 Private DBtable As String 'テーブル名 Private Sub Form_Load() DBfile = "kojin.mdb" DBtable = "name_tbl" Call ConnectType Call SetFields End Sub Private Sub ConnectType() 'DB接続準備処理 Set mCn = New ADODB.Connection mCn.ConnectionString = DEF_CONNECT & App.Path & "\" & DBfile mCn.Open Set mRs = New ADODB.Recordset mRs.Source = DBtable mRs.ActiveConnection = mCn mRs.CursorType = adOpenDynamic mRs.LockType = adLockOptimistic mRs.Open End Sub Private Sub SetFields() Text1.Text = mRs.Fields("名前") Text2.Text = mRs.Fields("年齢i") Text3.Text = mRs.Fields("性別") End Sub
- gorou
- お礼率45% (83/184)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
みんなの回答
> 質問1 年齢順にレコードを並べかえる。 並び順を明示したSQLをソースにすればOKです。 SELECT 名前, 年齢, 性別 FROM name_tbl ORDER BY 年齢 > 質問2 性別のFをWに一括変換する。 Connection.Execute (または、状況により、Command.Execute) メソッドで 更新します。 UPDATE name_tbl SET 性別 = 'W' WHERE 性別 = 'F' # 「性別」は文字列ではなく、数値で定義する ( 「性別テーブル」を別途設ける ) のが妥当です。
- taknt
- ベストアンサー率19% (1556/7783)
>年齢順にレコードを並べかえる。 これは、取得するときに 行うしかないと思います。 取得後だったら 配列などに入れて 自分でソートしてあげるだけでしょう。 >なお、SQLの文法を質問しているのではありません。 と >これからどうすればSQL文を使って質問1や2の処理が可能になるのでしょうか? は よく わからないのですが、 SQL文を使うならば、 ODER BY というのを使えばいいと思いますが・・・。 2は Text2.Text = mRs.Fields("年齢i") の行を Text2.Text = mRs.Fields("年齢") if Text2.Text="F" then Text2.Text="W" としてあげればいいでしょう。 表示じゃなく、テーブルの中身を変えるならば UPDATE を使うべきだと思いますが。 上記のSQLを理解されてるならば、どうしてこれができないのか 補足をお願いします。
お礼
回答ありがとうございます。 質問の仕方が悪くて、伝わらないのだとおもいますがレコードを1件づつ 読んで、更新(mRs.Update)や削除(mRs.Delete)などを処理する方法はわかるのですが、SQLを使ってどうやってレコードを処理するのかがわからないのです。それともそうゆうことはできないのですか? 2の回答に書かれていることはレコードを1件ずつ読み込んで更新するわけで、SQLを使ってないように思うのですが。 1の回答はどこにSQL文を書いて、その結果をどこにどうやって保存するの ですか?それがわかりません。 SELECT * FROM name_tbl ORDER BY 年齢 でいいと思いますが、実行結果はどこにあるのですか? 超初心者なので、初歩が不明なのだと思います。
関連するQ&A
- データベースを切り替えて使う方法
初心者です。 環境:WindowsXP,VB6,Access2000 Access2000のデータベースを切り替えて使いたいのですが、うまく動作しません。 ADO使用しています。 普通に考えて、いったんつないでいたDBを mRs.Close mCn.Close Set mRs = Nothing Set mCn = Nothing で接続をいったん切断して、 Call ConnectType で再度DBに接続しましたが、接続されているのは前のDBです。 1 原因がわかりません。 2 DBを切り替えて使う方法がわかりません。 もちろん切り替えの処理以外は現在正常に動作しています。 ご教授よろしくお願いいたします。 <プログラム> Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private DBfile As String Private Const DEF_CONNECT As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\word.mdb" Private Const DEF_SQL As String = "Select * From tango_tbl" Private Sub ConnectType() Set mCn = New ADODB.Connection mCn.ConnectionString = DEF_CONNECT mCn.Open Set mRs = New ADODB.Recordset mRs.Source = DBfile mRs.ActiveConnection = mCn mRs.CursorType = adOpenDynamic mRs.LockType = adLockOptimistic mRs.Open End Sub
- 締切済み
- Visual Basic
- データベース操作時エラーについて
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
- ベストアンサー
- Visual Basic
- AccessでのROLLBACKについて
動作環境:VB6+Access2000 ADOを使ってVBからAccessのデータベースに接続しています。 COMMITとROLLBACKの機能を追加しようと思い下記プログラムの (1)から(6)を追加して実行すると(1)のところで 「メソッドがみつかりません」というエラーになります。 (1)から(6)を追加するまでは正常に動作しています。 本を参考に(1)から(6)を追加しました。 ようするに「BeginTrans」のメソッドが使えないのでしょうが、 対策を教えて頂くと助かります。 (別にコーディングは別の書き方でもいいですが、ADOは使います) よろしくお願いします。 ------------------------------------------------ プログラム Private Sub ConnectType() Set mCn = New ADODB.Connection mCn.ConnectionString = DEF_CONNECT & AppPath & "\" & DBfile mCn.Open Set mRs = New ADODB.Recordset If Text8.Text <> "" Then mRs.BeginTrans '(1) mRs.Source = Text8.Text mRs.ActiveConnection = mCn mRs.CursorType = adOpenDynamic mRs.LockType = adLockOptimistic mRs.Open If MsgBox("変更を保存しますか?", vbYesNo) = vbYes Then '(2) mRs.CommitTrans '(3) Else '(4) mRs.Rollback '(5) End If '(6) End If Debug.Print Text8.Text End Sub
- ベストアンサー
- Visual Basic
- ADOでエクセルからSQL Serverへデータを移行するには
エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- SQL Server
- ACCESS SQLで複数データ表示させるには?
*************************************************** Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection mySQL = "select * from テーブル" rs.Open mySQL, cn, adOpenForwardOnly, adLockOptimistic ’コントロールに代入 Me.No = rs![No] Me.項目 = rs![項目] ・・・ End Sub *************************************************** こんな感じで、クエリでなくSQLで フォームにテーブルの全レコードを表示させたい場合、 どのようにすればよいのでしょうか? 上の文には、何が不足しているのでしょうか? http://www.accessclub.jp/ado/09.html を見ましたが、解決できませんでした。
- ベストアンサー
- オフィス系ソフト
- SQL文の最後に「;」はいらないのでしょうか?
VBAのADOについて質問です。 SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub test_Click() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM Tテーブル" ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ でも問題なくコードが動きました。 SQL文の最後に「;」はいらないのでしょうか? ちなみに SQL = "SELECT * FROM Tテーブル;" でもエラーになりませんでした。
- 締切済み
- Visual Basic
- 条件つきの計算
コンボボックスに入ってる値に基づいて、データベースから値をとってきて計算したいという機能をつくりたいですが、 環境: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
- ベストアンサー
- Visual Basic
- Visual Basic SQL INSERT ADO
VisualBasic6.0 を使用しています。 SQLのINSERT文についての質問なのですが、 フォームのテキストに記入された内容を新規のレコードとしてデータベースに登録する場合、どのようなプログラムを組めばよいのでしょうか? 下記のように組んでみたのですが、エラー(実行時エラー'-2147217904(80040e10)':一つ以上の必要なパラメータの値が設定されていません)がでてしまいます。 以下のプログラムでは、 Form4の.Text1~7にユーザーが記入した情報をデータベースのM_USERというテーブルの新レコードとして追加しようとしています。 Private Sub Command1_Click() Dim objcon As ADODB.Connection Dim objrec As ADODB.Recordset Dim strConnectString As String Dim strMDBFilePath As String Dim strSQL As String strMDBFilePath = "C:\Documents and Settings\Watanabe Ryota\デスクトップ\新ダイエット\diet.mdb" strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBFilePath & ";" Set objcon = New ADODB.Connection objcon.Open strConnectString strSQL = "INSERT INTO M_USER(U_ID,U_NAME,U_PASS,U_SIZES1,U_SIZES2,U_CAL,U_IKIGOMI) VALUES(Form4.Text1,Form4.Text2,Form4.Text3,Form4.Text4,Form4.Text5,Form4.Text6,Form4.Text7)" Set objrec = objcon.Execute(strSQL) End Sub おねがいします。
- 締切済み
- Visual Basic
- ACCESS VBA
ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: 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
- ベストアンサー
- その他(データベース)
お礼
せっかく回答もらいましたが質問1はすでに回答者No1の方が示されてしる内容と重複するのと、質問に「なお、SQLの文法を質問しているのではありません。」とわざわざ断っています。 質問2は質問の例として性別MとF示してしるわけでデータベースの つくりかたを質問しているわけではないのと、SQL文をたずねていないのは 質問1と同じです。