Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2017, 10:35   #1
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию Занесение данных из одной таблицы в другую

БД Access. Нужно занести из 2 таблицы в 1 значения сумм столбца в соответствии с условием.

Код:
CommandText = "UPDATE Table1 Set [Жидкий вес отливок] = SUM(Table2.[Общий жидкий вес]) Where Table2.[Номер плавки] = [Номер плавки] Group By Table2.[Номер плавки]";
Возникает ошибка: "Пропущен символ ";" в конце инструкции SQL"

Смотрел примеры использования функции SUM в запросах, но не нашёл ни 1 с использованием в запросе UPDATE.

Последний раз редактировалось Grinvel; 05.11.2017 в 12:05.
Grinvel вне форума Ответить с цитированием
Старый 05.11.2017, 11:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

И что твое Table2 означает в запросе? Так пробуй:
Код:
UPDATE Table1
  INNER JOIN (SELECT [Номер плавки], SUM([Общий жидкий вес]) Вес FROM Table2 GROUP BY [Номер плавки]) T2 ON T2.[Номер плавки] = Table1.[Номер плавки]
SET [Жидкий вес отливок]=T2.Вес
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2017, 12:04   #3
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию

что из себя представляет "Вес"? Поле, значение?
Grinvel вне форума Ответить с цитированием
Старый 05.11.2017, 12:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Поле конечно, синоним посчитанной суммы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2017, 12:13   #5
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию

не совсем понял, куда записывается сумма, поля для её хранения нет в таблицах
на участке запроса "SUM([Общий жидкий вес]) Вес" возникает ошибка синтаксиса
Grinvel вне форума Ответить с цитированием
Старый 05.11.2017, 12:23   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
не совсем понял, куда записывается сумма, поля для её хранения нет в таблицах
Записывается во временную таблицу в памяти или в базе, как и результат любого вложенного запроса.
Цитата:
на участке запроса "SUM([Общий жидкий вес]) Вес" возникает ошибка синтаксиса
Сделай AS Вес и для вложенного запроса AS T2. Возможно для access нельзя опускать слово as, не помню.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2017, 12:57   #7
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию

Код:
CommandText = "UPDATE Table1 " +
                           "INNER JOIN (SELECT [Номер плавки], SUM([Общий жидкий вес]) AS Вес FROM Table2 GROUP BY [Номер плавки]) AS T2 ON T2.[Номер плавки] = Table1.[Номер плавки] " +
                            "SET [Жидкий вес отливок] = T2.Вес";
"Несоответствие типа в выражении"

Типы полей числовые. Может ли возникать ошибка из-за вложенного запроса?

Открытие соединений и обработка запроса происходит в отдельной процедуре.
Код:
private void ConnectPlav(string CommText, Dictionary<string, string> bdParam, bool chGrid)  //процедура выполнения запросов к БД карт плавок
        {
            CommandText = CommText;
            OleDbConnection conn = new OleDbConnection(ConnectionStringPlav);       
            conn.Open();
            OleDbCommand MyCommand = new OleDbCommand();                        
            MyCommand.Connection = conn;
            MyCommand.CommandText = CommandText;
            foreach (var param in bdParam)                                    
            {
                MyCommand.Parameters.AddWithValue(param.Key, param.Value);
            }
            if (CommandText.Contains("UPDATE") || CommandText.Contains("DELETE") || CommandText.Contains("INSERT"))
            {
                MyCommand.ExecuteNonQuery();                                   
            }
            else
            {
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter();          
                dataAdapter.SelectCommand = MyCommand;
                DataSet ds = new DataSet();                                    
                dataAdapter.Fill(ds);
                if (chGrid)
                    GridNumPlav.DataSource = ds.Tables[0].DefaultView; 
                else
                    GridDetInPlav.DataSource = ds.Tables[0].DefaultView;
            }
            conn.Close(); 
        }
Насколько я понял, при вложенных запросах, в первую очередь обрабатываются самые глубокие. Тогда на какой блок нужно отправлять запрос с вложениями: обработки update- или select-запросов?
Grinvel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных из одной таблицы в другую с изменением формата отображения данных Tsvetulya Microsoft Office Excel 4 06.07.2016 16:30
перенос данных из одной таблицы в другую jawa250t БД в Delphi 1 09.03.2013 14:32
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Копирование данных из одной таблицы в другую Arega Microsoft Office Access 0 11.07.2012 17:01
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57