• 締切済み

【Access2003】

検索フォーム(帳票フォーム)にて各レコードにチェックボックスを設けています。 クエリにて抽出したレコードをボタンクリックで全チェックボックスを選択(Yesに)したいのですが、うまくいきません。 ボタンのプロパティの『クリック時』にどういうVBAを指定したら良いのでしょうか? ちなみに、その逆はできます。 Private Sub 選択全解除_Click() Dim CN As ADODB.Connection Dim mySQL As String Set CN = CurrentProject.Connection mySQL = "UPDATE T_データベース SET 選択=False;" CN.Execute (mySQL) Me.Requery CN.Close Set CN = Nothing End Sub 選択=True;にするとテーブルの全レコードがYesになってしまいます。 テーブル名の部分にクエリ名を指定してもうまくいきません。 宜しくお願い致します。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

> クエリによる絞込みはできていますが > mySQL = "UPDATE T_データベース SET 選択=True;"にすると > 全てのレコードが『Yes』になってしまいます。 whereが無いから、全件が更新されるのは正しい動きですよ。 絞込み条件が不明ですが、「会員番号が2000以上を対象とする」と仮定すると mySQL = "UPDATE T_データベース SET 選択=True where 会員番号>=2000;" のようになるはず。 > 1つ以上の必要なパラメータの値が設定されていません。 これからすると、クエリが完成していないのかな? または絞込み条件をフォーム(TextBox等)から受け取る設定で、コントロール名と合致していない、など。 今のクエリを破棄(削除またはリネーム)して、再度作成なさったほうがよさそうに思います。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> クエリにて抽出したレコードをボタンクリックで > うまくいきません。 どう、うまくいかないのか? そもそも「クエリによる絞りこみができてない」のか。 クエリで絞り込んだレコードを「Trueにしたいが何かエラーが表示される」のか。 docmd.runsql "UPDATE T_データベース SET 選択=-1 where 選択したい条件;" でどうなります? クエリ単体でUpdateを実行して切り分けするほうが近道と思いますよ。

studio-tak
質問者

補足

お世話になります。 クエリによる絞込みはできていますが mySQL = "UPDATE T_データベース SET 選択=True;"にすると 全てのレコードが『Yes』になってしまいます。 『T_データベース』の部分をそのクエリを指定して クリックすると以下の様なメッセージがでてきます。 **************************************************** 実行時エラー '-2147217904(80040e10)': 1つ以上の必要なパラメータの値が設定されていません。 ****************************************************

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> mySQL = "UPDATE T_データベース SET 選択=False;" クエリ名が[T_データベース]なんですか? 接頭語が T_ なので、直接テーブルを指定してませんか? クエリなら、なんらかのWhere条件があってもよさそうな気がする。

studio-tak
質問者

補足

失礼しました。 上記は全てのチェックボックスを『No』にするVBAを参考までに明記させて頂きました。 その逆の方法を知りたいのです。 T_データベースは全てのレコードを保存しているテーブル名です。

