164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636

Работа с OLE (создать документ Access)

27.06.2013, 22:51. Показов 4780. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь создать документ access, но выдаёт ошибку.
C++
1
2
3
4
5
6
vVarApp=CreateOleObject("Access.Application");
   AnsiString vAsCurDir=GetCurrentDir();
AnsiString vAsCurDir1=vAsCurDir+"\\my.mdb";
ShowMessage(vAsCurDir1);
vVarDoc.OleProcedure("SaveAs",vAsCurDir1.c_str());
vVarApp.OleProcedure("Quit");
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2013, 22:51
Ответы с готовыми решениями:

Создать в таблице Access OLE-поле
Здравствуйте. Помогите пожалуйста правильно сформировать запрос. Нужно в access создать OLE-поле. Говорит ошибка синтаксиса при определении...

работа из ASP с OLE-полями ACCESS-a
Народ, проблема следующая: есть база .mdb, в которой один столбец имеет тип 'OLE'. В нем лежат word-овские документы. Нужно создать на...

Создать форму в access, чтобы заполняла базу данных и автоматически формировала документ Word
Добрый день! Необходимо создать форму, которая заполняет таблицу в базе данных и автоматически формирует Word документ(вставляет в...

27
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
28.06.2013, 09:07
А где вы видите тут создание документа? Я вижу создание объекта обслуживающего Access и сохранение документа vVarDoc который взялся невесть откуда. А создание где? И что за ошибка?
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
28.06.2013, 22:01  [ТС]
помогите, как создать базу данных access.я этот код взял из создания Word, и сам переделал немного.но не могу разобраться
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
28.06.2013, 22:49
Цитата Сообщение от mish_k98 Посмотреть сообщение
как создать базу данных
зачем вам этот героизм? пусть она уже будет. с тем количеством таблиц которое вам нужно. и с той структурой таблиц которая вам нужна. ибо забивать все это через OLE скучно - все равно что вместо заполнения шаблона Word каждый раз рисовать его заново программным способом. и сохранять ее особо не нужно - изменения применяются по мере выполнения инструкций - Access в этом плане не Word - там нельзя наворотить и закрыть без сохранения - все вносится в базу сразу же. поэтому просто открывайте базу и модифицируйте. если хотите - в начале копируйте файл. заполнять надеюсь умеете. в VBA это что то вроде

Visual Basic
1
2
3
4
Dim con As New adodb.Connection
Call con.Open("Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ActiveWorkbook.path & "\" & db_file_name & ".accdb;")
 
Call con.Execute("INSERT INTO " & table & " бла бла бла
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
29.06.2013, 19:36  [ТС]
дело в том, что мне просто нужно создать документ access, а потом я буду с ним работать через sql.а таких документов
Цитата Сообщение от vxg Посмотреть сообщение
зачем вам этот героизм? пусть она уже будет. с тем количеством таблиц которое вам нужно. и с той структурой таблиц которая вам нужна.
я не знаю сколько.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
30.06.2013, 12:39
возможно натолкнет на мысль
Создание базы из VBA - нужен совет
особенно читать

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim strDB As String
strDB = 'xxx.mdb'
 
'Create new instance of Microsoft Access.
Set appAccess = CreateObject('Access.Application')
 
'Open database in Microsoft Access window.
appAccess.NewCurrentDatabase strDB
 
'Get Database object variable.
Set dbs = appAccess.CurrentDb
 
'Create new table.
Set tdf1 = dbs.CreateTableDef('MaterialInc')
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
30.06.2013, 19:45  [ТС]
я не знаю как это сделать на c++builder
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
30.06.2013, 21:44
Цитата Сообщение от mish_k98 Посмотреть сообщение
я не знаю как это сделать на c++builder
все тоже самое что и в VBA только заворачивается в OleProcedure и т.п.
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
30.04.2014, 22:35  [ТС]
с созданием базы разобрался.но как ме в ней создать 4 таблицы, а в таблицах несколько полей?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
30.04.2014, 23:16
Создание таблицы с полями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    const int dbInteger = 3;
    const int dbText = 10;
 
    Variant acc = CreateOleObject("Access.Application");
    acc.OleFunction("NewCurrentDatabase", WideString(ExtractFilePath(ParamStr(0)) + "test.mdb"));
    Variant TableDef = acc.OleFunction(WideString("CurrentDb")).OleFunction(WideString("CreateTableDef"), WideString("tblInfo"));
    Variant Fld = TableDef.OleFunction(WideString("CreateField"), WideString("Title"), dbText, 20);
    Variant Fld1 = TableDef.OleFunction(WideString("CreateField"), WideString("Description"), dbText, 200);
    Variant Fld2 = TableDef.OleFunction(WideString("CreateField"), WideString("Index"), dbInteger, 0);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld1);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld2);
    acc.OleFunction(WideString("CurrentDb")).OlePropertyGet(WideString("TableDefs")).
        OleProcedure(WideString("Append"), TableDef);
    acc.OleFunction(WideString("Quit"));
    acc = Unassigned;
Хоть 10 штук... Проверил только что на AccessXP, нормально создается база с табличкой.
1
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
01.05.2014, 10:25  [ТС]
пасибо.оказывается не всё так сложно.но меня интересует, для чего 10-14 строки?

Добавлено через 44 секунды
и что означают эти цифровые параметры?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
01.05.2014, 10:31
10-12 добавляют к таблице ранее созданные поля (они были созданы отдельно, теперь надо их прицепить куда-то, правда?), а 13-14 добавляют саму таблицу (уже с полями) в БД.
Цитата Сообщение от mish_k98 Посмотреть сообщение
что означают эти цифровые параметры?
Посмотри на описание метода CreateField, видишь там Type и Size? Вот Type у меня и задается либо Text либо Integer (соответственно, Text - с размером, для Integer размер не нужен, поэтому там 0)
1
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
01.05.2014, 10:54  [ТС]
я понял.а как мне создать поля типа date и типа float, и за одно как мне флоат вводить туда в формате 0,00
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
01.05.2014, 12:24
C++
1
2
3
4
5
6
7
    const int dbDouble = 7;
    const int dbDate = 8;
 
    Variant Fld3 = TableDef.OleFunction(WideString("CreateField"),
        WideString("Price"), dbDouble, 0);
    Variant Fld4 = TableDef.OleFunction(WideString("CreateField"),
        WideString("Data"), dbDate, 0);
, и точно так же, как остальные поля добавить к TableDef-у... Ну посмотри уже на свойства/методы объекта Field, я ж не могу всю программу за тебя писать...
1
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
02.05.2014, 21:52  [ТС]
а как сделать одно поле типа счётчик, в msdn я такого не нашол. и что означают эти константы, почему они именно такие?

Добавлено через 12 минут
вот мой код для создания двух таблиц,хотя надо 4.но мне выдаёт ошибку, когда я запускаю выполнение этого кода
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
const int dbInteger = 3;
    const int dbText = 10;
    const int dbDouble = 7;
    const int dbDate = 8;
 
 
    Variant acc = CreateOleObject("Access.Application");
    acc.OleFunction("NewCurrentDatabase", WideString(ExtractFilePath(ParamStr(0)) + "sklad_copy.mdb"));
    Variant TableDef = acc.OleFunction(WideString("CurrentDb")).OleFunction(WideString("CreateTableDef"), WideString("приход"));
    Variant Fld = TableDef.OleFunction(WideString("CreateField"), WideString("Товар"), dbText, 30);
    Variant Fld1 = TableDef.OleFunction(WideString("CreateField"), WideString("Количество"), dbInteger, 0);
    Variant Fld2 = TableDef.OleFunction(WideString("CreateField"), WideString("Цена"), dbDouble, 0);
    Variant Fld3 = TableDef.OleFunction(WideString("CreateField"), WideString("Сумма"), dbDouble, 0);
    Variant Fld4 = TableDef.OleFunction(WideString("CreateField"), WideString("Расчет"), dbDouble, 0);
    Variant Fld5 = TableDef.OleFunction(WideString("CreateField"), WideString("Долг"), dbDouble, 0);
    Variant Fld6 = TableDef.OleFunction(WideString("CreateField"), WideString("Дата"), dbDate, 0);
    Variant Fld7 = TableDef.OleFunction(WideString("CreateField"), WideString("Поставщик"), dbText, 25);
    Variant Fld8 = TableDef.OleFunction(WideString("CreateField"), WideString("Код"), dbInteger, 0);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld1);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld2);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld3);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld4);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld5);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld6);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld7);
    TableDef.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld8);
    acc.OleFunction(WideString("CurrentDb")).OlePropertyGet(WideString("TableDefs")).OleProcedure(WideString("Append"), TableDef);
    acc.OleFunction(WideString("Quit"));
 
    Variant TableDef2 = acc.OleFunction(WideString("CurrentDb")).OleFunction(WideString("CreateTableDef"), WideString("Склад"));
    Variant Fld9 = TableDef2.OleFunction(WideString("CreateField"), WideString("Товар"), dbText, 30);
    Variant Fld10 = TableDef2.OleFunction(WideString("CreateField"), WideString("Склад"), dbInteger, 25);
    Variant Fld11 = TableDef2.OleFunction(WideString("CreateField"), WideString("Колличество"), dbInteger, 0);
    Variant Fld12 = TableDef2.OleFunction(WideString("CreateField"), WideString("Цена"), dbDouble, 0);
    Variant Fld13 = TableDef2.OleFunction(WideString("CreateField"), WideString("Сумма"), dbDouble, 0);
    Variant Fld14 = TableDef2.OleFunction(WideString("CreateField"), WideString("Расчет"), dbDouble, 0);
    Variant Fld15 = TableDef2.OleFunction(WideString("CreateField"), WideString("Долг"), dbDouble, 0);
    Variant Fld16 = TableDef2.OleFunction(WideString("CreateField"), WideString("Дата"), dbDate, 0);
    Variant Fld17 = TableDef2.OleFunction(WideString("CreateField"), WideString("Код"), dbInteger, 0);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld9);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld10);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld11);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld12);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld13);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld14);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld15);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld16);
    TableDef2.OlePropertyGet(WideString("Fields")).OleProcedure(WideString("Append"), Fld17);
    acc.OleFunction(WideString("CurrentDb")).OlePropertyGet(WideString("TableDefs")).OleProcedure(WideString("Append"), TableDef2);
 
    acc.OleFunction(WideString("Quit"));
    acc = Unassigned;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
