Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37

Не могу вывести БД в Word

05.06.2022, 13:42. Показов 5863. Ответов 8

Студворк — интернет-сервис помощи студентам
Скопировал с методички вывод БД в Word, программа стартует, но когда наживаешь на кнопку экспорта, открывается документ и вылетает ошибка Project Pro.exe raised exception class EOleSysError with message 'Неверный тип переменной'.
Вот сам код
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
int i;
Variant vVarApp;
Variant vVarDocs;
Variant vVarDoc;
Variant vVarParagraphs;
Variant vVarParagraph;
Variant vVarRange ;
Variant vVarTable;
Variant vVarCell;
int kolrow;
int kolcol;
bool fStart = false;
if(!fStart)
{
 try
 {
 vVarApp=CreateOleObject("Word.Application");
 fStart=true;
 }
 catch(...)
 {
  MessageBox (NULL,L"Ошибка при открытии сервера Word",L"Ошибка",MB_OK | MB_ICONWARNING);
 return;
 }
 }
 
vVarApp.OlePropertySet("Visible",true);
vVarApp.OlePropertyGet("Documents").OleProcedure("Add");
vVarDoc= vVarApp.OlePropertyGet("Documents").OleFunction("Item",1);
vVarDoc= vVarApp.OlePropertyGet("Documents").OleFunction("Item",1);
vVarDoc.OleProcedure("Activate");
vVarDoc = vVarApp.OlePropertyGet("ActiveDocument");
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("Orientation",1);
vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",1);
vVarParagraph.OlePropertyGet("Range").OlePropertySet("Text","Ценные бумаги");
vVarParagraph.OlePropertySet("Alignment",1);
kolcol = DBGrid1->DataSource->DataSet->FieldCount;
kolrow = DBGrid1->DataSource->DataSet->RecordCount;
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",2);
vVarParagraph.OlePropertySet("Alignment",0);
vVarRange = vVarParagraph.OlePropertyGet("Range");
vVarDoc.OlePropertyGet("Tables").OleProcedure("Add",vVarRange,
kolrow+1, kolcol,1,1);
vVarTable=vVarDoc.OlePropertyGet("Tables").OleFunction("Item", 1);
for (int j=1;j<=kolcol ;j++)
{
 AnsiString title;
 switch (j) {
 case 0: title = "Код ценной бумаги"; break;
 case 1: title = "Минимальная сумма сделки"; break;
 case 2: title = "Рейтинг"; break;
 case 3: title = "Доходность за прошлый год"; break;
 case 4: title = "Дополнительная информация"; break;
 }
 vVarCell=vVarTable.OleFunction("Cell",1,j);
 vVarCell.OleFunction("Select");
 vVarCell.OlePropertyGet("Range").OlePropertySet("Text", title.c_str());
}
for (DBGrid1->DataSource->DataSet->First();!DBGrid1->DataSource->DataSet->Eof;
DBGrid1->DataSource->DataSet->Next())
{
for (int j=0;j<kolcol;j++)
{
vVarCell=vVarTable.OleFunction("Cell",i+1,j+1);
vVarCell.OleFunction("Select");
AnsiString str;
str = DBGrid1->DataSource->DataSet->
Fields->FieldByNumber(j+1)->AsString;
vVarCell.OlePropertyGet("Range").OlePropertySet("Text", str.c_str());
vVarCell = Unassigned;
}
i++;
}
AnsiString vAsCurDir=GetCurrentDir();
AnsiString vAsCurDir1=vAsCurDir+"\\экспорт Ценные бумаги.doc";
vVarDoc.OleProcedure("SaveAs",vAsCurDir1.c_str());
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2022, 13:42
Ответы с готовыми решениями:

Не могу вывести отчет в MS Word.
Народ! Хелп!) помогите вывести отчет в word. в общем тема такая: у меня на форме отображается информация в datagrid, взятая из таблицы...

Не могу вывести и файла word текст в мемо
Всем привет , подскажите как быть, программа запускается , но при нажатии на кнопку выдает ошибку unit Unit1; {$mode objfpc}{$H+}...

Создать стек из 6 элементов, типы Word+Char, вывести поле Char, если word>100
Доброго времени суток. Помогите пожалуйста решить задание.Вообще не получается!Уже столько всякой информации про стеки перечитал, а толку...

