Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 26

Запрос INSERT INTO с использованием INNER JOIN

06.06.2022, 13:15. Показов 834. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте, необходимо написать запрос на добавление новой записи в datagrid. (Работаю с БД Access)

Код следующий (Сам вопрос в конце сообщения):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 if (textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "" || richTextBox1.Text == "" || richTextBox2.Text == "")
                {
                    MessageBox.Show("Введены не все данные!", "Ошибка");
                    button_newRow.Enabled = false;
                    return;
                }
 
                dataGridView1.SelectedRows[0].Cells[0].Value = textBox3.Text;
                dataGridView1.SelectedRows[0].Cells[1].Value = textBox4.Text;
                dataGridView1.SelectedRows[0].Cells[2].Value = textBox5.Text;
                dataGridView1.SelectedRows[0].Cells[3].Value = richTextBox1.Text;
                dataGridView1.SelectedRows[0].Cells[4].Value = richTextBox2.Text;
                
 
                string Column1 = dataGridView1.Rows[index].Cells[0].Value.ToString();
                string Column2 = dataGridView1.Rows[index].Cells[1].Value.ToString();
                string Column3 = dataGridView1.Rows[index].Cells[2].Value.ToString();
                string Column4 = dataGridView1.Rows[index].Cells[3].Value.ToString();
                string Column5 = dataGridView1.Rows[index].Cells[4].Value.ToString();
 
 
                string query = $"INSERT INTO [Machine data] VALUES ({Column1},'{Column2}','{Column3}','{Column4}','{Column5}') SELECT [Machine data].*, [Machine type].Наименование FROM [Machine type] INNER JOIN [Machine data] ON [Machine data].[Тип станка] = [Machine type].[Код типа станка]";
                OleDbCommand dbCommand = new OleDbCommand(query, dbConnection);
 
                try
                {
                    if (dbCommand.ExecuteNonQuery() != 1)
                        MessageBox.Show("Ошибка выполнения запроса", "Ошибка");
                    else
                        
                    MessageBox.Show("Данные успешно добавлены", "Успех");
                        dataGridView1_CellClick(dataGridView1, new DataGridViewCellEventArgs(0, 0));
                        button_cancel.Enabled = false;
                        textBox3.ReadOnly = true; textBox4.ReadOnly = true; textBox5.ReadOnly = true; textBox6.ReadOnly = true;
                        richTextBox1.ReadOnly = true; richTextBox2.ReadOnly = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка:" + ex);
                }
В таблице вместо кода ключа (цифры) у меня отображается текст (так и надо), достиг этого следующим способом (эта часть кода находится в другом месте):

SQL
1
string query = "SELECT [Machine data].*, [Machine type].Наименование FROM [Machine type] INNER JOIN [Machine data] ON [Machine data].[Тип станка] = [Machine type].[Код типа станка]";
Оно меняет цифры на слова. Но как сделать запрос, чтобы при вводе текста в соответствующее поле textbox, оно понимало текст, и соответственно в таблицу (datagrid) вносился не ключ (цифра), а текст (Конечно, если существует такая запись с соответствующим ей ключом)
Не знаю как еще корректней сформулировать вопрос. В данный момент возникает ошибка, что пропущен символ ; в запросе SQL. Погуглил. Попытался исправить. Не получается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2022, 13:15
Ответы с готовыми решениями:

