Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Импорт из данных Excel в таблицу DBGrid [D7, WinXP]


Zidane5 ©   (2006-01-31 14:54:00) 

Привет всем!!! Мне нужно твоя помощь. Мне нужно как импортировать данные из Excel в DBGrid.


sniknik   (2006-02-02 08:54:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1138284327&n=1


Bratskiy   (2006-02-02 05:47:00) [2]

Когда делаешь через OLEDB можно наткнутся на две проблемы:

1) Когда собираешь ConnectionString, указываешь поставщика
Microsoft Jet OLE DB 4.0, потом указываешь путь к xls файлу, нажимаешь проверить и получаешь ошибку

Выход:

Вручную дописать в конец ConnectionString такую надпись:
Extended Properties = Excel 8.0

2) Свойство TableName у ADOTable можно заполнить через ObjectInspector,
После этого ставишь свойство Active на true и опять ошибка.

Выход:

Значение свойства TableName надо поместить в [ ]


Shirson   (2006-02-01 15:07:00) [3]

Разумно. Просто я из XL дёргал через ODBC (давно это было), поэтому написал про вариант, который точно знаю.
Хотя, через OLEDB тоже, вроде работал... непомню :)


msguns   (2006-02-01 13:43:00) [4]

Не надо использовать ODBC. OLEDB в руки.


Shirson   (2006-02-01 13:02:00) [5]

>Bratskiy
То в нём зло, что сия вещь выпадает из логики SQL. Как и компоненты хранимых процедур.
Всё делается через T(Ado)Query.

По поводу забора данных из Excel:
Создаёшь коннекцию ODBC к нужному файлу. (пароль можно игнорировать). И обращаешься к этой коннекции из своей программы (я делал через AdoConnection, но можно и напрямую, из Query).
Далее, запросом из Query выбираешь из "таблицы" нужные строки. Если xls-файл не затачивался специально, то таблицей у него считается Sheet, если правильно помню.
(Еще его можно заточить на выборку по запросам. В Excel выбирается регион и ему присваивается имя. После этого, к этому именованному региону можно обращаться как к таблице.)
Привязываешь через датасорс DBGrid к Query и получаешь желаемое.


Bratskiy   (2006-02-01 12:36:00) [6]


> msguns ©   (01.02.06 12:18) [5]

Если можно, то как я понял через
DS:=TDataSet.Create(self);
и. т. д
Но как тогда правильно DataSet к DBGrid прикрутить, чтобы эти абстрактные ошибки не выскакивали.


> Shirson ©   (01.02.06 12:22) [6]

Что в нём злого? И чем добрым лучше пользоваться?


Bratskiy   (2006-02-01 12:35:00) [7]


> msguns ©   (01.02.06 12:18) [5]

Если можно, то как я понял через
DS:=TDataSet.Create(self);
и. т. д
Но как тогда правильно DataSet к DBGrid прикрутить, чтобы эти абстрактные ошибки не выскакивали.


> Shirson ©   (01.02.06 12:22) [6]

Что в нём злого? И чем добрым лучше пользоваться?


Shirson   (2006-02-01 12:22:00) [8]

Excel может выступать как "база данных". И прекрасно всё импортится.
Только вот TTable это зло.


msguns   (2006-02-01 12:18:00) [9]

Можно. НО !
1) В Region не должны входить объединенные ячейки
2) Заставить Эксель интерпретировать ячейки как текстовые
3) и еще кое-что ;)


Bratskiy   (2006-02-01 11:42:00) [10]

Я тоже когда-то пытался сделать такой экспорт. Но что-то затея моя пока так затеей и остаётся. Пробовал:
a) через ODBC.
Там какой-то пароль надо а где его взять, не соображу.
б) Создать DataSet run-time, то есть как-то так:

 DS:=TDataSet.Create(self);

Далее цикл по переменным

Rows := ExcelApp.ActiveSheet.UsedRange.Rows.Count;
Columns := ExcelApp.ActiveSheet.UsedRange.Columns.Count;

В цикле создаются поля

 DS.FieldDefs.Add(st,ftString,0,false);
 DS.FieldDefs[0].CreateField(Ds);

Ещё у меня в цикле значения из Excel к поля (то есть к ячейкам) DataSet'а присваивались

Короче как-то так хотел сделать, но неполучилось. Когда связывал DataSet c DBGrid ошибка выскакивала: "Abstract и что там дальше". Где-то в Internete прочитал что можно вместо DataSet можно аналогично создать TTable, и вроде так должно заработать. Но чтобы создать TTable, надо чтобы была база данных. А зачем мне база, если я просто хочу открыть Excel'евский файл через DBGrid.  

Вобщем всё это дело я забросил.

А сейчас что-то опять заинтересовался. Неужели нельзя никак открыть без всякой базы?


msguns   (2006-02-01 10:36:00) [11]

Грубияны..
А между тем, это был младший братишка Зинеддина Зидана ;)


КиТаЯц   (2006-02-01 08:43:00) [12]


> Shirson ©   (01.02.06 07:20) [1]

:)
Жестоко...

> Zidane5 ©   (31.01.06 14:54)
> данные из Excel в DBGrid.

В tDataSet данные импортировать надо. Отсюда и задумывайся.


Shirson   (2006-02-01 07:20:00) [13]

На плакат времён WWII похоже. И на орешник - тоже.

В ODBC настрой доступ к Excel файлу, и через ADO или BDE вытаскивай к себе в программу.
(Правда, судя по твоему посту, я мало чем помог...)


Наверх

Титульная страница Поиск, карта сайта Написать письмо