8
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
05.06.2022, 13:50
Ну так запускайте отладчик и смотрите, в каком месте это происходит.
0
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37
05.06.2022, 15:24  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну так запускайте отладчик и смотрите, в каком месте это происходит.
Я понял в какой строке проблема
C++
1
vVarCell.OlePropertyGet("Range").OlePropertySet("Text", str.c_str());
В этой, и кстати в методичке даже про это указано, там написаны 2 способа решения этого
Либо написать так
C++
1
vVarCell.OlePropertyGet("Range").OlePropertySet("Text", WideString (str));
Либо так
C++
1
vVarCell.OlePropertyGet("Range").OlePropertySet("Text",StringToOleStr(str));
Но ни один способ не помог
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
05.06.2022, 15:34
А какие данные попадают в переменную str проверяли?
0
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37
05.06.2022, 15:49  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
А какие данные попадают в переменную str проверяли?
А как это проверить? Я просто не совсем понимаю.
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
05.06.2022, 17:19
C++
1
ShowMessage(str);
хотя бы так, если не умеете отладчиком пользоваться...
0
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37
06.06.2022, 17:35  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
хотя бы так, если не умеете отладчиком пользоваться...
Смотрите, я чутка переделал, оно начало записывать, только записывает 1 стоку в БД, а потом жалуется
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Variant vVarApp, vVarDoc, vVarParagraphs, vVarParagraph, vVarRange;
Variant vVarTable, vVarCell;
int kolrow;
int kolcol;
bool fStart = false;
if (!fStart)
{
    try
    {
        vVarApp = CreateOleObject("Word.Application");
        fStart = true;
        vVarApp.OlePropertySet("Visible", true);
        vVarDoc = vVarApp.OlePropertyGet("Documents");
        vVarDoc.OleProcedure("Add");
        vVarDoc = vVarDoc.OleFunction("Item", 1);
        vVarDoc.OleProcedure("Activate");
        vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("Orientation", 1);
        AnsiString str1 = "Клиенты";
        vVarParagraphs = vVarDoc.OlePropertyGet("Paragraphs");
        vVarParagraphs.OleProcedure("Add");
        vVarParagraph = vVarParagraphs.OleFunction("Item", 1);
        vVarParagraph.OlePropertyGet("Range").OlePropertySet("Text", WideString(str1));
        vVarParagraph.OlePropertySet("Alignment", 1);
        kolcol = DBGrid2->DataSource->DataSet->FieldCount;
        kolrow = DBGrid2->DataSource->DataSet->RecordCount;
        vVarParagraphs.OleProcedure("Add");
        vVarParagraph = vVarParagraphs.OleFunction("Item", 2);
        vVarParagraph.OlePropertySet("Alignment", 0);
        vVarRange = vVarParagraph.OlePropertyGet("Range");
        vVarDoc.OlePropertyGet("Tables").OleProcedure("Add", vVarRange, kolrow + 1, kolcol, 1, 1);
        vVarTable = vVarDoc.OlePropertyGet("Tables").OleFunction("Item", 1);
        int i = 0;
        for (DBGrid2->DataSource->DataSet->First(); !DBGrid2->DataSource->DataSet->Eof; DBGrid2->DataSource->DataSet->Next())
        {
            for (int j = 0; j < kolcol; j++)
            {
                vVarCell = vVarTable.OleFunction("Cell", i + 1, j + 1);
                vVarCell.OleFunction("Select");
                AnsiString str;
                str = DBGrid2->DataSource->DataSet->Fields->FieldByNumber(j + 2)->AsString;
                vVarCell.OlePropertyGet("Range").
                    OlePropertySet("Text", WideString(str));
            }
        }
 
        i = 1;
        for (DBGrid2->DataSource->DataSet->First(); !DBGrid2->DataSource->DataSet->Eof; DBGrid2->DataSource->DataSet->Next())
        {
            for (int j = 0; j < kolcol; j++)
            {
                vVarCell = vVarTable.OleFunction("Cell", i + 1, j + 1);
                vVarCell.OleFunction("Select");
                AnsiString str;
                str = DBGrid2->DataSource->DataSet->Fields->FieldByNumber(j + 1)->AsString;
                vVarCell.OlePropertyGet("Range").
                    OlePropertySet("Text", WideString(str));
            }
            i++;
        }
        AnsiString vAsCurDir = GetCurrentDir();
        AnsiString vAsCurDir1 = vAsCurDir + "\\экспорт Клиенты.doc";
        vVarDoc.OleProcedure("SaveAs", vAsCurDir1.c_str());
    }
    catch (...)
    {
        //MessageBox(0, "Ошибка при открытии сервера Word","Ошибка", MB_OK);
        return;
    }
}
Причем жалуется на эту строку
C++
1
str = DBGrid2->DataSource->DataSet->Fields->FieldByNumber(j + 2)->AsString;
Добавлено через 14 минут
Цитата Сообщение от Summer_ Посмотреть сообщение
Причем жалуется на эту строку
Убрав эту строчку стало лучше, записываются теперь 3 строки, вместо 1. Но все равно после 3 строки ошибка
0
694 / 7032 / 265
Регистрация: 11.08.2016
Сообщений: 3,958
06.06.2022, 18:14
C++
1
str = DBGrid2->DataSource->DataSet->Fields->FieldByNumber(j + 2)->AsString();
0
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37
06.06.2022, 21:17  [ТС]
Цитата Сообщение от Ivandur Посмотреть сообщение
str = DBGrid2->DataSource->DataSet->Fields->FieldByNumber(j + 2)->AsString();
Вот такую ошибку выдает с этой строчкой
[bcc32c Error] Unit2.cpp(190): type 'System::UnicodeString' does not provide a call operator

Добавлено через 2 минуты
Если убрать AsString() заменить на AsString, то запускает, но та же самая ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2022, 21:17
Помогаю со студенческими работами здесь

Создать стек из 6 элементов, типы Word+Char, вывести поле Char, если word>100
Здравствуйте, помогите пожалуйста решить зачачу. Нужно создать стек из 6 элементов, типы Word+Char, вывести поле Char, если word&gt;100 ...

Не могу найти Word 6.0
Дайте, пожалуйста, ссылку, чтобы скачать Word 6.0 Спасибо.

Не могу в VB загрузить Word
Public wrApp As Word.Application Public wrDok As Word.Document Set wrApp = Word.Application Set wrDok =...

Не могу закрыть документ WORD
Всем привет ! Помогите разобраться, не могу закрыть документ и отключится от процессора MSWORD. Мой вариант кодинга--&gt; ...

Не могу открыть файл Word
Казалось бы банальная задача. По нажатию кнопки на форме, открыть уже существующий файл. Выдает ошибку. Где я не прав?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru