C++ и ACCESS. Пример работы с ACCESS на Windows Forms C++.
Вставка
- Опубліковано 27 лют 2020
- В этом видео найдете руководство как работать с базой из Microsoft Access в Microsoft Visual Studio Windows Forms приложении на c++.
=== Исходники и поддержать канал: ===
boosty.to/fps.fireplanetstudio
=== Отзывы на наши проекты: ===
• VK: topic-146160167_49433477
=== Контакты для заказа проекта: ===
• VK: vladimir_repp
• VK: fps_vladimir
• Telegram: @Vladimir_Repp
• Телефон (смс, WhatsApp, Telegram): 89994402751
• Почта: fireplanetstudio@mail.ru
=== Контакты для партнерства: ===
(В том числе если ищите интересные проекты и дружную команду разработки, см. тему сообщения)
• Тема: Партнерство / В команду Student Dev / В команду Software Dev / В команду Game Dev
• Телефон (смс, WhatsApp, Telegram): 89994402751
• Почта: vladimir_repp97@mail.ru
=== Социальные сети, там будут новые и актуальные новости: ===
• UA-cam: / @fps.fireplanetstudio
• Группа в VK: fps_fireplanetstudio
• Яндекс Дзен: dzen.ru/id/622f7bfd76344e6a51...
• Rutube: rutube.ru/channel/24737236/
• Instagram: @fps.fireplanetstudio
• Boosty: boosty.to/fps.fireplanetstudio
Как вам видео и материал в целом? Есть что изменить, добавить, поправить в подаче материала?
*** Реализованы следующие действия:
1. Загрузка данных
2. Добавление данных
3. Обновление данных
4. Удаление данных
*** Есть такой же пример на языке программирования C#: • C# и ACCESS. Пример ра...
Я уже прилично на ютубе, но впервые оставляю комментарий. Огромное Вам спасибо за данное видео, все понятно, все получилось по вашему примеру и оперативно). Большое спасибо за Вашу работу!
Спасибо, стараемся)
Спасибо, большое. Долгое время мучался с добавлением данных в БД. А вы всё разъяснили и показали в понятном формате
Спасибо огромное! Долго искала и наконец нашла нужный мне материал для курсовой!
pro tip : you can watch series on flixzone. Me and my gf have been using them for watching all kinds of movies lately.
@Jorge Rene yea, have been watching on Flixzone} for months myself :D
Здравствуйте, а у вас на какую тему курсовая
Спасибо что используешь разные элементы и некоторые их свойства в программах, много чего нового благодаря тебе узнал. Было бы конечно еще лучше с формой для добавления новых данных.
Видосы топ, без воды все ясно и понятно. Это однозначно лайк
Спасибо, стараемся
Спасибо за видео! Очень понятно всё объяснено, спасибо большое!
Спасибо большое!
Спасибо тебе огромное!
Я долгое время старался подключить БД, но всё было зря. Благодаря тебе наконец получилось.😄
Cпасибо
лучший
Круто! Могли бы вы рассказать про дизайн формы? Как можно менять стандарты дизайна? На с++ не смог найти достойные библиотеки.
Ths
OleDbDataReader^ dbReader = dbCommand->ExecuteReader();
в этой строке выдает ошибку, что не хватает одного или нескольких параметров, что не так?
еще я хочу выводить ячейки не в dataGridView, а просто в label, подойдет ли следующий код
label1->Text = dbReader.ToString(); ??
Спасибо за объяснение. Но при попытки записи в базу создаётся файл ldb, при этом в базу данные не записываются. В чем может быть проблема?
Очень понятно объяснили, спасибо большое. Но у меня есть вопрос. Мне нужно, что бы я программно (при нажатии на кнопку или как-то по другому) мог варьировать количество столбцов и присваивать им названия (хотя названия не обязательно, можно просто порядковый номер столбца). Вопрос, собственно, как это сделать?
Upd. А, всё таки мне нужны названия столбцов и вопрос: можно ли их менять именно в исходном файле через программу?
Можно попробовать это реализовать так, в обработчике нажатия кнопки по созданию столбцов:
DataGridViewTextBoxColumn^ column = gcnew DataGridViewTextBoxColumn ();
column->Name = “NameColumn”;
dataGridView->Columns->Add(column);
Тогда добавится один столбец с указанными параметрами.
Все что делаем в редакторе, можно сделать через код. Все поля которые указываем, по аналогии с примером Name, можно так же изменить через код.
А можно код?) Не для себя, а для Сашки!
Просто муторно переписывать: String^ connect = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=Data.mdb";
А что если путь соединения с БД ошибку выдаёт? Есть ли какой-то способ подключить всю бд, как в С# допустим?
Подскажите, пытался сделать фильтр по запросу: "SELECT * FROM [table_name] WHERE comp LIKE '*" + textBox1->Text + "*'", в конечном итоге он не находит ни одного совпадения, какую бы я строку не писал, возможно вместо dbComand->ExecuteReader(); нужно использовать что-то другое?
: "Ошибка синтаксиса в инструкции UPDATE."
Постоянно выскакивает такая ошибка, в кнопке ИЗМЕНИТЬ
String^ qwerty_S = "UPDATE [TableStudents] SET Name='"+ Name +"', Surname='"+ Surname +"', Number="+ Number +" WHERE id=" + ID ;
В чём может быть проблема? Пишет, что проблема в синтаксисе...
решил проблему?
Решиль проблему
Почему-то при добавлении записей в таблицу они передаются как DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=7 }
кто-нибудь знает как это исправить?
А как убрать повторную загрузку если нажать два раза на кнопу загузки то и загрузится два раза тоесть есл в бд 2 строки то в таблице проги уже 4
Нужно очистить данные перед загрузкой. Если вывод из бд идёт напрямую в dataGridView, то просто очистить в ней строки
Скажите, а как подключиться к БД с расширением *accdb? К *mdb всё нормально, а здесь не получается.
Вам нужно саму бд открыть и сохранить заново в нужном формате.
указать более новый провайдер
И так, Господа, возился я пол дня с ошибкой типа System.Data.OleDb.OleDbException (0x80040E10). Её решение в том что если вы используете в таблице символы, например как столбец "name", то его надо взять дополнительно в ординарные кавычки '"name"'. Автор не очень понятно объяснил этот момент на 21:21 .
Стоит заметить, есть и моя ошибка потому что не досмотрел до 26:00 , но всё же, думаю, такие вещи надо обговаривать сразу же
в таблице Access 15 полей.
я хочу добавить новые записи только для 4 полей
запрос на добавление написан следующим образом:
String^ query = "INSERT INTO [t_personal] VALUES (" + Код + ", " + Фамилия + ", " + Имя + ", " + Отчество + ", " + кодвзв + ")";
Выдаёт ошибку
System.Data.OleDb.OleDbException: "Отсутствует значение для одного или нескольких требуемых параметров."
Изначально это исключение было создано в этом стеке вызовов:
[Внешний код]
DBvidbir::MyForm::button_add_Click(System::Object^, System::EventArgs^) в MyForm.cpp
[Внешний код]
main(array^) в MyForm.cpp
-= Помогите правильно написать запрос на добавление с учётом указанных выше условий =-
На сколько я знаю, в данную таблицу нельзя вставить данные по не всем полям, можно только добавить данные для всех полей. По крайней мере в этом примере. Вы можете в нужные поля добавить данные, а в остальные добавить какие нибудь константные значений, например «-», «0» или любое другое, которое будет подразумевать пустой значение.
@@FPS.FirePlanetStudio спасибо за Ваш ответ. У меня получилось сделать так как я хотел (добавлять значения только для 4 полей). Проблема была в написании синтаксиса самого запроса. Так что спасибо, Ваш код работает и для моего частного случая.
@@alexkayful Можешь пожалуйста ответить в чем была проблема? У меня сейчас выдает такую же ошибку, я хочу во все поля таблицы записать информацию. Все точно как на видосе описал, но не работает, ошибка как у тебя.
Исключение не обработано!
System.Data.OleDb.OleDbException: "Недопустимое имя файла."
Как решить проблемку?
Возможно, подключить компонент для работы с данными в ссылках.
Подскажите, а что делать если выдает ошибку "Поставщик Microsoft.Jet.OLEDB.4.0 не зарегистрирован на локальном компьютере"?
Нашел как исправить?
@@artemmovishartemmovish6011вместо 4.0 пишешь 12.0.0
У меня возникла ошибка на запрос по обновлению данных. Пишу ID_MEMBER(Такое название у меня в таблице Access), запрос примерно такой ID_MEMBER=' " +id_member(такое название переменной в которой содержится ID пользователя)+ " ' и другие данные которые параллельно обновляю, но почему то он не обновляет. Убираю запрос на обновление ID пользователя он работает, то есть другие данные обновляет. В чём может ошибка?
Именно ID пользователя не обновляется как поле? Возможно у вас стоят соответствующие настройки в БД, либо в чем то другом ошибка, точнее, к сожалению, не могу подсказать, нужно БД и код смотреть
@@FPS.FirePlanetStudio спасибо большое и правда какая то ерунда была в таблице, может из за того что ID_MEMBERS был связан с другой таблицей?
@@FPS.FirePlanetStudio а нет из за того что связаны ни как не влияет на работоспособность
Что делать, если база не подключается, но ошибки не выдает?
Возможно дело в версии базы данных или в неправильном объявлении, или может база пуста, причин может быть несколько. Сложно сказать, из за чего так произошло.
@@FPS.FirePlanetStudio Хех, привет, подтянул я свои знания, там прикол был в том, что в новых версиях подключение происходит несколько иначе
@@frozehbrian_4166 подскажите, пожалуйста, как решили проблему?
@@user-jk7gq8ut1r убери return void
"О окнах" не рассказал, зато "оБ программе" всё ясно. Я в шоке, сколько такие учителя плодят "программистов", которые после первого урока уже создают каналы по программированию, а потом шарятся по настройкам месяцами с поиском кнопки "монетизация".
Вас никто не заставляет смотреть подобные ролики. Лучше дать конструктивные комментарии, чем быть диванным критиком, которых тоже «расплодилось», раз знаете материал лучше.
@@FPS.FirePlanetStudio Ну да, ну да... Диз и в Бан, умник.
@@shapelvm, дело ваше
ахахаха, туповатый ты однако@@shapelvm
Удивительно, уже 2023 год, а таблицу нужно заполнять данными "ручками". Неужели нет визуального элемента (типа DBGrid в Борланде), в котором это реализовано автоматически?
И вообще удивительно, что настолько продуманная концепция организации интерфейса Борланда не получила своего развития и воплощения в современных IDE. Где сейчас этот Борланд?
Можно сделать dataSet, тогда не придется вводить все вручную
чи я щось не розумію це ж СИНТАКСИС с#
выдаёт ошибку синтаксиса в апдейте и удалении, три раза код перенабрал, не могу понять в чем проблема
System::Void aeroport::MyForm2::button_update_Click(System::Object^ sender, System::EventArgs^ e)
{
if(dataGridView1->SelectedRows->Count != 1)
{
MessageBox::Show("Выберете одну строку для добавления");
return;
}
int index = dataGridView1->SelectedRows[0]->Index;
if (dataGridView1->Rows[index]->Cells[0]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[1]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[2]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[3]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[4]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[5]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[6]->Value == nullptr)
{
MessageBox::Show("не все данные введены");
return;
}
String^ kodPass = dataGridView1->Rows[index]->Cells[0]->Value->ToString();
String^ nomer = dataGridView1->Rows[index]->Cells[1]->Value->ToString();
String^ seria = dataGridView1->Rows[index]->Cells[2]->Value->ToString();
String^ surname = dataGridView1->Rows[index]->Cells[3]->Value->ToString();
String^ namepas = dataGridView1->Rows[index]->Cells[4]->Value->ToString();
String^ waypas = dataGridView1->Rows[index]->Cells[5]->Value->ToString();
String^ placepas = dataGridView1->Rows[index]->Cells[6]->Value->ToString();
String^ connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\\zxcursovaya\\itachicpp\\aeroport\\aeroport\\x64\\aeroport.accdb";
OleDbConnection^ dbConnection = gcnew OleDbConnection(connectionString);
dbConnection->Open();
String^ query = "UPDATE [пассажиры] SET Серияпаспорта = " + seria +", Номерпаспорта = "+ nomer +", Фамилия = '"+ surname +"', Имя = '"+ namepas + "', Маршрут '"+ waypas +"', Место " + placepas +" WHERE Кодпассажира = " + kodPass;
OleDbCommand^ dbComand = gcnew OleDbCommand(query, dbConnection);
if (dbComand->ExecuteNonQuery() != 1) {
MessageBox::Show("Ошибка выполнения запроса");
}
else {
MessageBox::Show("Данные изменены!", "Готово!");
}
dbConnection->Close();
return System::Void();
}
Нашёл ошибку?
@@senchasosed2420 нет, не нашел.
@@suicide_kira если оно тебе ещё надо, тыкни меня, я вроде разобрался, и знаю где ошибка
@@senchasosed2420 и где ошибка
@@suicide_kira "UPDATE [пассажиры] SET [Серия паспорта] = " + seria +", [Номер паспорта] = "+ nomer +", Фамилия = '"+ surname +"', Имя = '"+ namepas + "', Маршрут '"+ waypas +"', Место = " + placepas +" WHERE [Код пассажира] = " + kodPass;
Если у тебя в таблице названия столбцов состоят из 2-х слов, то просто бери их в квадратные скобки, после место забыл = поставить
Вот пример моего кода и запроса
String^ NameOw = dataGridView1->Rows[IndexAdd]->Cells[0]->Value->ToString();
String^ Code = dataGridView1->Rows[IndexAdd]->Cells[1]->Value->ToString();
String^ qant = dataGridView1->Rows[IndexAdd]->Cells[2]->Value->ToString();
String^ Sity = dataGridView1->Rows[IndexAdd]->Cells[3]->Value->ToString();
String^ ConnectString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=products.mdb";//Строка для подключения к БД
OleDbConnection^ ConnectToDB = gcnew OleDbConnection(ConnectString);//Строка подключения к БД
ConnectToDB->Open();//Открываем соединение
String^ query = "UPDATE [Поставщик] SET [Количество товара] = " + qant + ", [Имя поставщика] = '"+ NameOw +"', [Город] = '"+ Sity +"' WHERE [Код товара] = " + Code;//Запрос на обновление данных
OleDbCommand^ UPDATECommand = gcnew OleDbCommand(query, ConnectToDB);//Строка подключения, 2 параметра: к какой БД и с каким запросом
Вот пример с удалением
String^ NameOw = dataGridView1->Rows[IndexAdd]->Cells[0]->Value->ToString();
String^ Code = dataGridView1->Rows[IndexAdd]->Cells[1]->Value->ToString();
String^ qant = dataGridView1->Rows[IndexAdd]->Cells[2]->Value->ToString();
String^ Sity = dataGridView1->Rows[IndexAdd]->Cells[3]->Value->ToString();
String^ ConnectString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=products.mdb";//Строка для подключения к БД
OleDbConnection^ ConnectToDB = gcnew OleDbConnection(ConnectString);//Строка подключения к БД
ConnectToDB->Open();//Открываем соединение
String^ query = "DELETE FROM [Поставщик] WHERE [Код товара] = " + Code;//Запрос на удаление данных
OleDbCommand^ DELETECommand = gcnew OleDbCommand(query, ConnectToDB);//Строка подключения, 2 параметра: к какой БД и с каким запросом