以下のAのSQLをAccessから実行すると「実行時エラー3073 更新可能なクエリであることが必要です。」エラーが表示されます。
一時、待避としてBのような処理をしていますが、かなり処理速度がかかります。
何とかAのような1文で処理できないでしょうか?
'A================================================
Update PV_PRINT pv Set 勉強日 = (SELECT max(日付) as 日 FROM 基本記録テーブル where 項目2 between 3011 and 3014 and pv.USER_NUM = 基本記録テーブル.ID GROUP BY ID);
'B================================================
stSQL = "SELECT max(日付) as 日, ID FROM 基本記録テーブル where 項目2 between 3011 and 3014 GROUP BY ID;"
Set TBL1 = CurrentDb.OpenRecordset(stSQL)
Do Until TBL1.EOF
stSQL = "UPDATE PV_PRINT "
stSQL = stSQL & " SET PV_PRINT.勉強会日 = " & Format(TBL1![日], "yyyymmdd")
stSQL = stSQL & " WHERE PV_PRINT.USER_NUM = " & TBL1![ID] & ";"
CurrentDb.Execute stSQL
TBL1.MoveNext
Loop
Set TBL1 = Nothing
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
お詫びと訂正:GROUP BY 句は無駄で不必要。
個別にユーザを特定した条件でもって最大値を求めています。
で、GROUP BY 句は無駄で不必要でした。
5:30で帰宅をあせって投稿したのでお許しのほどを・・・。
なお、自宅からですので未テストですが・・・。
No.2
- 回答日時:
[UserNum]_[勉強日]
_______1___2008/10/02
_______2___2008/10/02
2回目のテスト結果はコピペミスでした。
当然に’2008/10/02’に更新されます。
No.1
- 回答日時:
基本記録テーブル: テーブル
[ID]_[User_Num]_[日付______]_[項目
001__________1___2008/10/01___3011
002__________1___2008/09/30___3012
003__________2___2008/10/01___3010
004__________2___2008/10/02___3014
PV_PRINT: テーブル
[UserNum]_[勉強日]
_______1___2008/10/01
_______2___2008/10/02
基本記録テーブル: テーブル
[ID]_[User_Num]_[日付______]_[項目
001__________1___2008/10/01___3011
002__________1___2008/09/30___3012
003__________2___2008/10/01___3010
004__________2___2008/10/02___3014
PV_PRINT: テーブル
[UserNum]_[勉強日]
_______1___2008/10/01
_______2___2008/10/02
[イミディエイト]
? CnnExecute("Update PV_PRINT Set 勉強日 = DBMax('日付', '基本記録テーブル', '項目 between 3011 and 3014 AND UserNum=' & UserNum & ' GROUP BY UserNum')")
True
複文を使わない邪道な回答です。
結局は, DBMax関数の中で複文を実行しています。
ですから、どこまで処理速度が改善されるかは保証の限りではありません。
ただ、SQL文が一文になるだけとも言えます。
Public Function DBMax(ByVal strField As String, _
ByVal strTable As String, _
Optional strWhere As String = "", _
Optional ReturnValue = 0) As Variant
On Error GoTo Err_DBMax
Dim N
Dim strQuerySQL As String
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
strQuerySQL = "SELECT MAX(" & strField & ") FROM " & strTable
If Len(strWhere) > 0 Then
strQuerySQL = strQuerySQL & " WHERE " & strWhere
End If
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
.MoveFirst
N = Nz(.Fields(0), "")
End If
End With
Exit_DBMax:
On Error Resume Next
rst.Close
Set rst = Nothing
DBMax = IIf(N <> "", N, ReturnValue)
Exit Function
Err_DBMax:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DBMax)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DBMax
End Function
<<テスト用関数>>
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
Dim isOK As Boolean
Dim cnn As ADODB.Connection
isOK = True
Set cnn = CurrentProject.Connection
With cnn
.Errors.Clear
.BeginTrans
.Execute strSQL
.CommitTrans
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
If cnn.Errors.Count > 0 Then
ErrMessage cnn.Errors(0), strSQL
cnn.RollbackTrans
Else
MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
vbExclamation, " 関数エラーメッセージ"
End If
Resume Exit_CnnExecute
End Function
※余り、改善されないかも・・・?もしかしたら、されるかも・・・?
※そんないい加減な回答です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Access2007でSQLの複数列副問い合わせについて
その他(データベース)
-
更新不可能なクエリに対して更新クエリを実行する方法
Access(アクセス)
-
ACCESS2002のupdateの副問合せについて教えてください
その他(データベース)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
6
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
7
Access サブフォームでの選択行の取得
その他(データベース)
-
8
Access VBA で フォルダ権限をチェックする
Visual Basic(VBA)
-
9
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
10
accessでのリンクテーブルの更新
その他(データベース)
-
11
access2003 クエリSQL文について
その他(プログラミング・Web制作)
-
12
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
13
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
14
実行時エラー3131 FROM 句の構文エラーです について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Accessでクエリを完了できませ...
-
Select ~ into ~ で作成した...
-
Oracleデータベーストリガーの...
-
Access VBA 読み取り専用かチェ...
-
VBAの実行時エラー'2522'について
-
Access VBA [リモートサーバー...
-
SQL Serverのテーブルってどう...
-
大きなテーブルに対する問い合...
-
ユニオンクエリで繋げられるテ...
-
ACCESSのODBCリンクテーブルに...
-
結合テーブルクエリPrimaryKey...
-
accessでSQL実行時のテーブル名...
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT文でのデッドロックに対...
-
クエリのキャンセルがいつにな...
-
accessテーブル作成クエリを実...
-
sqlserverで集計結果をUPDATEし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Accessでクエリを完了できませ...
-
Access VBA [リモートサーバー...
-
実行時エラー3086 削除クエリ...
-
ACCESSのODBCリンクテーブルに...
-
Select ~ into ~ で作成した...
-
ユニオンクエリで繋げられるテ...
-
大きなテーブルに対する問い合...
-
accessでSQL実行時のテーブル名...
-
VBAの実行時エラー'2522'について
-
Oracleデータベーストリガーの...
-
ACCESSにてテーブルをEXCEL形式...
-
Access Update文の副問い合わせ
-
SQL SERFVER で外部キーのエラ...
-
TRY CATCHでシステムエラーを検...
-
勤続年数の求め方
-
Access VBA 読み取り専用かチェ...
-
MS Access2000でエクスポート時...
-
テーブル作成後なんですが、Pri...
-
SSIS 変数の値をSQL実行タスク...
おすすめ情報