Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
1

Привязать файл Word к определенному полю в базе данных

04.01.2016, 02:23. Показов 1654. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос вот в чем. Есть база данных Access в ней есть поле книга, мне надо сделать, чтобы каждой книге принадлежал файл word либо pdf, для прочтения.
Может можно сделать так чтобы файл открывался через функцию
C++
1
 ShellExecute(Handle, L"Open", L"F:\\Курсовой проект\\С++Chainik.pdf", 0, 0, SW_SHOWNORMAL);;
Может знаете как каждой записи присвоить путь в базе данных, заранее спасибо за ответ.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2016, 02:23
Ответы с готовыми решениями:

Как привязать файл .less к определенному файлу .css? (sublime)
Добрый день. Как сделать так, чтобы при редактировании определенного лесс файла менялся только...

Поиск по базе данных - по определенному столбцу
Подскажите как организовать поиск по определенному столбцу базы данных и потом присвоить найденное...

Как Привязать Id К Базе Данных
Помогите пожалуйста!!! Был добавлен новый пользователь с ошибкой, удален полностью и...

Как привязать TreeView к базе данных
Подскажите пожалуйста как привязать treeview к базе данных? Т.е. каждый узел ссылался на...

8
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
04.01.2016, 02:33 2
JekaIodelb, Там все делается через редактор форм, не помню точные название, но вы милейший разделом ошиблись! Ваш вопрос не коем образом не относится к с++
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
04.01.2016, 20:39  [ТС] 3
Я делаю программу через C++Builder XE7. База данных сделана через Access. АРМ Библиотека колледжа. Надо чтобы Администратор мог добавлять книги, а Учащийся мог прочесть их.
Вот код добавление:
C++
1
2
3
4
5
6
7
8
9
10
11
        ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Add("INSERT INTO Книги ([Название книги], [Год издания], [Код_категории], [Код_издательства], [Код_автора], Читать) VALUES (nazk, year, id_kat, id_iz, id_av, read)");
        ADOQuery1->Parameters->ParamByName("nazk")->Value=Edit1->Text;
        ADOQuery1->Parameters->ParamByName("year")->Value=DateTimePicker1->Date;
        ADOQuery1->Parameters->ParamByName("id_kat")->Value=Form3->ADOKategorii->FieldByName("Код_категории")->AsInteger;
        ADOQuery1->Parameters->ParamByName("id_iz")->Value=Form3->ADOIzdan->FieldByName("Код_издательства")->AsInteger;
        ADOQuery1->Parameters->ParamByName("id_av")->Value=Form3->ADOAvtor->FieldByName("Код_автора")->AsInteger;
        ADOQuery1->ExecSQL();
        Form3->ADOKnigi->Close();
        Form3->ADOKnigi->Open();
        ShowMessage("Элемент добавлен.");
мне бы добавить добавление книги, которая будет в папке содержащая сам проект, чтобы каждой записи принадлежала книга. Нашел тему про поле объекта OLE, но не знаю как это реализовать с документом. Тему сюда перенесли, потому что я не написал где делаю и как, извиняюсь!
0
84 / 11 / 7
Регистрация: 10.02.2012
Сообщений: 225
Записей в блоге: 3
05.01.2016, 12:11 4
Привет, делал, что то похожее. Вобщем подскажу, как я делал может поможет. Вобщем у меня была отдельная связанная с авторами таблица, где было поле ссылка, в это поле записывалась ссылка, где находился документ и еще одно отдельное поле название книги, они складывались, так как путь может поменяться и чтобы тебе все починить нужно в БД изменить только месторасположения твоих файлов. Выбираешь в таблице с авторами автора и тебе в другой таблице выберутся все его книги. Щелкнешь по любой и у тебя, как ты писал в начале ShellExecute откроется книга.
Вот хороший сайтик Влада, там все доходчиво написано, как работать с Word и Excel
http://wladm.narod.ru/
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
06.01.2016, 00:04  [ТС] 5
Я уже разобрался, если кому интересно:
Сначала загрузили файл через OpenDialog в базу данных содержащую поле объекта OLE
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    
    ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Add("INSERT INTO Книги ([Название книги], [Год издания], [Код_категории], [Код_издательства], [Код_автора], Читать) VALUES (nazk, year, id_kat, id_iz, id_av, read)");
        ADOQuery1->Parameters->ParamByName("nazk")->Value=Edit1->Text;
        ADOQuery1->Parameters->ParamByName("year")->Value=DateTimePicker1->Date;
        ADOQuery1->Parameters->ParamByName("id_kat")->Value=Form3->ADOKategorii->FieldByName("Код_категории")->AsInteger;
        ADOQuery1->Parameters->ParamByName("id_iz")->Value=Form3->ADOIzdan->FieldByName("Код_издательства")->AsInteger;
        ADOQuery1->Parameters->ParamByName("id_av")->Value=Form3->ADOAvtor->FieldByName("Код_автора")->AsInteger;
        ShowMessage("Выберите литературу");
        if (OpenDialog1->Execute())
        {
          ADOQuery1->Parameters->ParamByName("read")->LoadFromFile(OpenDialog1->FileName,ftBlob);
        }
        ADOQuery1->ExecSQL();
        Form3->ADOKnigi->Close();
        Form3->ADOKnigi->Open();
        ShowMessage("Элемент добавлен.");
