Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel&Delphi 
:(
    Опции темы
unter
Дата 4.9.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Здраствуйте. smile
Помогите пожалуйста с такой проблемой. smile
Есть обработанный файл *.xls с 4-мя листами на которых нyжная информация. Обработанный - значит в таком виде, как его надо импортировать в базу данных через Query. smile

var E, WorkBook, Sheet : Variant; //приложение Excel, книга, лист.
Workbook:=E.Workbooks.Open(OpenDialog1.FileName); smile

Каким образом можно загнать данные из диапазона ячеек этого файла *.xls, например А1[u]:G5, в таблицу DBGrid либо через Query либо через Table. smile
В идеале надо получить данные с листа "Лист1" файла *.xls в таблице DBGrid !!!
Через импорт в Access или конвертация в *.dbf нельзя делать! Нужно напрямую, либо чтобы все поверили, что это напрмую: Excel->DBGrid. Есть какие-нибудь варианты? smile
Может например кто нить знает как считать по строкам и законять в DbGrid? smile

Заранее спасибо.
PM MAIL   Вверх
offline
Дата 4.9.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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$] smile

Ну а дальше как обычно, через DataSource к DBGrid

smile

Это сообщение отредактировал(а) kirilllius - 4.9.2005, 22:20
PM MAIL   Вверх
unter
Дата 5.9.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



5 баллов! , спасибо прибольшое, сам почему то не догадался!!!! smile Видимо критические дни! smile

PM MAIL   Вверх
unter
Дата 5.9.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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"///
В чем может быть проблема?
PM MAIL   Вверх
offline
Дата 5.9.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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";

PM MAIL   Вверх
unter
Дата 5.9.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Короче видимо это были глюки какие то, просто перезапустил Delphi и все заработало как часы. smile smile

Каким образом можно связать компоненты ADOQuery1 и Query1? smile

Объясню: это надо для импорта в источник ODBC другую базу уже.

Источник данных: ADOQuery1 (DBGrid1) -> Пункт назначения данных Query1 (DBGrid1 - база, зарегистрированная в BDE)
Насколько знаю BatchMove вяжет только Query с Query. smile
И еще вопрос: метод GetTableNames() получает имена таблиц из базы данных, зарегистрированной в BDE, а как дело обстоит у ADO? Как считать имена всех листов файла EXCEL? smile
Спасибо. smile

PM MAIL   Вверх
unter
Дата 5.9.2005, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Вопрос № 2 отменяется, считал поля и имена всех листов.
Но проблема с преброской из ADOQuery в Query базу BDE стоит до сих пор. smile
PM MAIL   Вверх
offline
Дата 5.9.2005, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата
Запрос выполняется на серваке, а он не знает, что такое TQuery, он понимает только SQL (для файлов dbf, db и подобных BDE прикидывается серваком). TQuery - это компонент твоей программы, он выдал тебе данные, а дальше работай с ними сам, BDE больше не поможет.


Можно сохранить результаты запроса в таблицу и сделать запрос уже к ней

Читал такое, но сам не пробовал smile
Цитата
В LocalSQL существует возможность делать запрос по результатам другого запроса. Для этого нужно текст первого запроса сохранить в файле с расширением sql.
А второй запрос будет выглядеть примерно так:
select * from tmp.sql
Подробнее - в help LocalSQL.


т.ч. есть над чем подумать smile

Это сообщение отредактировал(а) kirilllius - 5.9.2005, 21:35
PM MAIL   Вверх
unter
Дата 6.9.2005, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Попробую че нить придумать, но идея у меня была такая, поглядим что получится из этого. smile
PM MAIL   Вверх
unter
Дата 6.9.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;

PM MAIL   Вверх
unter
Дата 6.9.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Блин, так не катит. Создал список TempList:TStrings загнал туда все поля ("F1,F2...") теперь все таки не могу перегнать из списка назад в Query для загрузки в базу данных через BDE. smile
Need HELP!!! smile smile smile
Каким образом можно связать компоненты ADOQuery1 и Query1? smile

Цитата
Объясню: это надо для импорта в источник ODBC другую базу уже.

Источник данных: ADOQuery1 (DBGrid1) -> Пункт назначения данных Query1 (DBGrid1 - база, зарегистрированная в BDE)
Насколько знаю BatchMove вяжет только Query с Query. smile

PM MAIL   Вверх
offline
Дата 6.9.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Ну сделай это через промежуточную таблицу. Если у тебя структура заранее известная, так в чем проблема. Выгрузи туда данные из ADOQuery1, а затем подай на Query1 эту таблицу. После выполнения запросов очисть таблицу. Вот и все.
PM MAIL   Вверх
unter
Дата 7.9.2005, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



smile из ADOQuery можно выгрузить данные например в какую таблицу, чтобы считать сразу их от туда в Query? Идею то я понял, но такого никогда не делал. smile
Я пробовал выгружать данные из Query в файл *.mdb, зарегистрированный в BDE.
Структура заранее известна (точнее будет известна после обработки, но это мелочи).