03.05.2014, 00:15
29-ю строку убери, она не нужна, не надо уходить из Access.Application, пока не закончишь создание и привязку всех таблиц. Quit должен быть только в самом конце, после создания всех четырех табличек
Цитата Сообщение от mish_k98 Посмотреть сообщение
что означают эти константы, почему они именно такие?
Открой файл DAO_XP.h, и посмотри:
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
enum class DataTypeEnum
{
  dbBoolean = 1, 
  dbByte = 2, 
  dbInteger = 3, 
  dbLong = 4, 
  dbCurrency = 5, 
  dbSingle = 6, 
  dbDouble = 7, 
  dbDate = 8, 
  dbBinary = 9, 
  dbText = 10, 
  dbLongBinary = 11, 
  dbMemo = 12, 
  dbGUID = 15, 
  dbBigInt = 16, 
  dbVarBinary = 17, 
  dbChar = 18, 
  dbNumeric = 19, 
  dbDecimal = 20, 
  dbFloat = 21, 
  dbTime = 22, 
  dbTimeStamp = 23
};
Можешь пользоваться этими определениями, можешь переопределить их как const int...
Цитата Сообщение от mish_k98 Посмотреть сообщение
как сделать одно поле типа счётчик
C++
1
2
3
4
    // Создать поле типа Long Integer
    Variant Fld1 = TableDef.OleFunction(WideString("CreateField"), WideString("ID"), Dao_xp::DataTypeEnum::dbLong, 0);
    // И выставить ему атрибут "Автоинкрементное поле"
    Fld1.OlePropertySet(WideString("Attributes"), Dao_xp::FieldAttributeEnum::dbAutoIncrField);