Затем сохранили его в другой файл и открыли с помощью ShellExecute:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 ADOQuery1->Close();
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add("SELECT Читать FROM Книги");
 ADOQuery1->Open();
 ADOQuery1->First();
 while(!ADOQuery1->Eof)
 {
    ((TBlobField*)ADOQuery1->FieldByName("Читать"))->SaveToFile("G:\\Курсовой проект\\New.doc");
    ADOQuery1->Next();
 }
 ADOQuery1->ExecSQL();
 Form3->ADOKnigi->Close();
 Form3->ADOKnigi->Open();
 ShellExecute(Handle, L"Open", L"G:\\Курсовой проект\\New.doc", 0, 0, SW_SHOWNORMAL);;
Может кто подскажет, как сделать так, чтобы While не доходил до конца, чтобы я мог выбрать определенную запись? А то открывает только последняя. Спасибо.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
06.01.2016, 03:39 6
Хоть подход и не совсем правильный, но попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ADOQuery1->Close();
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add("SELECT Читать FROM Книги");
 ADOQuery1->Open();
 ADOQuery1->First();
 while(!ADOQuery1->Eof)
 {
    
    if(DBGrid1->SelectedRows->CurrentRowSelected)
  {
    ((TBlobField*)ADOQuery1->FieldByName("Читать"))->SaveToFile("G:\\Курсовой проект\\New.doc");
     break;  
  }
  ADOQuery1->Next(); 
}
 Form3->ADOKnigi->Close();
 Form3->ADOKnigi->Open();
 ShellExecute(Handle, L"Open", L"G:\\Курсовой проект\\New.doc", 0, 0, SW_SHOWNORMAL);
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
10.01.2016, 01:17  [ТС] 7
Все равно открывает последнюю запись, есть пример на проверку имени и пароля, который работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   ADOQueryVhod->Close();
   ADOQueryVhod->SQL->Clear();
   ADOQueryVhod->SQL->Add("SELECT Логин, Пароль, Имя, Фамилия, Отчество, Группа FROM Студенты");
   ADOQueryVhod->Open();
   ADOQueryVhod->First();
  while(!ADOQueryVhod->Eof)
{
   if (Edit1->Text == ADOQueryVhod->FieldByName("Логин")->AsString&&Edit2->Text == ADOQueryVhod->FieldByName("Пароль")->AsInteger)
   {
     Form12->Label1->Caption=ADOQueryVhod->FieldByName("Имя")->AsString;
     Form12->Label2->Caption=ADOQueryVhod->FieldByName("Фамилия")->AsString;
     Form12->Label3->Caption=ADOQueryVhod->FieldByName("Отчество")->AsString;
     Form12->Label4->Caption=ADOQueryVhod->FieldByName("Группа")->AsString;
     Form12->ShowModal();
   }
    ADOQueryVhod->Next();
   }
    ADOQueryVhod->ExecSQL();
    Form3->ADOStudents->Close();
    Form3->ADOStudents->Open();
Он для каждой записи нормально работает, а вот с этим загвостка
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
10.01.2016, 02:21 8
Лучший ответ Сообщение было отмечено JekaIodelb как решение

Решение

JekaIodelb, У тебя здесь код не правильный
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
10.01.2016, 23:35  [ТС] 9
А что не правильно?

Добавлено через 14 минут
Ладно с этим я разберусь, может ты знаешь как сохранить файл, который лежит в BLOB, через SaveDialog? или может надо в DBCellClick, что то написать.

Добавлено через 9 часов 35 минут
Все я разобрался все работает, спасибо огромное пользователю Sasha, код получился вот такой:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm12::DBGrid2CellClick(TColumn *Column)
{
 ADOQuery1->Close();
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add("SELECT Читать FROM Книги");
 ADOQuery1->Open();
 ADOQuery1->First();
 ((TBlobField*)Form3->ADOKnigi->FieldByName("Читать"))->SaveToFile("G:\\Курсовой проект\\New.doc");
 }
0
10.01.2016, 23:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2016, 23:35
Помогаю со студенческими работами здесь

Как привязать Label к базе данных
Нужно, чтобы на label выводилось значение из одного столбца таблицы бд. Как это сделать? В-общем,...

Подскажите, как можно привязать ComboBox к базе данных?
Как привязать ComboBox к базе данных и заполнять его значениями из одного столбца этой базы с...

Поиск в базе данных по полю, допускающее несколько значений
Итак, назрел вопрос, нигде однозначного ответа не нашел. Есть База данных, включающая в себя...

Напишите строку поиска сотрудника в базе данных по полю - номер паспорта
Привет всем. Напишите строку поиска сотрудника в базе данных по полю - номер паспорта


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru