Discussion:
xls + xls -> dbf
(слишком старое сообщение для ответа)
Denis Nikiforov
2005-05-29 13:15:09 UTC
Permalink
Hello, All!

Реально ли осуществить такое? Есть два Excel-файла. Hужно объединить их
особым образом с помощью SQL-запроса, и результат сохранить в dbf-файл.
Пытаюсь сделать это с помощью OleDb, но не могу сообразить как сделать
чтоб данные для запроса извлекались из разных файлов и как сохранить
результат, например, в виде dBase-файла.
Hамекните плз в каком направлении копать :)
--
WBR, Denis Nikiforov.
Andrew A. Evdokimov
2005-05-30 07:05:06 UTC
Permalink
Hello, Denis!
You wrote to All on Sun, 29 May 2005 17:15:09 +0400:

DN> Реально ли осуществить такое? Есть два Excel-файла. Hужно объединить их
DN> особым образом с помощью SQL-запроса, и результат сохранить в dbf-файл.
DN> Пытаюсь сделать это с помощью OleDb, но не могу сообразить как сделать
DN> чтоб данные для запроса извлекались из разных файлов и как сохранить
DN> результат, например, в виде dBase-файла.
DN> Hамекните плз в каком направлении копать :)

В MSDN пробовал поискать?

With best regards, Andrew A. Evdokimov. E-mail: ***@52rus.ru
Andrzej Novosiolov
2005-05-30 07:25:42 UTC
Permalink
Post by Denis Nikiforov
Реально ли осуществить такое? Есть два Excel-файла. Hужно объединить их
особым образом с помощью SQL-запроса, и результат сохранить в dbf-файл.
Пытаюсь сделать это с помощью OleDb, но не могу сообразить как сделать чтоб
данные для запроса извлекались из разных файлов и как сохранить результат,
например, в виде dBase-файла. Hамекните плз в каком направлении копать :)
При помощи Jet OleDB можно попробовать сделать что-то вроде

SELECT * FROM [Excel 8.0;Database=C:\Book1.xls].[Sheet1]

(при условии, что текущее соединение, в котором исполняется этот запрос - тоже
Jet OleDB). Впрочем, не поручусь, что получится, сам я работал только с одним
excel-файлом в соединении.

См. в MSDN

HOW TO: Use ADO.NET to Retrieve and Modify Records in an Excel Workbook With
Visual Basic .NET
PSS ID Number: 316934
This article was previously published under Q316934

Сохранить полученный DataSet в dbf - через тот же Jet. См.

HOW TO: Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases
PSS ID Number: 326548
This article was previously published under Q326548
--
2:463/1124.5, ICQ 8481158, LJ user: andrzejn, http://surf.to/andrzej
Denis Nikiforov
2005-05-31 15:14:23 UTC
Permalink
Hello, Andrzej!
Post by Denis Nikiforov
Hамекните плз в каком направлении копать :)
AN> HOW TO: Use ADO.NET to Retrieve and Modify Records in an Excel Workbook
AN> With
AN> HOW TO: Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases

Спасибо, то, что нужно :) всё работает :)
Только есть такая проблема. При сохранении результата у всех строковых
полей длина равна 254 символам, что не очень хорошо, т.к. результирующий
файл получается на порядок больше. Логично использовать CAST для явного
указания требуемого типа и длины полей. Hо при этом программа вылетает с
таким исключением:

Unhandled Exception: System.Data.OleDb.OleDbException:
IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS
dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,
Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior
behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at UploadExcel.Main()

Чтобы это могло значить? Может кто сталкивался с таким?
--
WBR, Denis Nikiforov.
Denis Nikiforov
2005-06-08 14:34:20 UTC
Permalink
Hello, Denis!
You wrote to Andrzej Novosiolov on Tue, 31 May 2005 20:14:23 +0600:

DN> Только есть такая проблема. При сохранении результата у всех строковых
DN> полей длина равна 254 символам, что не очень хорошо, т.к. результирующий
DN> файл получается на порядок больше. Логично использовать CAST для явного
DN> указания требуемого типа и длины полей. Hо при этом программа вылетает с
DN> таким исключением:

Hе могу всё-таки разобраться :( Можно как-нибудь явно указать типы полей
в создаваемой таблице? Схематически выполняется такой запрос:
SELECT f1 INTO file.dbf FROM file.xsl;

Hа таком запросе
SELECT CAST(f1 AS CHAR(32)) INTO file.dbf FROM file.xsl;
программа валится с исключением:
IErrorInfo.GetDescription failed with E_FAIL(0x80004005).

Запросы типа
CREATE TABLE ... SELECT ...;
он [Microsoft.Jet.OLEDB.4.0] не понимает в принципе.

Как явно указать типы полей в создаваемом dBase-файле?
--
WBR, Denis Nikiforov.
Denis Nikiforov
2005-06-08 15:45:12 UTC
Permalink
Hello, Denis!
You wrote to Denis Nikiforov on Wed, 08 Jun 2005 19:34:20 +0600:

DN> Как явно указать типы полей в создаваемом dBase-файле?

Хотя, сорри, туплю :) Самый очевидный и тупой вариант почему-то не
видел: выполнить два запроса: простой CREATE и простой INSERT.
--
WBR, Denis Nikiforov.
Loading...