• ベストアンサー

アクセスの更新クエリについて

あいうテーブルの日付に、かきくテーブルの日付の値を更新したい場合はどうしたらよいのでしょうか? あいうテーブルの日付は複数レコード発生し、かきくテーブルの日付は1レコードです。 あいうテーブルの日付の値を一度で、かきくテーブルの日付の値に更新したいです。 アクセスのSQL文を以下の通りにするとエラーが発生します。 UPDATE DTあいう SET あいう.日付 = かきく!日付; アクセスのSOL文を教えてください!

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

Accessのクエリの場合、参照テーブルが1レコード、更新テーブルの全レコードを更新、の場合は次のようなちょっと変な更新クエリになります。 UPDATE あいう, かきく SET あいう.日付 = [かきく]![日付]; 本来は、参照テーブルと更新テーブルの双方が複数レコードで、キーになる項目が一致しているレコード同士を対応させて更新する、と言うのが更新クエリの基本なので UPDATE あいう INNER JOIN かきく ON あいう.キー = かきく.キー SET あいう.日付 = [かきく]![日付]; と言うのが基本形です。 これのテーブル結合記述の あいう INNER JOIN かきく を無くして無条件な結合を示す あいう ,かきく に変更し、更に一致条件の ON あいう.キー = かきく.キー を削ったものが、最終的な回答の UPDATE あいう, かきく SET あいう.日付 = [かきく]![日付]; というクエリです。 アクセス以外のSQL文では UPDATE あいう SET あいう.日付 = かきく!日付; と言う記述が許されますが、アクセスでは許されません。

chika0702
質問者

お礼

ありがとうございました! 解決しました!

その他の回答 (1)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

UPDATE あいうテーブル SET あいうテーブル.日付 = [かきくテーブル]![日付]; で出来ませんか。

関連するQ&A

  • 更新クエリー

    ACCESS2000です。 Aというテーブル(レコード件数500件くらい)のValue1というフィールドをBというテーブル(レコード件数1件)のValue1というフィールドの値で全件更新したいのですが、どのようなSQLを書けばよいのでしょうか。 基本的なことだと思いますがよろしくお願いいたします。

  • アクセスADOで更新クエリがエラーになる

    アクセスからYES/NO型をを含むテーブルをSQLサーバーへ移行したのですが アクセスから更新クエリを使ってYES/NO型のフィールドを全てFalseにしたいのですがエラーになってしまいます。 cn.Execute "UPDATE テーブル SET 返事 = False" このコードを アクセスからADOを使ってアクセスのテーブルに対して行えば問題なくできるのですが そのままSQLサーバーのテーブルに対して実行すると 「列名'False'が無効です」 となります。 そもそも列名は「False」ではなく「返事」です。 SQLサーバーでのデータ型は「bit」になっています。 何かわかる方御回答よろしくお願いします。

  • アクセスで更新クエリ 「引数が無効です」

    アクセスで更新クエリを実行しようとしたら 「引数が無効です」というエラーになってしまいます。 更新クエリの内容(SQL文)は、 UPDATE T_詳細 SET T_詳細.name = StrConv([T_詳細]![name],8); のような感じで、半角にしようとしています。 どこが間違っているのでしょうか?

  • 1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

    1テーブル&複数レコードの更新に対して1度のupdate文での処理方法 Delphi2010+SQL SERVER 2005で開発しています。 update文で、 現在下のようにwhileで複数レコードに対して、 1回、1回、sqlを発行して、更新しています。 これを、一度のSQLの発行で処理できないものでしょうか? 更新テーブルは1つで、更新する項目も同じです。 更新するデータと、where句の条件が異なります。 もし可能なようでしたら、どうかご教授お願いします。 update table set A=1,B=2 where id=1 update table set A=2,B=3 where id=5 update table set A=9,B=99 where id=7 update table set A=5,B=10 where id=15 update table set A=1,B=10 where id=75

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • ACCESS VBAのDSUMを使ってUPDATE

    よろしくお願いします。 通貨型のACCESSデータベースのレコードにDSUMを使ったUPDATE文で更新をしたいのですが、 うまくいきません。 イミディエイトウィンドウで出力したSQLをACCESSのクエリーで実行したところ、 "1個のフィールドで型変換エラー"となります。 実行したSQLは下記のようなものです。 UPDATE テーブル名 SET フィールド名 = DSUM(フィールド名,"テーブル名",コードI = '0000' AND コードII BETWEEN '5110' AND '5410') WHERE コードI = '0000' AND コードII = '5980'; 因みに、更新元テーブルと更新先テーブルは同じテーブルです。 行いたいのは、コードII列の「5110」~「5410」の合計値を、「5980」の場所にUPDATEを させようとしてます。 よろしくお願いします。

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。

  • 更新クエリで合計金額を入れたい

    アクセスのテーブル1を作成しました。 ID    日付    金額    合計金額 1     6/1     ¥100 2     6/1     ¥200 3     6/2     ¥150 4     6/2     ¥300 (合計金額はカラ) そして、日別の合計を出すクエリ1を作成しました。 SELECT [テーブル1].日付, Sum([テーブル1].金額) AS 金額の合計 FROM テーブル1 GROUP BY [テーブル1].日付; 元のテーブルの合計金額の列に、クエリで表示した金額の合計を更新クエリで入れようとすると、 「 更新可能なクエリであることが必要です。」となります。 更新クエリのSQL文は UPDATE クエリ1 INNER JOIN テーブル1 ON [クエリ1].日付 = [テーブル1].日付 SET [テーブル1].合計金額 = [クエリ1]![金額の合計]; です。 ヘルプの内容の 一対多リレーションシップの '一' 側のフィールドを更新するクエリを実行しようとしました。 読み取り専用で開いているデータベースのクエリで、古い OpenQueryDef メソッドで使用しています。 には該当してないのですが(リレーションシップを組んでないし、四方チリ専用で開いてないし) どうすれば元のテーブルに合計金額を入れられるのでしょうか? 結果的に ID     日付     金額     合計金額 1     6/1     ¥100     300 2     6/1     ¥200     300 3     6/2     ¥150     450 4     6/2     ¥300     450 にしたいです。

  • ACCESSで大量の更新を行うと「レコードが大きすぎます。」

    ACCESS2003です。 SQLのSELECT文で取得した結果に対して、条件を満たすかどうかを 判定して、1レコードずつ結果を更新していくロジックを考えました。 wSQL = "SELECT * FROM ~" Set wREC = wCNN.OpenRecordset(wSQL, dbOpenDynaset) Do Until wREC.EOF If 条件を満たすか Then wREC.Edit wREC.Fields("結果") = "○" wREC.Update Else wREC.Edit wREC.Fields("結果") = "×" wREC.Update End If wREC.MoveNext '次レコードへ Loop これを実行すると、途中で「レコードが大きすぎます。」というエラーが 発生します。SELECT文を*でなく、項目を絞ったのですが相変わらずです。 レコード数は1800行ほどです。 これはどういった対処が必要でしょうか?

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

    テーブルには、 フィールド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の値を置換していきたいのです。 何か対策があればご回答よろしくお願いします。

専門家に質問してみよう