• 締切済み

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)

みんなの回答

noname#4564
noname#4564
回答No.2

> 質問1 年齢順にレコードを並べかえる。 並び順を明示したSQLをソースにすればOKです。 SELECT 名前, 年齢, 性別 FROM name_tbl ORDER BY 年齢 > 質問2 性別のFをWに一括変換する。 Connection.Execute (または、状況により、Command.Execute) メソッドで 更新します。 UPDATE name_tbl SET 性別 = 'W' WHERE 性別 = 'F' # 「性別」は文字列ではなく、数値で定義する ( 「性別テーブル」を別途設ける ) のが妥当です。  

gorou
質問者

お礼

せっかく回答もらいましたが質問1はすでに回答者No1の方が示されてしる内容と重複するのと、質問に「なお、SQLの文法を質問しているのではありません。」とわざわざ断っています。 質問2は質問の例として性別MとF示してしるわけでデータベースの つくりかたを質問しているわけではないのと、SQL文をたずねていないのは 質問1と同じです。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

>年齢順にレコードを並べかえる。 これは、取得するときに 行うしかないと思います。 取得後だったら 配列などに入れて 自分でソートしてあげるだけでしょう。 >なお、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を理解されてるならば、どうしてこれができないのか 補足をお願いします。

gorou
質問者

お礼

回答ありがとうございます。 質問の仕方が悪くて、伝わらないのだとおもいますがレコードを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

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

    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   

  • 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

  • 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へ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • 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テーブル;" でもエラーになりませんでした。

  • 条件つきの計算

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

  • 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 /------------------------------------------------/

  • 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