Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Accessのテーブルに0001を書き込むとゼロサプレスされてしまいます。
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=10224#CommentId20607
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
YuO
 (社会人)
投稿日時
2011/5/17 16:02:46
> ①TextK を、Access2010 で作成された、テーブル(基礎全データ)に新規レコードを作成し
> 最初のフィールドに入力しようとしています。ところがテーブルには、ゼロサプレスされた
> (余分なゼロを省略)ものが、入力されてしまいます。
> どこが問題なのでしょうか?
まず,「何故起きるか」から。
SQL文において,文字列は'で囲う必要があります (Accessだと"も許されますが)。
今回は,
INSERT INTO 基礎全データ Values(0001,'','','','','','','','','','','','','','','','','','','','','','','','有効','',yes)
というSQL文が発行されたため,0001は数値1として扱われ,さらにテキスト型に変換してINSERT文が発行されています。
回避策ですが,
・'で囲ってINSERTする
・パラメータを使う (推奨)
となります。
パラメータを使う方法については,
MSDN: OleDbParameter クラス (System.Data.OleDb)
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbparameter.aspx
や
MSDN: OleDbCommand.Parameters プロパティ (System.Data.OleDb)
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbcommand.parameters.aspx
のサンプルを参考にしてください。
# 単純に囲うのは,エスケープが面倒なことになるので割愛。
> ②Com = New OleDb.OleDbCommand("INSERT INTO 基礎全データ Values(" _
> & TextK.PadLeft(4,"0") & ",'','','','','','','','','','','','','','','','','','','','','','','','有効','',yes)",cn)
> で、最初のフィールドに、TextK を入力し残りの26フィールドに空白を入力する
> ようにしています。すっきりとできるコードはあるのでしょうか?
INSERT文に列名を指定することで必要な列だけを書くことができます。
INSERT INTO テーブル名 ( 列名, ... ) VALUES ( 値, ... )
という形です。