![]() |
|
![]() ![]() ![]() |
|
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Здраствуйте.
![]() Помогите пожалуйста с такой проблемой. ![]() Есть обработанный файл *.xls с 4-мя листами на которых нyжная информация. Обработанный - значит в таком виде, как его надо импортировать в базу данных через Query. ![]() var E, WorkBook, Sheet : Variant; //приложение Excel, книга, лист. Workbook:=E.Workbooks.Open(OpenDialog1.FileName); ![]() Каким образом можно загнать данные из диапазона ячеек этого файла *.xls, например А1[u]:G5, в таблицу DBGrid либо через Query либо через Table. ![]() В идеале надо получить данные с листа "Лист1" файла *.xls в таблице DBGrid !!! Через импорт в Access или конвертация в *.dbf нельзя делать! Нужно напрямую, либо чтобы все поверили, что это напрмую: Excel->DBGrid. Есть какие-нибудь варианты? ![]() Может например кто нить знает как считать по строкам и законять в DbGrid? ![]() Заранее спасибо. |
|||
|
||||
offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Это всегда пожалуйста
у ADOTable: ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\твой_файл.XLS;Extended Properties="Excel 8.0"; TableName имя нужного листа в квадратных скобках со знаком $. т.е. если у тебя имя листа Enot то в поле TableName должно быть [Enot$] ![]() Ну а дальше как обычно, через DataSource к DBGrid ![]() Это сообщение отредактировал(а) kirilllius - 4.9.2005, 22:20 |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
5 баллов! , спасибо прибольшое, сам почему то не догадался!!!!
![]() ![]() |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Опять ошибка!
На форме есть компоненты: ADOTable1, DataSource1, ADOConnection1, DBGrid1 связанные между собой. У ADOConnection1 стоит СonnectionString такая: Provider=MSDASQL;Persist Security Info=False;Extended Properties="DBQ=D:\filename.xls;DefaultDir=D:\;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;FIL=excel 8.0;FILEDSN=D:\filename.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" Хотя я пробовал менять провайдера, на OLEDB 4.0, один и тот же эффект! При попытке соединения компонента ADOTable1 (Active:=true) выкидывается сообщение: ///"[Microsoft][Драйвер ODBC]Ошибка сиснтаксиса в предложении from"/// В чем может быть проблема? |
|||
|
||||
offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
А ты правильно указал свойство TableName = [Лист1$], а то у меня все работает, то, что ты дал СonnectionString
а попробуй так Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\filename.xls;Extended Properties="Excel 8.0"; |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Короче видимо это были глюки какие то, просто перезапустил Delphi и все заработало как часы.
![]() ![]() Каким образом можно связать компоненты ADOQuery1 и Query1? ![]() Объясню: это надо для импорта в источник ODBC другую базу уже. Источник данных: ADOQuery1 (DBGrid1) -> Пункт назначения данных Query1 (DBGrid1 - база, зарегистрированная в BDE) Насколько знаю BatchMove вяжет только Query с Query. ![]() И еще вопрос: метод GetTableNames() получает имена таблиц из базы данных, зарегистрированной в BDE, а как дело обстоит у ADO? Как считать имена всех листов файла EXCEL? ![]() Спасибо. ![]() |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Вопрос № 2 отменяется, считал поля и имена всех листов.
Но проблема с преброской из ADOQuery в Query базу BDE стоит до сих пор. ![]() |
|||
|
||||
offline |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Можно сохранить результаты запроса в таблицу и сделать запрос уже к ней Читал такое, но сам не пробовал ![]()
т.ч. есть над чем подумать ![]() Это сообщение отредактировал(а) kirilllius - 5.9.2005, 21:35 |
||||
|
|||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Попробую че нить придумать, но идея у меня была такая, поглядим что получится из этого.
![]() |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Вот как надо, нашел способо проще, Надо было сформировать динамический список, теперь попробую считать этот список и засунуть в Query. Это конечно не лучший способ но должен быть рабочим.
Есть другие варианты? Сохранять какие то файлы что то не хочется... while not ADOQuery1.Eof //Öèêë, ïîêà ADOQuery1 íå ïóñò do begin TempList.Add(ADOQuery1.FieldByName('F1').AsString); ADOQuery1.Next(); end; ADOQuery1.Active:=true; ADOQuery1.First; while not ADOQuery1.Eof do begin TempList.Add(ADOQuery1.FieldByName('F1').AsString); ADOQuery1.Next(); end; ADOQuery1.Active:=true; ADOQuery1.First; |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Блин, так не катит. Создал список TempList:TStrings загнал туда все поля ("F1,F2...") теперь все таки не могу перегнать из списка назад в Query для загрузки в базу данных через BDE.
![]() Need HELP!!! ![]() ![]() ![]() Каким образом можно связать компоненты ADOQuery1 и Query1? smile
|
|||
|
||||
offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Ну сделай это через промежуточную таблицу. Если у тебя структура заранее известная, так в чем проблема. Выгрузи туда данные из ADOQuery1, а затем подай на Query1 эту таблицу. После выполнения запросов очисть таблицу. Вот и все.
|
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
![]() ![]() Я пробовал выгружать данные из Query в файл *.mdb, зарегистрированный в BDE. Структура заранее известна (точнее будет известна после обработки, но это мелочи). Добавлено @ 08:47 Что может выступать в роли промежуточной таблицы? И каким образом их туда выгрузить, а потом загрузить уже в Query? |
|||
|
||||
offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Привет!
Создай заранее фай таблицы с нужными полями (хотя это можно сделать програмно, но если у тебя структура постоянна, то создай заранее, что бы не тратилось время на это в программе). А передать данные можно например используя цикл пробежаться по запросу с первой до последней записи и перенести их в таблицу. или использовать компонент BatchMove предназначен для групповых операций переноса данных из одного набора в другой (но с ним я не работал). |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Привет.
BatchMove работает тока с Query, а об ADO он не слышал никогда насколько я знаю. Я тут подумал: может совсе не иcпользовать никакой Query: мне надо передать данные в базу в ОDBC прям из ADOQuery, это можно сделать сразу? В MSDN лазил так ничего и не нашел толкового. Зачем создавать какие то промежуточные таблицы? К тому же у меня 4 листа в файле excel, которые надо подгузить в ODBC (База на оракл или Access). Я с ADO просто не очень разобрался пока.
Thank`s. |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Не мог бы ты поконкретнее объяснить как импортировать данные в базу на оракле, хотя с выводом их в файл все просто, только вот жалко, что ADOQuery понимает только 2 формата всего *.xml и *.adt
![]()
Я почему то так и не могу понять саму стратегию переноса этих данных в базу на оракле. ![]() Ведь Query - это таблица просмотра данных, кстати она не понимает методы LoadFromFile() насколько знаю. Он работает только с BDE. |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Было бы шикарно написать что то типа:
![]() Но к сожалению компьютер он же дурак и не понимает, что ему говорят, он тока свои несовершенные коды воспринимает. ![]() |
|||
|
||||
offline |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
так я не понял, ты от этого отказался? Я работал только с Аксесом там можно сделать так
или
Это сообщение отредактировал(а) kirilllius - 8.9.2005, 19:43 |
||||||
|
|||||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Спасибо за дельные советы.
![]() ![]() Еще раз спасибо. ![]() |
|||
|
||||
Bes |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
А что вместо вот этого
ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\твой_файл.XLS;Extended Properties="Excel 8.0"; надо писать чтобы так же работать с DBF файлами? Спасибо |
|||
|
||||
unter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.8.2005 Репутация: нет Всего: нет |
Bes
Здесь все просто, ты можешь скормить ему любой файл: s:= OpenDialog1.FileName; ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + s + ';Extended Properties=Excel 8.0;Persist Security Info=False'; Либо второй вариант, не использовать ADO а сделать напрямую через Query. Для этого просто зарегистрируй базу в ODBC и обращайся к ней через BDE. |
|||
|
||||
Bes |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
Не.. мне через АДО удобнее тем более что такой вариант не требует предварительной установки БДЕ на рабочую машину.
Добавлено @ 08:36 Фигу! "Внешняя таблица не имеет предполагаемый формат". - не работает!!! |
|||
|
||||
offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
может что поможет ![]() |
|||
|
||||
Bes |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
Во, спасибо.
|
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
а причём здеся кверя??? или кверя или доступ через COM. Короче, парни не парьтесь а воспользуйтесь поиском в этой теме форума, или идите в FAQ, или качайте DRKB и будет вам счастье |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |