投稿者 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 ( 値, ... )
という形です。