Добавлено @ 08:47
Что может выступать в роли промежуточной таблицы? И каким образом их туда выгрузить, а потом загрузить уже в Query?
PM MAIL   Вверх
offline
Дата 7.9.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Привет!
Создай заранее фай таблицы с нужными полями (хотя это можно сделать програмно, но если у тебя структура постоянна, то создай заранее, что бы не тратилось время на это в программе).
А передать данные можно например используя цикл пробежаться по запросу с первой до последней записи и перенести их в таблицу. или использовать компонент BatchMove предназначен для групповых операций переноса данных из одного набора в другой (но с ним я не работал).
PM MAIL   Вверх
unter
Дата 7.9.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Привет.
BatchMove работает тока с Query, а об ADO он не слышал никогда насколько я знаю.
Я тут подумал: может совсе не иcпользовать никакой Query: мне надо передать данные в базу в ОDBC прям из ADOQuery, это можно сделать сразу?
В MSDN лазил так ничего и не нашел толкового.
Зачем создавать какие то промежуточные таблицы?
К тому же у меня 4 листа в файле excel, которые надо подгузить в ODBC (База на оракл или Access). Я с ADO просто не очень разобрался пока.
Цитата
А передать данные можно например используя цикл пробежаться по запросу с первой до последней записи и перенести их в таблицу
- а вот это уже можно попробовать.
Thank`s.
PM MAIL   Вверх
unter
Дата 8.9.2005, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Не мог бы ты поконкретнее объяснить как импортировать данные в базу на оракле, хотя с выводом их в файл все просто, только вот жалко, что ADOQuery понимает только 2 формата всего *.xml и *.adt smile (
Код

ADOQuery.SaveToFile('Test.xml')
)
Я почему то так и не могу понять саму стратегию переноса этих данных в базу на оракле. smile
Ведь Query - это таблица просмотра данных, кстати она не понимает методы LoadFromFile() насколько знаю. Он работает только с BDE.
PM MAIL   Вверх
unter
Дата 8.9.2005, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Было бы шикарно написать что то типа:

Код

whiile not ADOQuery1.Eof 
do begin
Query1.SQL.Append(ADOQuery.все записи попорядку);
Query1.Next(); 
end;
smile
Но к сожалению компьютер он же дурак и не понимает, что ему говорят, он тока свои несовершенные коды воспринимает. smile
PM MAIL   Вверх
offline
Дата 8.9.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата
может совсе не иcпользовать никакой Query: мне надо передать данные в базу в ОDBC прям из ADOQuery, это можно сделать сразу?


так я не понял, ты от этого отказался?

Я работал только с Аксесом
там можно сделать так

Код

whiile not ADOQuery1.Eof do begin
 Table2.FieldByName('Поле1').AsString := ADOQuery1.FieldByName('Поле1').AsString;
 Table2.FieldByName('Поле2').AsString := ADOQuery1.FieldByName('Поле2').AsString;
 Table2.FieldByName('Поле3').AsString := ADOQuery1.FieldByName('Поле3').AsString;
 ...
 ADOQuery1.Next; 
end;


или

Код

 INSERT INTO Table2 (Поле1, Поле2, Поле3, ... ) 
 SELECT Поле1, Поле2, Поле3, ... FROM Table1 
 WHERE условие



Это сообщение отредактировал(а) kirilllius - 8.9.2005, 19:43
PM MAIL   Вверх
unter
Дата 8.9.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Спасибо за дельные советы. smile Я извиняюсь, но придет ненадолго отъехать (несколько дней), если появятся вопросы я напишу. smile
Еще раз спасибо. smile
PM MAIL   Вверх
Bes
Дата 13.9.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



А что вместо вот этого
ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\твой_файл.XLS;Extended Properties="Excel 8.0";
надо писать
чтобы так же работать с DBF файлами?
Спасибо
PM MAIL   Вверх
unter
Дата 13.9.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Bes
Дата 14.9.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Не.. мне через АДО удобнее тем более что такой вариант не требует предварительной установки БДЕ на рабочую машину.
Добавлено @ 08:36
Фигу! "Внешняя таблица не имеет предполагаемый формат". - не работает!!!
PM MAIL   Вверх
offline
Дата 14.9.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата

TDBF с www.torry.net или www.sourceforge.net Эти компоненты полностью повторяют методы TBDEDataset, работают быстро и утежеляют exe на 100К всего

или

VKDBF http://vlad-karpov.narod.ru/ - быстро, просто, куча дополнительных фич, бесплатно, наше в конце концов smile


dBase
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=dBase IV;Persist Security Info=False
Paradox
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=Paradox 4.x;Persist Security Info=False


может что поможет smile

PM MAIL   Вверх
Bes
Дата 14.9.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Во, спасибо.
PM MAIL   Вверх
Akella
Дата 19.9.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(unter @ 4.9.2005, 18:21)
Есть обработанный файл *.xls с 4-мя листами на которых нyжная информация. Обработанный - значит в таком виде, как его надо импортировать в базу данных через Query. 


Цитата(unter @ 4.9.2005, 18:21)
var E, WorkBook, Sheet : Variant; //приложение Excel, книга, лист.
Workbook:=E.Workbooks.Open(OpenDialog1.FileName); 

а причём здеся кверя???

или кверя или доступ через COM.

Короче, парни не парьтесь а воспользуйтесь поиском в этой теме форума, или идите в FAQ, или качайте DRKB и будет вам счастье
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1110 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.