こんにちは。
現在ASPでDB登録、削除、更新を実施するごくごく基本的なPageを
つくっているのですが、どうしてもDBの更新ができなくて困ってます。。
各パラメータはフォームから入力される(更新される)値です。
If ACTION3 = "edit1" Then
db.Execute "UPDATE kekkon SET [名前_姓] = '" & name_sei_kan3 & "',[名前_名] = '" & name_na_kan3 & "',[名前_姓_かな] = '" & name_sei_hira3 & "',[名前_名_かな] = '" & name_na_hira3 & "',[生年月日] = '" & seinen3 & "',[Email] = '" & email3 & "' WHERE [ID] = '" & IDID3 & "'"
End If
このUPDATEの文で下記のようなエラーがでます。
エラー タイプ
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。
DBはアクセス2002でデータの型は以下のとおりです。
ID:オートナンバー型
名前_姓:テキスト型
名前_名:テキスト型
名前_姓_かな:テキスト型
名前_名_かな:テキスト型
生年月日:日付/時刻型
Email:テキスト型
なぜうまく動かないのか3日間調べましたが、ダメでした。。
素人質問で申し訳ないですが、ヒントを頂ければと思いますので
宜しくお願い致します。
No.6
- 回答日時:
No5 を書いた者です。
>ちなみにもし差し支えなければ、15行目の最後の『& " "』は
>どういう意味なのか教えて頂いてもよろしいでしょうか。
もちろん無くても大丈夫です。
私がつける理由として2つ。
1つ目
「'(シングルコーテーション)」も何もついてないよね?の確認を明確にしている。
2つ目
条件追加のとき既存ソースを触らなくて済む。
たとえば、『[名前_名_かな] like 'タロウ*' 』を追加したい場合。
strSql = strSql & "AND [名前_名_かな] like 'タロウ*' "
の1行追加するだけ。
もちろん、
strSql = strSql & " AND [名前_名_かな] like 'タロウ*' "
AND の前にスペース にすればいいのですが、
これだと、後で見たときに、WHERE と AND の先頭が揃わないので、
ちょっと嫌かなぁ~と思ってるだけです。
まっ、個人差があると思うので、
参考程度で止めておいてくださいm(__)m
No.5
- 回答日時:
「"(ダブルコーテーション)」があって、
「'(シングルコーテーション)」があって、
「,(カンマ)」があって、
「変数」がここに入って。。。。
ってややこしくなってるだけだと思います。
まず、SQL文を整形しなおしてみるものいいかも知れません。
私も、よく躓きましたので。
VB開発者なので、私がVBでよく書く書き方ですが参考までに。
(私が見やすい状態なので、他の方みたら見にくいかもしれませんが...)
09行目は生年月日に値が入ってないと、「##」になってしまうのを回避するための分岐。
12行目の日付は他の方からのアドバイスを参考に、フォーマット変更が必要かも。
15行目のIDはデータベース上、ナンバー型なので、「'(シングルコーテーション)」は不要。
16行目はVBでは、イミディエイトウインドウにSQL文を出力(取得)し、
AccessのクエリやSQLPlus(Oracle)に貼り付けて、SQL文を確認しています。
01: Dim strSql As String
02: strSql = ""
03: strSql = strSql & "UPDATE kekkon "
04: strSql = strSql & "SET "
05: strSql = strSql & " [名前_姓] = '" & name_sei_kan3 & "' "
06: strSql = strSql & ",[名前_名] = '" & name_na_kan3 & "' "
07: strSql = strSql & ",[名前_姓_かな] = '" & name_sei_hira3 & "' "
08: strSql = strSql & ",[名前_名_かな] = '" & name_na_hira3 & "' "
09: If seinen3 = "" Then
10: strSql = strSql & ",[生年月日] = NULL "
11: Else
12: strSql = strSql & ",[生年月日] = #" & seinen3 & "# "
13: End If
14: strSql = strSql & ",[Email] = '" & email3 & "' "
15: strSql = strSql & "WHERE [ID] = " & IDID3 & " "
16: Debug.Print strSql
17: db.Execute strSql
こんな感じですが、エラー回避策の足がかりになりませんか?
ご回答ありがとうございます。
非常に見やすいです。。。
このほうが絶対いいと思いました。
ありがとうございます!!
ちなみにもし差し支えなければ、15行目の最後の『& " "』は
どういう意味なのか教えて頂いてもよろしいでしょうか。
このような書き方をした場合は最後にスペースを入れる必要がある
のでしょうか?
No.4
- 回答日時:
カラムを一つだけ更新するUPDATE文でまずやってみて、どこでエラーなのか切り分ける感じでやってみてはどうですか。
ご回答ありがとうございました。
最初の頃、ご指摘いただいているとおり、1個でもダメだったので質問させて頂きました。
結局、 WHEREの後の書き方がダメだったのと、値が空だったためダメだったようです。
なんとか解決できました。アドバイスありがとうございました。
No.3
- 回答日時:
私はこう「WHERE [ID] = " &IDID3 "'"」書いていません。
「WHERE [ID] = " & IDID3」と書きました。
「WHERE [ID] = " &IDID3 "'"」はIDID3と"'"の間に結合子が無いので構文エラーです。
「WHERE [ID] = " &IDID3 '」アポストロフィ以降はコメント扱いなので、「WHERE [ID] = " &IDID3」と同じです。
結果的に私の書いたものと同等になったということです。
文字列だから"'"(アポストロフィ)で囲む、数値はそのまま(何も囲まない)という区別を理解しましょう。
次に"##"となったのは seinen3 の中身が空欄だったからではないですか?
もし、空欄だったり、日付として正しくない形式ならエラーになります。
それくらいはSQL実行前にチェックしてくださいね。
因みに、空欄を許可している場合にseinen3 の中身が空欄だったら、[生年月日] = Null となるようにしてください。
注:しつこいようだけど、[生年月日] = 'Null' じゃないからね。
ご回答ありがとうございました。
ご指摘頂いたとおり、seinen3の中身が空でした。
値をいれたらうまくいきました。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
先ずIDは数値なので、WHERE句で ID='1' となる記述は誤りです。
正しくは ID=1 となるようにします。(下記参照)
"' WHERE [ID] = '" & IDID3 & "'" → "' WHERE [ID] = " & IDID3
次にAccessの日付型は'(アポストロフィ)ではなく、#(シャープ)で囲むのが正しい。
"',[生年月日] = '" & seinen3 & "',[Email]~ → "',[生年月日] = #" & seinen3 & "#,[Email]~
但し、日付はyy/mm/ddだと、場合によってmm/dd/yyに解釈される可能性があります。
例:08/04/07(2008年4月7日のつもりだが、2007/08/04となってしまうことがある)
もし、解釈が異なっていた場合は、また質問してください。
この回答への補足
ご回答ありがとうございます。
結果的にはダメでした><
試して見た結果を以下に列挙します。
(1)WHERE [ID] = " &IDID3& "'" → WHERE [ID] = " &IDID3 "'"
Microsoft VBScript コンパイル エラー (0x800A0401)
ステートメントの末尾が不正です。
/kekkon5/edit001.asp, line 24, column 242
db.Execute "UPDATE kekkon SET [名前_姓] = '" & name_sei_kan3 & "',[名前_名] = '" & name_na_kan3 & "',[名前_姓_かな] = '" & name_sei_hira3 & "',[名前_名_かな] = '" & name_na_hira3 & "',[生年月日] = " & seinen3 & ",[Email] = '" & email3 & "' WHERE [ID] = " &IDID3 "'"
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
(2)WHERE [ID] = " &IDID3& "'" → WHERE [ID] = " &IDID3
→ WHERE [ID] = " &IDID3'
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] UPDATE ステートメントの構文エラーです。
またそれとは別に
"',[生年月日] = '" & seinen3 & "',[Email]~ → "',[生年月日] = #" & seinen3 & "#,[Email]
を実行したところ、下記エラーが発生してしまいました。
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] クエリ式 '##' の 日付の構文エラーです。
ちなみに日付はyy/mm/ddです。
取り急ぎ、結果をご報告させて頂きます。
どこが悪いのかさっぱりです^^;・・・。
No.1
- 回答日時:
こいつでしょう。
>"',[生年月日] = '" & seinen3 &
日付型の場合、#でくくらないと「日付シリアル」と認識しないかと。
この回答への補足
ご回答のほうありがとうございました。
ご教授頂いたところ試してみました。
,[生年月日] = '" & seinen3 & "'→,[生年月日] = #" & seinen3 & "#としてみましたが、
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] クエリ式 '##' の 日付の構文エラーです。
となってしまいました。。
取り急ぎご報告させて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自分の下の名前を呼ばれるのが...
-
外人さんの名前で××jr ×× 3世って
-
外国人の名前を検索できるサイ...
-
何と読むのか教えてください
-
日本の空白の150年間に 日本で...
-
古文で「ごめん」って・・・
-
50音の「わ」を数字にすると何...
-
日本語「今一」「今二」「今三」
-
用を足すの語源
-
ネガーって何?
-
「立合い」 と 「立会い」 違い...
-
天智天皇陵だけ隔離された場所...
-
中3の宿題!! 主張文 構成ど...
-
草薙剣は熱田神宮にあると言い...
-
蛭子さんの苗字の由来を教えて...
-
八岐大蛇の尾からどうして剣が...
-
天地無用の読み下し文は?
-
ヤマトタケルと神武天皇
-
裏古事記という書物を聞いた人...
-
古代、天皇の称号とされる「須...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自分の下の名前を呼ばれるのが...
-
外人さんの名前で××jr ×× 3世って
-
さやか という名前はいつの時...
-
古代中国の儒学者の英語名
-
何と読むのか教えてください
-
外国人の名前を検索できるサイ...
-
西洋の歴史上の有名人が同じ名...
-
フランスの最後の王の名前について
-
最近、オワコンだとかうわこん...
-
海外の子供の名付けについて
-
蘇我蝦夷は本名?
-
第53代・淳和天皇の諱は、なぜ...
-
新入生歓迎会
-
古文で「ごめん」って・・・
-
日本の空白の150年間に 日本で...
-
50音の「わ」を数字にすると何...
-
中3の宿題!! 主張文 構成ど...
-
日本語「今一」「今二」「今三」
-
「立合い」 と 「立会い」 違い...
-
あなたのお財布の中に 諭吉さん...
おすすめ情報