0

アクセス2003

VS 2010 C#

件名のタイトルにあるように、私はこれに問題があります。現在のIDに日付と時刻をスタンプする必要がある日付と時刻を印刷するための新しいフィールドを作成しています。また、UPDATEコマンドパラメータを試しましたが成功しませんでした。

ユーザー名、ログイン日、ログイン時刻を保存する別のメソッド(btnloggedIn)があります。これは正常に機能します。問題が発生している別のメソッド(btnLoggedOut)を作成しました。目的は、ログアウトしたユーザーがログアウトしたときのログアウト日とログアウト時刻を、ログイン時に自動IDが作成されるAccessの来た列に保存することです。

テーブル名-LoginTable

>>

FieldName   Data Type
UserName    Text
Password    Text

テーブル名-LoginLogTable

 FieldName     Data Type

 ID            AutoNumber
 UserName      Text
 LoggedInDate  Date/Time
 LoggedInTime  Date/Time
 LoggedOutDate Date/Time
 LoggedOutTime Date/Time  

IDはPKです。その1対多の関係。ログインするユーザーは、日付と時刻の詳細について多くの詳細を持つことができます

誰かがここで私を助けてくれるなら、私は感謝するでしょう。

 private void btnLogOut_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

       cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = ?, [LoggedOutTime] = ?  
       WHERE ID = ?";

        cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
        cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
            Close();
   }

これはbtnLoginメソッドの部分的なコードです...

 OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)";

        cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
        cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString());
        cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm"));
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();
4

2 に答える 2

2

ユーザーが[ログアウト]ボタンをクリックしたときにクエリを実行すると、SELECT @@IDENTITY期待する値が得られない可能性があります。SELECT @@IDENTITYレコードを作成した直後INSERT(この場合、ユーザーがログインたとき)に呼び出されることを目的としています。次に、その値をアプリケーションに隠し、ユーザーがログアウトしたときにそれを使用して同じレコードを選択できます。

アプリケーションが他のレコードを(他のテーブルに)挿入すると、新しいID(別名「AutoNumber」)値が作成され、それらのSELECT @@IDENTITY値の最新のものが返されます。したがって、ユーザーがログインしたときに値を取得し、ユーザーが再度ログアウトしたときのために値を保存します。@@IDENTITY

于 2013-03-25T19:58:45.150 に答える
0

通常、これを行う方法は次のとおりです。

  1. 新しいログインレコードを作成します。
  2. その特定のユーザーの最新のログインエントリを要求する新しいselectを実行して、自動生成されたレコードIDを取得します。降順で並べ替えて、レコードセットの最初のレコードであることを保証できます。
  3. WHERE ID = ?そのレコードIDを使用して、代わりに使用して更新するログインレコードを指定し、ID値にレコードIDを入力します。

これは、自動生成されたプライマリレコードIDがわからない場合の、データベースレコード作成の非常に一般的なパターンです。新しいレコードを作成し、それをレコードIDに読み戻して、自動生成された主キーID値を取得し、それ以降、レコードIDを使用してそれを参照します。

于 2013-03-25T18:55:24.983 に答える