Это как раз с использованием готовых Enum-ов, если что - можешь определить константы:
C++
1
2
    const int dbLong = 4;
    const int dbAutoIncrField = 16;
, и использовать их...
1
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
03.05.2014, 10:22  [ТС]
а как сделать, чтобы этот процесс был скрытым, а то у меня появляется постоянно аксес и ждёт пока я закрою, хотя это после того, как я добавил try catch и showmessage в конце создания
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
03.05.2014, 10:28
Ничего не ждет, на долю секунды проскакивает окно Access-а, и тут же исчезает. Как победить это - не знаю.
Цитата Сообщение от mish_k98 Посмотреть сообщение
хотя это после того, как я добавил try catch и showmessage в конце создания
Значит, убери то, что добавил - не будет висеть окно...
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
03.05.2014, 11:58  [ТС]
значит это просто уже билдер виноват...но оно так не должно быть...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
03.05.2014, 12:19
Покажи, где именно ты добавил try/catch и вывод сообщения, я попробую запустить у себя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2014, 12:19
Помогаю со студенческими работами здесь

Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена
OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +...

Как можно запустить текстовый документ без OLE
Я сделал инсталлер и в разделе описание нужно нажать на кнопку описания. Я хочу чтобы с нажатием на эту кнопку открывалось приложение и...

Как узнать открыт ли данный Excel документ в OLE
Здравствуйте. С помощью свойства OlePropertyGet можно подключиться к книге BooknN=BooksnN.OlePropertyGet("Item",numBook); Но...

Как из 1С по средствам Ole в документ Word вложить объект "Лист к
Как из 1С по средствам OLE в документ word вложить объект "Лист книгиExcel"? Если делать из word`а, то через вставку объекта и тип...

Создать документ, текст которого доступен для чтения, если документ открыт при среднем или низком уровне безопасности
доброго времени суток. прошу вашей помощи. суть задачи вот: Создать документ Word, текст которого доступен для чтения только в том...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru