1

アクセスに取り組んでいますが、日時を持つ挿入クエリで立ち往生しています。これらのクエリは私には機能しません。

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '#12/12/23 18:46:38+20#', '0', 'T', 'F', '+923468280124');

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', #'12/12/23 18:46:38+20'#, '0', 'T', 'F', '+923468280124');

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '12/12/23 18:46:38+20', '0', 'T', 'F', '+923468280124');

ここに画像の説明を入力

何か案が?何が間違っている可能性があります。

これがc#の私のコードです:

con = new OleDbConnection(ConnStr);
con.Open();

cmd = con.CreateCommand();
cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" +
grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');";
cmd.ExecuteNonQuery();

私もこれを試しました。

cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', @rec_t, '" + fuel_level + "', '" + grid_electricity 
+ "','" + genset_electricity + "', '" + genset_number + "');";
cmd.Parameters.Add("@rec_t", OleDbType.DBTimeStamp).Value 
                              = DateTime.Parse(rec_time);

他のすべての挿入および選択クエリは正常に機能しています

4

4 に答える 4

2

これを試して

try
{

  con = new OleDbConnection(ConnStr);
  con.Open();

  cmd = con.CreateCommand();
  cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES(?,?,?,?,?,?)";
cmd.Parameters.AddWithValue("@id",id);

cmd.Parameters.AddWithValue("@date",DateTime.Parse("12/12/2009 11:34:55"));
  cmd.ExecuteNonQuery();

}
catch (OleDBException ex)
{
  MessageBox.Show(ex.Message);
}

アップデート:

Access 2010 を使用している場合は、MSAccess でストアド プロシージャを使用することもできます。詳細については、この記事を参照してください。MS Access でストアド プロシージャを作成するにはどうすればよいですか?

于 2012-12-23T15:45:50.363 に答える
1

クエリINSERTに複数の問題があります。このバージョンをあなたのコメントからDJにコピーしました:

INSERT INTO tbl_fuel_levels (
    [genset_id],
    [rec_time],
    [fuel_level],
    [grid_electricity],
    [genset_electricity],
    [genset_number]
    )
VALUES (
    '001',
    '#12/11/2023 2:46:38 PM#',
    '0',
    'T',
    'F',
    '+923468280124'
    );

問題は次のとおりです。

  1. '#12/11/2023 2:46:38 PM#'文字列を[日付/時刻]フィールドに挿入しようとしていますrec_time。一重引用符を破棄して、その値を文字列ではなく日付/時刻リテラルにします。#12/11/2023 2:46:38 PM#
  2. 'T'文字列を[はい/いいえ]フィールドに挿入しようとしていますgrid_electricityTrue代わりに引用符なしで使用してください。
  3. 'F'文字列を[はい/いいえ]フィールドに挿入しようとしていますgenset_electricity。これは問題#2と同じ問題です。引用符なしで使用Falseします。

Accessのクエリデザイナを使用して、新しいクエリを作成します。SQLビューに切り替えて、次のステートメントに貼り付けます。

INSERT INTO tbl_fuel_levels (
    [genset_id],
    [rec_time],
    [fuel_level],
    [grid_electricity],
    [genset_electricity],
    [genset_number]
    )
VALUES (
    '001',
    #12/11/2023 2:46:38 PM#,
    '0',
    True,
    False,
    '+923468280124'
    );

そのステートメントに問題が残っている場合は、c#コードを気にせずにステートメントを作成する前に、Accessで問題を解決してください。

または、パラメータクエリアプローチを使用することをお勧めします。はい/いいえフィールドでこれらの問題を解決すると、おそらくそれを機能させることができます。

于 2012-12-23T16:52:11.087 に答える
0

最初に正確な例外をトラップして、挿入が失敗しているフィールドを特定できるように、次の方法をお勧めします..渡す日付が奇妙だと思います「MM/DD/YYY HH:MM:SS」を渡してみてください

try
{

  con = new OleDbConnection(ConnStr);
  con.Open();

  cmd = con.CreateCommand();
  cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" + grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');";
  cmd.ExecuteNonQuery();

}
catch (OleDBException ex)
{
  MessageBox.Show(ex.Message);
}

AddWithParameters() メソッドを使用することにした場合は、次のようなことを試してください。

cmd.Parameters.AddWithValue("?", DateTime.Parse("12/11/2023 2:46:38"));

またはそれを行う正しい方法は、このようなものになります

"INSERT INTO tbl_fuel_levels[genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number])
 VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", genset_id, rec_time, fuel_level, grid_electricity, genset_electricity, genset_number)";

変数を作成し、変数に値を割り当てることをお勧めします

このように変数を作成してこれらの値に割り当てます

genset_id、rec_time、fuel_level、grid_electricity、genset_electricity、genset_number

于 2012-12-23T15:39:53.290 に答える
0

MSAccess クエリで日付をフォーマットするには、#記号のみを使用します。

#12/12/23 18:46:38+20#
于 2012-12-23T16:20:25.553 に答える