Как переписать запрос (с использованием inner join или left/right outer join)?
Как можно написать этот запрос с помощью inner join или left/right outer join. select (Select taskName from task where...

Не работает запрос INSERT с LEFT JOIN
Здравствуйте, у меня есть две таблицы tovari -id -tovar -client_id Clients -id -name Мне нужно, чтобы при запросе инсерт ...

Запрос с использованием JOIN-ов
Добрый день! Имеются 3 таблицы: Таблица1 N Name 2 Рога и копыта Таблица2 N Sch System 2 ...

7
 Аватар для Andrey-MSK
3320 / 2207 / 387
Регистрация: 14.08.2018
Сообщений: 7,431
Записей в блоге: 4
06.06.2022, 13:33
rreskey, По правилам, если мне не изменяет память, то запрос делается так
SQL
1
2
3
4
INSERT INTO MyTable(Field01, Field02, Field03, Field04)
SELECT a.MyField01, a.MyField02, b.MyField03, b.MyField04
FROM MyTable01 a INNER JOIN
MyTable02 b ON a.ID_MyTable01 = b.ID_MyTable02
То бишь объявление количества полей для вставки должно быть равно количеству полей для выборки. Все поля должны быть проименованы, а не использовать знак *.
1
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 26
06.06.2022, 13:46  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
то запрос делается так
Убрал знак *
Получил следующую конструкцию:
SQL
1
string query = $"INSERT INTO [Machine data] VALUES ({Column1},'{Column2}','{Column3}','{Column4}','{Column5}') SELECT [Machine data]([Код],[Тип станка], [Модель], [Характеристики], [Информация о станке]), [Machine type].Наименование FROM [Machine type] INNER JOIN [Machine data] ON [Machine data].[Тип станка] = [Machine type].[Код типа станка]";
Всё равно ругается и выдаёт ошибку, что пропущен символ ; в конструкции SQL.
Не пойму, что делаю не так
0
 Аватар для Andrey-MSK
3320 / 2207 / 387
Регистрация: 14.08.2018
Сообщений: 7,431
Записей в блоге: 4
06.06.2022, 13:54
rreskey, Ну поставьте в конце запроса этот знак. Для SQL это символ окончания команды.
[Machine type].[Код типа станка];";

Добавлено через 50 секунд
И вот еще, а Access точно такой запрос поддерживает? Вы пробовали там его выполнить?
0
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 26
06.06.2022, 13:54  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Ну поставьте в конце запроса этот знак
Пробовал. И пробовал вставлять этот знак в других частях выражения - не помогает.

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
И вот еще, а Access точно такой запрос поддерживает? Вы пробовали там его выполнить?
Он смог обработать
SQL
1
string query = "SELECT [Machine data].*, [Machine type].Наименование FROM [Machine type] INNER JOIN [Machine data] ON [Machine data].[Тип станка] = [Machine type].[Код типа станка]";
Поэтому сделал вывод, что access поддерживает такого рода запросы. А если не поддерживает, то тогда я вообще не знаю как реализовать то, что мне нужно
0
 Аватар для Andrey-MSK
3320 / 2207 / 387
Регистрация: 14.08.2018
Сообщений: 7,431
Записей в блоге: 4
06.06.2022, 13:55
Цитата Сообщение от rreskey Посмотреть сообщение
SELECT [Machine data]([Код],[Тип станка], [Модель], [Характеристики], [Информация о станке]), [Machine type].Наименование
Так стоп, а это что за SELECT такой? Кто вас такому научил? Первый раз такое вижу...
0
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 26
06.06.2022, 13:59  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Так стоп, а это что за SELECT такой?
Убрал * и попробовал в скобках прописать имена (исходя из вашего примера в первом сообщении) - я что-то напутал?
0
 Аватар для Andrey-MSK
3320 / 2207 / 387
Регистрация: 14.08.2018
Сообщений: 7,431
Записей в блоге: 4
06.06.2022, 14:06
rreskey, Сравните своё и то что я вам написал...

Добавлено через 57 секунд
Инструкция INSERT INTO (Microsoft Access SQL)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2022, 14:06
Помогаю со студенческими работами здесь

Запрос к БД с использованием LEFT JOIN
Добрый день дорогие эксперты, профессионалы и любители. Помогите вкурить как сделать правильно, или как сделать что б вообще работало. ...

SQL запрос с использованием JOIN
Здравствуйте! Есть три таблицы person, dept, post. dept и post имеют внешние ключи в таблице person. Подскажите, пожалуйста как написать...

Переписать запрос с использованием Join
Здравствуйте, ломаю голову, не могу переписать запрос. Нужно рабочий запрос, но с использованием JOIN. SELECT manager, count(empl_num)...

MySQL Запрос с использованием SUM, JOIN
Доброго времени суток, товарищи! Есть две таблицы: 1) Workers (сотрудники) (worker_code, surname, first_name, middle_name, post,...

Запрос на обновление данных с использованием Inner Join
Кто подскажет как сделать запрос на обновление данных с использованием конструкции Inner Join Были прощупаны такие варианты Update Table1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru