19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
1

Создание листа в Excel через ADOQuery

17.05.2012, 11:43. Показов 4383. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать (добавить) новый лист в Excel через ADOQuery???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2012, 11:43
Ответы с готовыми решениями:

Вывод отчета из Delphi в Excel через ADOQuery
Ребятки, помогите пожалуйста, может я тупой просто, но нужно вывести отчет из Delphi в Excel из...

Как задать соответствие одних значений, одного листа Excel, значениям другого листа Excel
Есть лист Excel ,значения в нем постоянны и находятся на одном месте (в одном столбце и в одной...

Создание файла из листа Excel
Возникла необходимость создавать файлы с разными названиями из шаблонного листа. Знаю как это...

Создание листа в рабочей книге Excel
Мне надо экспортировать данные из запроса в один экселевский файл, причём каждую запись на новый...

21
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.05.2012, 12:33 2
http://wladm.narod.ru/Borland/excel.html
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 12:55  [ТС] 3
конечно я понимаю, там все прекрасно, но вот только мне щас это не подходит. Т.к. я начал через ADO все делать. А разбирать Ole времени нет

Добавлено через 15 минут
или может у кого-то есть пример как создать лист в существующей книге tests.xls???
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 13:14 4
PodOnoK, хм... Никогда таким извращением не занимался, но думаю, что ничего сложного:


Чтобы использовать только стандартные компоненты давайте попробуем работать с Excel через ADO. Это не самый быстрый и далеко не первый по возможностям метод (DAO работает на порядок быстрее и предоставляет куда больше возможностей), но ADO компоненты входят в стандартную поставку 5 и 6 Дельфи. Итак заходим в Панель управления Windows, идем в свойства ODBC, делаем DSN используя Excel драйвер, не забываем указать в свойствах на файл Excel. Закрываем ODBC, открываем Дельфи. Ставим на форму ADOConnection. Идем в ConnectionString - строим строку подключения - надо выбрать только ODBC провайдер и на следующей вкладке указать сделанный DSN, остальные опции в большинстве случаев можно оставить как есть. Строка получена. Кстати ее можно вообще упростить до вида: "DSN=MyDsn". Теперь вам доступны листы файла как таблицы а весь файл как база данных. Подключаем ADOQuery к ADOConnection. Cоздаем таблицу, т.е. новый лист - путем запуска следующей квери:

SQL
1
2
3
4
5
SQL:
 
    CREATE TABLE MyTable1 (
     Field1 VARCHAR(20),
     Field2 VARCHAR(10)  )
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 13:38  [ТС] 5
Пишет:
Не возможно изменение структуры таблицы MyTable1. База данных доступна только для чтения...
Добавлено через 13 минут
Это называется полез туда не зная куда))
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 13:45 6
PodOnoK,
Цитата Сообщение от PodOnoK Посмотреть сообщение
Это называется полез туда не зная куда))
Разберемся!

Источники данных (ODBC) - выбираете свой источник - настройка - параметры - снимаете галочку с "только чтение".
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 14:37  [ТС] 7
Так, надо все с начала... а то чтот капец полный.
Подключаюсь к эксель так:
C++
1
2
3
ADOConnection2->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID="";Data Source="+
            ExtractFilePath(ParamStr(0)) + "//data//tests.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
        ADOConnection2->Connected=true;
открываю лист так:
C++
1
2
3
4
5
6
7
void __fastcall Tdatabase::Open2Param(AnsiString Param)
{
//откр лист эксель
    ADOQuery2->SQL->Clear();
    ADOQuery2->SQL->Add("Select * From [" + Param +"$]");
    ADOQuery2->Active=true;
}
создать пытался так:
C++
1
2
ADOQuery2->SQL->Add("Create Table MyTable1 (Field1 varchar(20),Field2 varchar(10) INSERT INTO MyTable1 VALUES (sdsd, sdfsdf)");
    ADOQuery2->ExecSQL();
и так:
C++
1
ADOConnection2->Execute("Create Table [MyTable1$] (Field1 varchar(20),Field2 varchar(10)  )");
В первом случае ошибки нет. но листа тож нет.
А во втором случае типо только для чтения говорит...
И ставил режим записи/чтения тож не помогло...
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 15:06 8
PodOnoK,
Цитата Сообщение от PodOnoK Посмотреть сообщение
Provider=Microsoft.Jet.OLEDB.4.0
Так попробуй ODBC, а не Jet.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 15:15  [ТС] 9
Цитата Сообщение от The_Immortal Посмотреть сообщение
Так попробуй ODBC, а не Jet.
а как создать такое подключение?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 15:50 10
PodOnoK, Вы же уже сделали его. Вам осталось только выбрать в билдере из списка провайдеров "Microsoft OLE DB Provider for ODBC Drivers", а не Jet(в настройке ADOConnection). Ну или либо в теле программы прописать данного провайдера на ConnectionString, как Вы делаете.

