今なら家電が全品9%OFF!

ACCESSで以下のコマンドがエラーになってしまったのですが、
何か問題がありますでしょうか?

INSERT INTO tbl_TREE (TEXT, DATE)
VALUES ('ああ'
    ,TO_DATE('2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS'))

よろしくお願いいたします。

A 回答 (6件)

これじゃなく#を使ってもエラーになったというほうのSQLです

    • good
    • 0
この回答へのお礼

CHRONOS_0様
もう一度やり直してみたところ正常にうまくいきました。
お騒がせしてしまい大変申し訳ありませんでした。
助かりました。ありがとうございました。

お礼日時:2007/01/14 15:57

実際にエラーになるクエリのSQLのほうをアップしてみてください

この回答への補足

CHRONOS_0様
今現在使用しているSQLは以下の通りとなっています。
INSERT INTO tbl_TREE
   (TREE_NAME, TRANSPLANT_SEASON, PRUNING_SEASON, FERTILIZATION, NOTE1,
   DEL_FLG, ADD_DATE, UPD_DATE, DEL_DATE)
 VALUES ('ああ', 'いい', 'うう', 'ええ', 'おお', ' ',
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS'),
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS'),
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS') )
以上、よろしくお願いいたします。

補足日時:2007/01/14 07:03
    • good
    • 0

質問者さんの補足に対して・・・



カラム名NOTEをNOTE1に変更し、TO_DATEをFORMATに変更し、
'2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS'
          ↓
'2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS'
に変更して(YYYYの前の'が抜けている)実行してみてください。

私のところではエラーは消えます。

この回答への補足

ape5様
ご指摘の通り以下のようにSQLを変更いたしました。
INSERT INTO tbl_TREE
   (TREE_NAME, TRANSPLANT_SEASON, PRUNING_SEASON, FERTILIZATION, NOTE1,
   DEL_FLG, ADD_DATE, UPD_DATE, DEL_DATE)
 VALUES ('ああ', 'いい', 'うう', 'ええ', 'おお', ' ',
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS'),
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS'),
       FORMAT('2007/01/121:57:27','YYYY/MM/DDHH24:HH24MI:SS') )
結果としましては、以下の内容のエラーがまた発生してしまいました。
エラコード:-2147217913
エラー内容:抽出条件でデータ型が一致しません。
ちなみにこのテーブルのレイアウトは日付以外はテキスト型とSQLには書いていませんが、キーをオートナンバーに設定していますが、何か問題がありましたでしょうか?

何度も申し訳ありませんが、よろしくお願いいたします。

補足日時:2007/01/14 06:57
    • good
    • 0
この回答へのお礼

ape5様
いろいろとアドバイス頂きありがとうございました。
これからもよろしくお願いいたします。

お礼日時:2007/01/14 15:58

日付時刻型のデータは#で囲みます



INSERT INTO tbl_TREE (TEXT, DATE)
VALUES ("ああ",#2007/01/12 1:57:27#)

この回答への補足

実際のSQLは以下の通りです。
INSERT INTO tbl_TREE
  (TREE_NAME,TRANSPLANT_SEASON,PRUNING_SEASON,FERTILIZATION,
     NOTE, DEL_FLG, ADD_DATE,UPD_DATE, DEL_DATE)
 VALUES
   ('ああ', 'いい', 'うう', 'ええ', 'おお', ' ',
    TO_DATE('2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS'),
    TO_DATE('2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS'),
    TO_DATE('2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS') )

CHRONOS_0様のご指摘の通り
日付部分を「#2007/01/12 1:57:27#」に書き換えてやってみたところ
同じエラーのままでした。

補足日時:2007/01/13 09:22
    • good
    • 0

追加でアクセスでは、TO_DATEではなく、Format関数です。

この回答への補足

ape5様のご指摘の通り
「FORMAT('2007/01/121:57:27',YYYY/MM/DDHH24:HH24MI:SS')」と
書き換えてやってみましたが同じエラーでした。

補足日時:2007/01/13 09:23
    • good
    • 0

カラム名のTEXTとDATEが予約語か何かのようです。


別の名前で試してみてください。
それと、エラーの内容も書いておけば、レスが付きやすいかと思われます。

この回答への補足

エラーコードは「-2147217900」で
エラー内容は「INSERT INTO ステートメントの構文エラーです。」
という内容です。

補足日時:2007/01/13 09:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAのAccessでDATE型のINSERT

テーブルに今日の日付でインサートしたいのですが、なぜか、まったく違う日付になってしまいます。
わかる方教えてください。
よろしくお願いします。

INSSQL = "INSERT INTO aaa(test)" _
& " Values(" & Format   (Date, "yyyy/mm/dd") & ");"

Aベストアンサー

INSSQL = "INSERT INTO aaa(test)" _
& " Values(#" & Format(Date, "mm/dd/yyyy") & "#);"

こうかな?

QAccess ADOで文字列を日付型へinsert

VBScriptでCSVファイルのデータをADO経由でAccessにinsertしたいのですが、日付型へのinsertがうまくいきません。
CSVファイルにある「8桁日付」(例:20110101)をAccessの日付型フィールドへinsertするのに、以下の試みをしましたが、型不一致etcのエラーがでてしまいました。
どうしたら、insertできるのでしょうか?

1.8桁日付を yyyy/mm/dd に編集(mid使用) してinsert →型不一致エラー
2.CDATE(yyyy/mm/dd) をinsert →型不一致エラー
3.CDATE(#yyyy/mm/dd#) をinsert →型不一致?エラー

ハマってしまって困っています。ご存知の方がいらっしゃいましたら是非是非教えてください。

Aベストアンサー

SQLのINSERT文を使っているのですか?
この場合、日付は#で囲みます。
INSERT INTO ~ SELECT #2011/02/24# ~
又はCDate関数では文字列にします。
INSERT INTO ~ SELECT CDate("2011/02/24") ~

Q抽出条件でデータ型が一致しません。のエラーメッセージが出る

フォームで入力された値を、
次のファイルでクエリを読み込むときに代入するASPを作成しましたが、実行しようとすると、
「データ型が一致しません。」のエラーメッセージが出ます。
DBはACCESSを使用しています。ACCESSの対象テーブルで、
データ型を「テキスト型」にすると問題ないのですが、
「数値型」にすると、「データ型が一致しません」の
エラーメッセージになります。
フォームでは、プルダウンで「数値」を選択するようになっています。
宜しくお願いします。

Aベストアンサー

Where区に指定した条件のフィールドが数値なら『'』でくくる必要がありません

Set rs = db.Execute("SELECT テーブル3.* FROM テーブル3 WHERE (テーブル3.番号)=" & bangou)
といった具合に修正してみましょう

『'』でくくる必要があるのは対象のフィールドが文字列の場合です

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング