• ベストアンサー

ACCESSでデータセット時、項目を可変にしたい

よろしくお願いしますm(__)m MDBであるテーブルのある項目に、データを セットする際、項目名を可変にしたいのですが、 方法が分からないので、教えて下さい><; Public Sub AAA(テ As String, 項 As String) SQL = "select" & 項 SQL = SQL$ & " from " & テ Set rs = cdb.OpenRecordset(SQL) Do Until rs.EOF rs.Edit ********************************************** rs![項] = "あいう" ←入れ先を可変にしたい ********************************************** rs.Update rs.MoveNext Loop

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

  • ベストアンサー
  • dee_honda
  • ベストアンサー率53% (26/49)
回答No.1

rs(項) = "あいう" SELECT文で1項目しか選択してこないのであれば、 1番目の項目ということで、 rs(0) = "あいう"

bonn1117
質問者

お礼

なるほどです^^; そういう方法があったのですね^^ ありがとうございます~~

その他の回答 (1)

noname#22222
noname#22222
回答No.2

Option Compare Database Option Explicit Private Sub コマンド0_Click()   Dim isOK As Boolean   isOK = UpdateTable("Table1", "数量", 1) End Sub Public Function UpdateTable(ByVal tblName As String, _               ByVal fldName As String, _               ByVal newValue As Integer) As Boolean On Error Goto Err_UpdateTable   Dim isOK AS Boolean   Dim strSQL As String   Dim dbs  As DAO.Database   Dim rst  As DAO.Recordset      isOK = True   strSQL = "SELECT " & fldName & " FROM " & tblName   Set dbs = CurrentDb   Set rst = dbs.OpenRecordset(strSQL)   With rst     If Not .BOF Then       Do Until .EOF         .Edit         .Fields(0) = newValue         .Update         .MoveNext       Loop     End If   End With Exit_UpdateTable: On Error Resume Next   rst.Close   dbs.Close   Exit Function Err_UpdateTable:   isOK = False   Resume Exit_UpdateTable End Function Function にしましたが、質問への回答部は同じです。 当然に Where節がありませんので検索された全ての行が更新されます。

bonn1117
質問者

お礼

ありがとうございます。 試してみた結果、値セットできました^^

