Сумма значений 2 столбцов OLEDB ACCESS - PullRequest
0 голосов
/ 15 января 2020

Итак, ребята, я делаю простой проект пожертвования. Мне нужно добавить стоимость таблицы пожертвований к общей стоимости кассира. Я сделал несколько тестов и не смог. Следует приведенному ниже коду.

    private void bntAddDonation_Click(object sender, EventArgs e)
    {
        connection = new OleDbConnection(db);

        try
        {
            connection.Open();

            query = "UPDATE CX SET CX.Valor_Caixa = (SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE DONATION.Id_Caixa = CX.Id_Caixa) FROM Caixa CX";

            cmd = new OleDbCommand(query, connection);

            cmd.ExecuteNonQuery();

            connection.Close();

            MessageBox.Show("Contribuição adicionada com sucesso!");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

ОШИБКА CATCH

Синтаксическая ошибка (отсутствует оператор) в выражении запроса '(ВЫБЕРИТЕ СУММУ (DONATION.Valor_Contribuicao) ОТ СОТРУДНИЧЕСТВА, ПОЖАЛУЙСТА, ОТКУДА. = CX.Id_Caixa) ИЗ CAIXA CX

1 Ответ

2 голосов
/ 15 января 2020

Если я полностью не пропустил лодку на ваших структурах таблицы, ваше заявление об обновлении не работает. Вот снимок экрана с запуском запроса, который вы указали в своем коде, и та же ошибка. NET бросил:

enter image description here

Итак, вот моя мысль ... создайте запрос с нужными итогами в целевой таблице. Если взять буквально то, что у вас есть, это выглядело бы так:

SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;

Я не совсем уверен, почему CAIXA даже необходим, поскольку условие соединения находится в поле Id_Caixa, но для непрерывности я сохранил это там.

Сначала я думал сделать запрос на обновление этого запроса (вроде представления), но он выдал какую-то странную ошибку, и мне пришлось преобразовать приведенный выше запрос в запрос make-table. :

SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao INTO Totals
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;

Таким образом, результирующая таблица называется Totals.

Отсюда простой запрос на обновление должен обновить эти итоги. Обратите внимание, что синтаксис сильно отличается от того, что вы перечислили выше ...

UPDATE CAIXA
INNER JOIN Totals ON CAIXA.Id_Caixa = Totals.Id_Caixa
SET CAIXA.Valor_Caixa = [Totals].[SumOfValor_Contribuicao];

Это сработало для меня, предполагая, что @madreflection верен, и я предполагаю, что это так.

Вы уверены, что это MS Access? Ничто из этого не похоже на Access. Связан ли Access с какой-либо другой внутренней базой данных (потому что если это так, все будет намного проще).

...