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

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

05.06.2022, 13:42. Показов 5812. Ответов 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
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 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
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
05.06.2022, 15:34
А какие данные попадают в переменную str проверяли?
0
0 / 0 / 0
Регистрация: 31.03.2022
Сообщений: 37
05.06.2022, 15:49  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
А какие данные попадают в переменную str проверяли?
А как это проверить? Я просто не совсем понимаю.
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 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 / 6817 / 265
Регистрация: 11.08.2016
Сообщений: 3,891
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru