1

複数のテーブルを持つ Access データベースがあります。

複数のテーブルから複数の値を選択し、それらを別のテーブルに挿入する必要があります。

例:

Table: CashFlow with Fields(ID, Date, BooksBuyPrice, AuthorIncomes, 
          EmployeesIncomes, OpeningAmount, ClosingAmount, DailyResult)

Table: Books with Fields(ID, Name, AuthorID, BuyPrice, SellPrice, IsSold, SellDate)

Table: Author with Fields(ID, Name, DailyIncome)

Table: Employee with Fields(ID, Name, DailyIncome)

Note: User Must Insert OpeningAmount And ClosingAmount

する必要がある:

1- すべての作成者に対して Sum(DailyIncome) を選択し、その値をAuthorIncomesCashFlow テーブルに設定します。

2- Sum(DailyIncome) For All Employees を選択し、その値をEmployeesIncomesCashFlow テーブルに設定します。

3- 選択した日に販売されたすべての本の合計 (BuyPrice) を選択し、その値をBooksBuyPriceキャッシュフロー テーブルに設定します。

4- ユーザーの値をOpeningAmountCashFlowOpeningAmountテーブルに設定する

5- ユーザーの値をClosingAmountCashFlowClosingAmountテーブルに設定する

6- DailyResult フィールドは ((ClosingAmount - OpeningAmount - AuthorIncomes - EmployeesIncomes - BooksBuyPrice) と等しくなければなりません

次に、上記の値を使用して、CashFlow テーブルに新しいレコードを挿入する必要があります。

どうやってやるの?

注: 私のアプリケーションは、Access 2007 データベースに接続された Visual Studio 2010 の C# .NET アプリケーションです。

4

1 に答える 1

1

さて、いくつかの基本的なタスクをカバーしてから、特定の要件に合わせてコードを具体化できます。

データベースへの接続を開くことから始めます。

var con = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\__tmp\accounting.accdb;");
con.Open();

ここで、すべての作成者の SUM(DailyIncome) を計算し、それを変数に格納します。

var cmd = new System.Data.OleDb.OleDbCommand("SELECT SUM(DailyIncome) FROM Author", con);
decimal SumOfDailyIncomeAuthors = (decimal)cmd.ExecuteScalar();

すべての従業員の Sum(DailyIncome) に対してこれを繰り返すことができます。

Books の SUM(BuyPrice) を計算する方法は基本的に同じですが、SellDate を指定する必要があります。

cmd = new System.Data.OleDb.OleDbCommand("SELECT SUM(BuyPrice) FROM Books WHERE SellDate = ?", con);
cmd.Parameters.AddWithValue("?", new DateTime(2013, 4, 18));
decimal SumOfBuyPrice = (decimal)cmd.ExecuteScalar();

フォームのテキスト ボックスに OpeningAmount と ClosingAmount が既にあるので、残りの計算を行い、[CashFlow] テーブルに新しい行を挿入できます。次のようになります。

cmd = new System.Data.OleDb.OleDbCommand("INSERT INTO CashFlow (AuthorIncomes, BooksBuyPrice, OpeningAmount, ClosingAmount) VALUES (?, ?, ?, ?)", con);
cmd.Parameters.AddWithValue("?", SumOfDailyIncomeAuthors);
cmd.Parameters.AddWithValue("?", SumOfBuyPrice);
cmd.Parameters.AddWithValue("?", txtOpeningAmount.Text);
cmd.Parameters.AddWithValue("?", txtClosingAmount.Text);
cmd.ExecuteNonQuery();

ACE.OLEDB を追加するOleDbCommand.Parameters場合は、 に表示される順序で指定する必要があることに注意してくださいCommandText。(パラメーター名は無視されます。そのため、ここでは使用しませんでしたが、多数のパラメーターを使用するクエリの場合、名前が人間にとって物事をまっすぐに保つのに役立つ場合があります。)

于 2013-04-19T12:03:38.787 に答える