Понятно или надо заскриншотить?
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 18:03  [ТС] 11
Пишет - слишком длинное название источника данных
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 19:04 12
PodOnoK, чудеса... У меня почему-то все получилось.

Вы для начала создайте ConnectionString через мастер:

1) Выбирайте ADOConnection1.
2) В свойствах щелкаете на "..." в свойстве ConnectionString
3) Build
4) Вкладка "Поставщик данных" - выбираете там "Microsoft OLE DB Provider for ODBC Drivers"
5) Вкладка "Соединение" - "Использовать имя источника данных" - из выпадающего списка выбираете, то что Вы ранее создали.
6) ОК.

Усе.
Потом смотрите, каким образом сформировалась строка (она будет в свойстве ConnectionString) и от нее уже пляшите.
1
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 21:25  [ТС] 13
Мож скинуть эту строку?

Добавлено через 8 минут
Работает только вставка и редактирование полей))) Та вставка и то криво работает. Добавляет черти куда от конца записей. Но вот лист не могу созлать пишет ошибка синтаксиса креатэ

Добавлено через 5 минут
С джетом и это делать не хотело))
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 21:27 14
PodOnoK, у меня вот такая вышла:
C++
1
Provider=MSDASQL.1;Persist Security Info=False;Data Source=new;
Но только я не уверен, как создавать в таком случае динамический Дата Соурс... Там указывается имя собственного источника данных (у меня тут это "new"), который привязан к конкретной БД (в данном случае к файлу xls) - и путь там к этой БД статичный...

Цитата Сообщение от PodOnoK Посмотреть сообщение
Но вот лист не могу созлать пишет ошибка синтаксиса креатэ
Код покажите.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 21:36  [ТС] 15
C++
1
2
ADOQuery2->SQL->Add("Create Table [MyTable1$] (Field1 varchar(20),Field2 varchar(10) INSERT INTO [MyTable1$] VALUES (sdsd, sdfsdf)");
ADOQuery2->ExecSQL();
Пытался так. Но я в SQL таблицы создавать не умею - это первый раз пытаюсь)))
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 21:41 16
PodOnoK,
(Field1 varchar(20),Field2 varchar(10)) - это во-первых
Во-вторых, распределите эти запросы по отдельности.
1
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 21:44  [ТС] 17
MyTable1 - это во вторых и последних
Все работает норм!
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 21:46 18
PodOnoK, ну и замечательно.

Надо как-то решить вопрос с относительным путем к xls...
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
17.05.2012, 21:47  [ТС] 19
C++
1
2
ADOQuery2->SQL->Add("Create Table MyTable1 (Field1 varchar(20),Field2 varchar(10))");
ADOQuery2->ExecSQL();
конечный вариант

Добавлено через 1 минуту
Цитата Сообщение от The_Immortal Посмотреть сообщение
Надо как-то решить вопрос с относительным путем к xls...
Не понял?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2012, 21:53 20
Цитата Сообщение от PodOnoK Посмотреть сообщение
Не понял?
Ну вы же ранее как определяли коннект строку?

C++
1
2
ADOConnection2->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID="";Data Source="+
            ExtractFilePath(ParamStr(0)) + ...
ExtractFilePath(ParamStr(0)) - сейчас это не прокатит, т.к. мы не можем обращаться к конкретному файлу, как в случае с Access (mdb).
0
17.05.2012, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2012, 21:53
Помогаю со студенческими работами здесь

SheetJS создание нового листа (EXCEL)
Нужно создать новый лист в книге(если это возможно), сама книга создаеться так: var ws =...

Excel 2003. Создание шаблона листа
Возможно ли в Excel 2003 создать шаблон не книги, а конкретного ее листа, чтобы можно было в уже...

Работа с Excel. Создание листа в книге по шаблону
Доброго времени суток. Прошу помочь с вопросом: Есть некоторая книга Ecxel из 2-х листов (а и b) с...

Создание второго листа Excel после первого?
Прошу помощи как сделать правильно. Создаю документ Excel, соответствено сразу же вместе с книгой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru