Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Открыть таблицу Excel как базу данных


Автор: swetik1981 25.6.2010, 23:13
Открываю экселевский файл, как базу данных, с помощью такого кода 

Код

        Set cn = New ADODB.Connection 
        Set rs = New ADODB.Recordset 
        With cn 
            .Provider = "Microsoft.Jet.OLEDB.4.0" 
            .ConnectionString = "Data Source=D:/BD.xls; Extended Properties='Excel 8.0; HDR=NO; IMEX=2';" 
            .open 
        End With 
    
cnSQL= "SELECT * FROM [Лист1$]" 

rs.open cnSQL, cn, adOpenStatic, adLockOptimistic




Всё работает, НО: 
Дело в том, что при открытии эксцелевской таблицы Microsoft.Jet сам определяет, какие именно данные находятся в таблице. Я уже примерно допёр, при помощи какого алгоритма он это делает: просматривает несколько первых ячеек в каждом столбце и, если, скажем, находит в них большинство числовых символов, определяет этот столбец, как содержащий числовые значения; тоже делает, если находит даты или строкые значения. Но в тех таблицах, с которыми работаю я, всё не так просто. Например, в столбце могут быть такие значения: 

Код

1 
1 
456 
73 
73 
456 
ликвид 
простой 
73


Программа определит, что этот столбец - числовой, хотя это не так. 

Короче, что мне сделать, чтобы при открытии таблицы Excel, все столбцы в ней опредлялись как заведомо содержащие строковые данные? 

Автор: Akella 26.6.2010, 11:38
Попробовать в наборе данных (я так подразумеваю, что в ADO) ручками создавать persistent-столбцы.

Автор: swetik1981 26.6.2010, 22:37
Мне не совсем понятно, что это, но, как мне кажется, не покатит. Тип данных столбцов определяется ещё на стадии выполнения sql-запроса, поэтому в ADO придётся работать с тем, что есть. Поясните, пожалуйста, подробнее

Автор: swetik1981 27.6.2010, 14:30
Всем большое спасибо за помощь! ) 
Всё действительно просто - нашлось на буржуйском форуме. 
Просто необходимо изменить одно свойство в ConnectionString и выставить IMEX=1, а не 2, как было до этого. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)