![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Импорт из данных 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 вытаскивай к себе в программу.
(Правда, судя по твоему посту, я мало чем помог...)