【问题标题】:write an Access query have more than 1 SELECT statement编写一个 Access 查询有超过 1 个 SELECT 语句
【发布时间】:2013-04-20 16:44:56
【问题描述】:

我有一个包含超过 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) 并将其值设置为现金流表中的AuthorIncomes

2- 为所有员工选择 Sum(DailyIncome) 并将其值设置为现金流表中的EmployeesIncomes

3- 为在选定日期售出的所有图书选择 Sum(BuyPrice),并将其值设置为现金流表中的 BooksBuyPrice

4- 在 CashFlow 表中将用户 OpeningAmount 的值设置为 OpeningAmount

5- 在 CashFlow 表中将用户 ClosingAmount 的值设置为 ClosingAmount

6- DailyResult 字段必须等于 ((ClosingAmount - OpeningAmount - AuthorIncomes - EmployeesIncomes - BooksBuyPrice)

然后我必须在 CashFlow 表中插入一条具有上述值的新记录。

我该怎么做?

注意:我的应用程序是 Visual Studio 2010 下连接到 Access 2007 数据库的 C# .NET 应用程序。

【问题讨论】:

    标签: ms-access ms-access-2007


    【解决方案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 中出现的顺序指定它们。 (参数名称被忽略了,这就是为什么我没有在这里使用它们的原因,尽管对于具有大量参数的查询,名称有时仍然可以帮助我们人类保持直截了当。)

    【讨论】:

    • 我需要在访问中编写一个查询来完成所有这些工作,因为在 sql 中我可以声明变量并为其设置任何值然后我使用这个变量。我知道如何通过 c# 代码做到这一点,我需要访问代码?
    • @danny-london 为什么必须在一条 SQL 语句中完成所有这些工作?您已经说过您正在使用 C# 应用程序,那么为什么要让事情变得更复杂呢?这是[标签:作业]?
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2021-11-09
    相关资源
    最近更新 更多