関連するQ&A

  • 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 を見ましたが、解決できませんでした。

  • ADOでRecordsetオブジェクトをレコードソースに設定したい

    Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。 宜しくお願いします。 Private Sub FormNoKansu() Dim cn as New ADODB.Connection Dim rs as New ADODB.Recordset Dim strSql as String 'ODBCでサーバーに接続 cn.ConnectionString = "ODBCでMySQLに..." ... strSql = "SELECT * FROM ..." rs.Open strSql, cn 'ここに[rs]を入れられたらと思っています Me.Recordset = "" 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 /------------------------------------------------/

  • CMD.Executeの結果をメッセージボックスで表示したい

    Public Sub SQLActionCmd()     Dim CN As ADODB.Connection     Dim CMD As ADODB.Command     Dim MYSQL As String     '接続     Set CN = CurrentProject.Connection     '更新     MYSQL = "SELECT * FROM 名簿 WEHRE 性別 = "男" ;"     Set CMD = New ADODB.Command     CMD.ActiveConnection = CN     CMD.CommandText = MYSQL     CMD.Execute    '終了     Set CMD = Nothing     RS.Close: Set RS = Nothing     CN.Close: Set CN = Nothing    End Sub と言う感じで実際にはAccessのフォームのボタンをクリックしたタイミングでコードをかいているのですが、このCMD.EXECUTEを実行した結果、テーブルに該当データがなければない旨のメッセージボックスを出したいのです。 そういうことは可能でしょうか?

  • 抽出条件のあるクエリにADOで新規にレコードを追加

    抽出条件のあるクエリにADOで新規にレコードを追加する事は不可能でしょうか? フォーム1にテキスト0を配置し SELECT テーブル1.色 FROM テーブル1 WHERE (((テーブル1.色)=[Forms]![フォーム1]![テキスト0])); というクエリを作成しました。 テーブル1のデータは 色 黄 黒 青 赤 です。 ADOでクエリにデータを追加したいのですが Public Sub Exsample() 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 クエリ1" ここの時点で 「実行時エラー:'-2147217904 (80040e10)': 1つ以上の必要なパラメータの値が設定されていません。」 と表示されてしまいます。 「クエリ1」を「テーブル1」にしたらうまくいきます。 だったらテーブルに追加したら?と思われると思いますが 今回は例であり、実際はクエリに追加したいです。 回避方法があれば教えてください。 よろしくお願い致します。 (ヴァージョンはアクセス2003です)

  • アクセス クエリ-について

    テーブルには、 フィールド1 ------------------ エクセルaaa aaaエクセルaaa aaaエクセル ------------------ というレコードが入っていて、 ------------------------------------------------------ UPDATE テーブル1 SET テーブル1.フィールド1 = "Excel" WHERE (((テーブル1.フィールド1) Like "*エクセル*")); ------------------------------------------------------ という更新クエリ作り、実行すると、テーブルのデータが フィールド1 ------------------ Excel Excel Excel ------------------ になってしまいます。 やりたい事は、 フィールド1 ------------------ Excelaaa aaaExcelaaa aaaExcel ------------------ にしたいのですが、更新クエリじゃ無理なのでしょうか? 手動でテーブルで検索ダイアログを開いてフィールドの一部分のみ置換するしかないのですか? 最終的には、 ------------------------------------------------------ Sub 更新クエリ() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim 置換前 As String Dim 置換後 As String Dim SQL As String cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & CurrentProject.FullName rs.Open "T置換", cn, adOpenKeyset, adLockOptimistic For i = 1 To rs.RecordCount 置換前 = rs("置換前") 'エクセル 置換後 = rs("置換後") 'Excel SQL = "UPDATE テーブル1 SET テーブル1.フィールド1 = ""Excel"" WHERE (((テーブル1.フィールド1) Like ""*エクセル*""));" DoCmd.RunSQL SQL rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------------ のようにして、置換用テーブルのレコードを一つ一つ取得して、 テーブル1の値を置換していきたいのです。 何か対策があればご回答よろしくお願いします。

  • アクセス ADO レコードの件数がおかしい

    アクセスADOでクエリの行数を取得したいのですが クエリが200行でも100行でも必ず12が返ります。 クエリ1は、一度12行の時にadoで数を取得し、その時は、正しく12が返ったのですが、 行数が変わっても12が返ります。 コードは、 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM クエリ1", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub です。 Debug.Print DCount("*", "クエリ1") だと、正しいレコード数が取得されるのですが、ADOだとおかしいです。 クエリ1のSQL文は、 SELECT Q_作業用.* FROM Q_作業用; のように、別のクエリを持ってきています。 何が原因なのでしょうか? よろしくお願いします。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

  • アクセスの表形式のフォームにマスターよりデータを取得したい

    よろしくお願いいたします。 SYAINCD|NAME|TEL|JOB| というテーブルがあるとします。(全て非連結にしました) このテーブルのフォームをウイザードを使い、表形式にて 作成しました。そこで何をしたいかといいますと SYAINCD|NAME| 001 |A | という社員マスターがありますので、そこから、先ほどの フォームのNAMEへデータ(A) を入れたいのです。そこで 教えていただきたいのは。 (1) フォームはできたのですが、SYAINCD にコードを入力すると   即、2行目ができてしまいます。これで正常なのでしょうか? (2) フォームでSYAINCD(3桁)を入力し終わったら起動する、以下の  ようなVBA を記述してみました。これでAをフォームに取得するつもりで。 Private Sub SYAINCD_LostFocus() Dim cn As ADODB.Connection Dim inrs1 As ADODB.Recordset Dim MYSQL As String Set cn = CurrentProject.Connection MYSQL = "SELECT NAME FROM SYAINMST WHERE SYAINCD = '" &         Me!SYAINCD & "';" Set inrs1 = New ADODB.Recordset inrs1.Open MYSQL, cn, adOpenKeyset, adLockReadOnly If inrs1.RecordCount <> 0 Then Me!NAME = inrs1!NAME Else Me!NAME = "該当者なし!!" End If inrs1.Close: Set inrs1 = Nothing cn.Close: Set cn = Nothing End Sub  結果、1行目のNAMEにはAが格納されましたが、2行目のNAMAにもAが 格納されてしまいました。  この場合1行目のNAMEのみAを格納することはできないのでしょう  か?  VBAの記述がおかしいのはなんとなく分かるのですが、対処法がわか らなくてこまっております。  それとも表形式のフォームでは不可能なことなのでしょうか?  例が分かりずらくて申し訳ありませんが、ご教授をお願いいたしま  す。

  • ACCESS フォームやコントロールはクラス?

    オブジェクト志向を勉強し始めた者です。 今まで特に意識していなかったのですが、 ACCESSのフォームやテキストボックス等のコントロールは、 クラスなんじゃないか、と思ったんですが これは正しいでしょうか? レコードセットをopenする時に使用する宣言の Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset でいうと ADODBがクラスなのでしょうか? ADODB.Connection、 ADODB.Recordsetがクラスなのでしょうか? ご教授の程、よろしくお願いします。

専門家に質問してみよう