こんにちは。
現在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.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.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.3
- 回答日時:
私はこう「WHERE [ID] = " &IDID3 "'"」書いていません。
「WHERE [ID] = " & IDID3」と書きました。
「WHERE [ID] = " &IDID3 "'"」はIDID3と"'"の間に結合子が無いので構文エラーです。
「WHERE [ID] = " &IDID3 '」アポストロフィ以降はコメント扱いなので、「WHERE [ID] = " &IDID3」と同じです。
結果的に私の書いたものと同等になったということです。
文字列だから"'"(アポストロフィ)で囲む、数値はそのまま(何も囲まない)という区別を理解しましょう。
次に"##"となったのは seinen3 の中身が空欄だったからではないですか?
もし、空欄だったり、日付として正しくない形式ならエラーになります。
それくらいはSQL実行前にチェックしてくださいね。
因みに、空欄を許可している場合にseinen3 の中身が空欄だったら、[生年月日] = Null となるようにしてください。
注:しつこいようだけど、[生年月日] = 'Null' じゃないからね。
ご回答ありがとうございました。
ご指摘頂いたとおり、seinen3の中身が空でした。
値をいれたらうまくいきました。
ありがとうございました。
No.1
- 回答日時:
こいつでしょう。
>"',[生年月日] = '" & seinen3 &
日付型の場合、#でくくらないと「日付シリアル」と認識しないかと。
この回答への補足
ご回答のほうありがとうございました。
ご教授頂いたところ試してみました。
,[生年月日] = '" & seinen3 & "'→,[生年月日] = #" & seinen3 & "#としてみましたが、
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] クエリ式 '##' の 日付の構文エラーです。
となってしまいました。。
取り急ぎご報告させて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自分の下の名前を呼ばれるのが...
-
西洋の歴史上の有名人が同じ名...
-
何と読むのか教えてください
-
古文で「ごめん」って・・・
-
日本の空白の150年間に 日本で...
-
用を足すの語源
-
「立合い」 と 「立会い」 違い...
-
ヲのつく言葉について
-
日本語「今一」「今二」「今三」
-
50音の「わ」を数字にすると何...
-
ナンデこう読むの
-
近頃は、7日 8日 などを ななに...
-
日本の神様の数
-
ネガーって何?
-
受付嬢は女性ですが、男性なら...
-
言語学的に”ち”ということばの意味
-
調子に乗る を 漢字二文字程度...
-
アイヌ語について教えてください。
-
蘇我馬子・蝦夷・入鹿の名は後...
-
韓国語のファンタジーにおける...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自分の下の名前を呼ばれるのが...
-
外人さんの名前で××jr ×× 3世って
-
何と読むのか教えてください
-
さやか という名前はいつの時...
-
海外の子供の名付けについて
-
古代中国の儒学者の英語名
-
外国人の名前を検索できるサイ...
-
フランスの最後の王の名前について
-
ASPからのデータベース更新
-
名前を書かないといけませんか?
-
西洋の歴史上の有名人が同じ名...
-
海外に日本人男性の名前が付い...
-
ガリレオとガリレイは関係があ...
-
最近、オワコンだとかうわこん...
-
上杉謙信の名前について・・・
-
エリザベス2世などの「世」につ...
-
名前のほかにつける「字(あざ...
-
古文で「ごめん」って・・・
-
日本の空白の150年間に 日本で...
-
「立合い」 と 「立会い」 違い...
おすすめ情報