0

私はこの記録をほぼ 3 日間更新しようとしてきましたが、インターネット中を探し回りましたが、私を助けるものは何も見つかりませんでした。すべての解決策を試しましたが、何も見つかりませんでした。

レコードを更新したいのですが、フォームは と呼ばれsearch form、テーブルは 8 列で構成されておりstudent_id、 は自動番号であるため、混乱しませんでした。

これは私が思いついた最後のものであり、まだ機能していませんexecutenonquery()。ボタンを押すと、が強調表示され、エラーメッセージが表示されますno values where given to one or more required parameters...

Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Anton\Desktop\LoginDatabase\Users.mdb")
        con.Open()
       sql = "update salary set [empname]=?,[department]=?,[date1]=?, [accname]= ?,[accnumber]=?,[backname]=?,[rate]=?,[house]=?,[electricity]=?,[travel]=?, [hardship]= ?,[health]=?,[nhif]=?,[nssf]=?,[insurence]=?,[loan]=?,[welfare]=? where empno = ?"
    Dim cmd As New OleDb.OleDbCommand(sql, con)

    cmd.Parameters.AddWithValue("@empname", TextBox2.Text)
    cmd.Parameters.AddWithValue("@department", TextBox3.Text)
    cmd.Parameters.AddWithValue("@date1", DateTimePicker1.Value)
    cmd.Parameters.AddWithValue("@accname", TextBox4.Text)
    cmd.Parameters.AddWithValue("@accnumber", TextBox5.Text)
    cmd.Parameters.AddWithValue("@bankname", TextBox6.Text)
    cmd.Parameters.AddWithValue("@rate", TextBox7.Text)
    cmd.Parameters.AddWithValue("@house", TextBox8.Text)
    cmd.Parameters.AddWithValue("@electricity", TextBox9.Text)
    cmd.Parameters.AddWithValue("@travel", TextBox10.Text)
    cmd.Parameters.AddWithValue("@hardship", TextBox11.Text)
    cmd.Parameters.AddWithValue("@health", TextBox12.Text)
    cmd.Parameters.AddWithValue("@nhif", TextBox13.Text)
    cmd.Parameters.AddWithValue("@nssf", TextBox14.Text)
    cmd.Parameters.AddWithValue("@insurence", TextBox15.Text)
    cmd.Parameters.AddWithValue("@loan", TextBox16.Text)
    cmd.Parameters.AddWithValue("@welfare", TextBox17.Text)
    cmd.Parameters.AddWithValue("@empno", TextBox1.Text)
    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        MsgBox("updated")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
4

1 に答える 1

1

あなたのバグは、SQL ステートメントで BankName のスペルを間違えたことです。「[銀行名]=?」を使用してください。

ExecuteNonQuery メソッドは、影響を受けたレコードの数を示す整数を返すことを忘れないでください。ID がテーブルに見つからない場合、ID は更新されず、エラーにもならないため、「更新されました」というメッセージ ボックスが常に正しいとは限りません。

ただし、次のように、フォームを置き換えて Visual Studio のネイティブ関数を使用する方がはるかに簡単です。

  1. サーバー エクスプローラーを開き、[データベースに接続] をクリックして MDB ファイルに接続します。
  2. メニューから[データ] > [データ ソースの表示] を選択します。[新しいデータ ソースの追加] ボタンをクリックします。
  3. [データ ソース] ペインから [新しいデータ ソースの追加] を使用し、[データベース]、[データセット] の順に選択して、ウィザードを終了し、[給与] テーブルを選択します。データセットが作成され、プロジェクトに配置され、[データ ソース] ペインに表示されます。
  4. [データ ソース] ウィンドウを閉じずに、新しい空白のフォームを作成すると、デザイン ビューで開きます。
  5. テーブル名「salary」ノードをクリックし、コンボボックスをドロップダウンしてDetailsを選択します。
  6. テーブルを展開し、同じ方法で date1 列をドロップダウンして、DateTimePickerコントロールが使用されていることを確認します。
  7. Salary テーブルを [データ ソース]ペインから新しい空白のフォームにドラッグします。

ナビゲーション バーのあるフォームが目の前に表示されます。データベースの名前で新しい DataSet が作成されます。

これは、以前の MS Access ユーザーにとってはるかに直感的なフォームであり、上記の質問のように手動で Insert ステートメントを作成する必要はありません。

于 2013-09-25T22:52:34.357 に答える