関連するQ&A

  • Access VBA 添付型フィールド

    Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • ACCESSの SELECT SUM

    SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか?  日付         出金       氏名 2012/12/10      540      安田 2012/12/10      1020      斉藤 2012/12/10       970      TOM 2012/12/11      650      池田  2012/12/11     2010      南 2012/12/12      350      林田 2012/12/12     1200      加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金)  FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .

  • 項目が一致したフィールドを追加

    インポートしたデータを項目名が一致したフィールドを作業テーブルに追加クエリしたい。 ご回答ありがとうございます。是非教えてください。 ・インポートは先頭行をフィールド名として使ってません。 項目名_PP(20個)にある項目名とインポートした一時テーブルにある項目と一致したフィールドを作業テーブルに追加したいのですが取得した20フィールドを作業テーブルに追加をどうやっていいかわかりません。 作業テーブルも20項目あるのですが・・ご教授お願いします。 Set db = CurrentDb() Dim rs As DAO.Recordset Dim rstop As DAO.Recordset Dim SQL As String Dim SQLTop As String Dim iCntTop As Integer Dim sERRTXT As String Dim bFlg As Boolean Dim sSQLNM As String SQL = "項目名_PP" SQLTop = "一時テーブル" If F_RecordsetOpen(SQLTop, rstop, dbOpenSnapshot, dbReadOnly) Then If F_RecordsetOpen(SQL, rs, dbOpenSnapshot, dbReadOnly) Then Do Until rs.EOF For iCntTop = 0 To 254 sSQLNM = "" '項目名が一致したら(=必要項目)ループを抜ける If rstop.Fields(iCntTop) = rs![項目名] Then sSQLNM = rstop.Fields(iCntTop).Name Debug.Print sSQLNM Exit For End If Next iCntTop If Trim(sSQLNM) <> "" Then ' SQL = " INSERT INTO 作業テーブル ' 'sSQLNMでループで抜けたフィールドを追加作業テーブルに追加したいのですが・・・ Call F_ExecuteSQL(SQL) End If rs.MoveNext Loop End If Call S_RecordsetClose(rs) End If Call S_RecordsetClose(rstop) End Sub

  • テーブルの左端に通し番号を付ける

    教えてください! 下記のモジュールで走らせると、 「ユーザ定義型は定義されていません」 と表示が出て止まってしまいます。 要は、左端の「No.」という列に 通し番号を入れたいのですが・・・。 Option Compare Database Sub setNumber(tblname As String, fldname As String) Dim db As DAO.Database Dim rs As DAO.Recordset Dim ssql As String Dim dblCnt As Double Dim strCnt As String dblCnt = 0 Set db = CurrentDb() ssql = "SELECT * FROM " & tblname Set rs = db.OpenRecordset(ssql) rs.MoveFirst Do While Not rs.EOF dblCnt = dblCnt + 1 strCnt = Format$(dblCnt, "00000000") rs.Edit rs.Fields(fldname).Value = strCnt Debug.Print strCnt rs.Update DoEvents rs.MoveNext Loop End Sub Sub Execute() Call setNumber("◎テーブル1", "No.") End Sub

  • VB テーブルのデータを出荷先ごとにcsv出力

    お世話になります。 VBは素人で、自分なりにネットでいろいろ調べて、下記の物を作ってみたのですが、 うまくいかず、とても悩んでおります。 知ってる方、どなたか教えて頂けませんか? よろしくお願いいたします。m(_ _)m ------------------------------------------------------------------ 目的: (1)テーブルのフィルド名を、各CSVの一行目に出力したい。 (2)テーブルのフィルドは30項目ぐらいあるため、下記のように個別出力ではなく、   一括で出力できるようにしたいです。 (3)すべての項目には、” ”で囲み、カンマで区切りをしたいです。 ------------------------------------------------------------------ Option Compare Database Option Explicit Private objDB As DAO.Database Private objExcel As Object 'EXCELオブジェクト Private objWorkBook As Object 'WORKBOOKオブジェクト Private objSheet As Object 'SHEETオブジェクト Public Sub CSVsyuturyoku() Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim flag As Boolean Set db = CurrentDb Set rs1 = db.OpenRecordset("SELECT DISTINCT 氏名 FROM 出荷データ") Do Until rs1.EOF Set rs2 = db.OpenRecordset("SELECT * FROM 出荷データ" _ & " WHERE Nz(氏名) = '" & rs1!氏名 & "'") flag = True Open CurrentProject.Path & "\ファイル" & rs1!氏名 & ".csv" _ For Output As #1 Do Until rs2.EOF 'Print #1, Nz(rs2!商品名) Print #1, rs2!商品コード & "," & rs2!商品名 & "," & rs2!単価 ' ↑フィルド項目数が多すぎたため、全部書ききらず。。。 rs2.MoveNext Loop Close #1 rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing If flag Then rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing ' 終了の表示 MsgBox "ファイル出力が完了しました。" End Sub

  • excel vba で .mdb のデータ抽出

    excel vba で postdata.mdbのpostレコードから条件に合うデータを抽出しようとしています。 数日間、いろいろ調べていますが分かりません。 おそらく、SQLの部分だと思うのですが・・・ adoは初めて使う素人なので教えていただけないでしょうか。 On Error GoTo ErrGyo Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Open ThisWorkbook.Path & "\postdata.mdb" Dim Rs As ADODB.Recordset Dim SQL As String Dim T_ken As String Dim T_si As String Dim T_mati As String Dim i As Long T_ken = TextBox1.Value  ’フォームにテキストボックス T_si = TextBox2.Value T_mati = TextBox3.Value SQL = "SELECT * FROM post WHERE ken like '" & T_ken & "' and si LIKE '" & T_si & "' and mati LIKE '" & T_mati & "'" Set Rs = New ADODB.Recordset Rs.Open SQL, cn, adOpenForwardOnly, adLockReadOnly MsgBox Rs.RecordCount  ’ここでチェックすると -1 となる??? If Rs.RecordCount = 0 Then MsgBox "該当するレコードは見つかりませんでした。", vbInformation Else For i = 1 To Rs.RecordCount Cells(i, 1) = Rs!num Cells(i, 2) = Rs!ken Cells(i, 3) = Rs!si Cells(i, 4) = Rs!mati Rs.MoveNext Next End If Rs.Close: Set Rs = Nothing cn.Close: Set cn = Nothing Exit Sub ErrGyo: MsgBox "postdataへの接続に失敗しました", vbCritical

  • VBA ACCESS ファイル出力時に更新内容を保存しないで出力したい

    VBA ACCESSの質問です はじめまして 最近になりVBAをはじめたものです。 下記の点について調べてもわからないことがあり非常に困っております。 フォーム上にファイル出力をするコマンドボタンがあります。 これをクリックすると拡張子がdatのファイルで出力されるのですが、 【テーブルの値を一部変更した際に、  更新内容を保存しないでファイル出力をする】 という処理のコードはどのようにすればよろしいでしょうか? ↓↓例えば↓↓ Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT 列名 FROM テーブル名)", dbOpenDynaset Do Until rs.EOF rs.Edit rs!列名 = Replace(rs!列名, "変換したい文字", "変換する文字") rs.Update Loop rs.MoveNext rs.Close Set rs = Nothing 上記コードの6行目を rs.update にしてしまうと当然ながらテーブルが更新されてしまいます。 どのようにすれば、テーブルの更新内容を保存しないでファイル出力ができるのでしょうか おわかりになる方がいらっしゃいましたら、ぜひ教えてください! よろしくお願いいたします

  • SELECT文を発行して、ACCESSより取得する方法

    既存のプログラムを元に、 以下のようなソースを作成したのですが、 取得出来ませんでした。 参照設定やパスの設定、SQL文は正しいです。 どこがマズイのでしょうか? アドバイスをお願い致します。 Dim db  As DAO.Database Dim rs  As DAO.Recordset Dim SQL As String 'データベース接続 Set db = OpenDatabase("DBのパス") 'データ検索SQL SQL = "" SQL = " SELECT文 " 'ACCESSより取得 Set rs = db.OpenRecordset(SQL) db.Close rs.Close

専門家に質問してみよう