0

tblOrderAAからいくつかの行を削除し、tblProInfoから1つの行を削除しようとしています:(画像を見てください)ここに画像の説明を入力してください

これがコードです。私が得るエラーは次のとおりです。

「レコードが削除されました」

        private void DeleteFromDataBase()
        {
            string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
            OleDbConnection myConnection = new OleDbConnection(connectionString);
            string myDeleteQuery ="DELETE tblOrderAA.*, tblProInfo.*"+
" FROM tblProInfo INNER JOIN tblOrderAA ON tblProInfo.proInfoSerialNum = tblOrderAA.orderAASerialPro" +
" WHERE (((tblProInfo.proInfoScienceName)='"+comboBox1.SelectedItem.ToString()+"'))";

            OleDbCommand myCommand = new OleDbCommand(myDeleteQuery);
            myCommand.Connection = myConnection;
            try
            {
                myConnection.Open();
                myCommand.ExecuteNonQuery();
                myCommand.Connection.Close();

                MessageBox.Show("success");
            }
            catch (Exception e)
            {
                MessageBox.Show("error in : \n" + e.ToString());
            }

SELECT**注:**代わりにこのコードを使用するDELETEと、機能します。

4

2 に答える 2

1

私が知っている1つのクエリで複数のテーブルから削除することはできません。カスケード削除がオンになっている場合は、Product テーブルから削除するだけで、注文レコードが自動的に削除されます。そうでない場合は、外部キーを取得して各テーブルから削除するために、次のクエリを実行することをお勧めします。

"SELECT proInfoSerialNum "+
" FROM tblProInfo " +
" WHERE (((tblProInfo.proInfoScienceName)='"+comboBox1.SelectedItem.ToString()+"'))"

(結果を変数に保存します。たとえば、serialNum

// delete the order records first so they are not orphaned
"DELETE tblOrderAA.* "+
" FROM tblOrderAA " +
" WHERE (((tblOrderAA.orderAASerialPro)='"+serialNum.ToString()+"'))"

// Delete the product info
"DELETE tblProInfo.*"+
" FROM tblProInfo " +
" WHERE (((tblProInfo.proInfoSerialNum )='"+serialNum.ToString()+"'))"

これらのクエリを実行するための実際の C# コードは省略していることに注意してください。SQL を提供するだけで、どのように実行するかがわかります。

于 2012-05-15T13:59:24.743 に答える
0

カスケード削除がすでにオンになっている可能性があると思います。クエリのメイン テーブルからのみ削除するか、データベースのカスケードをオフにします。

于 2012-05-15T13:47:54.140 に答える