Открываю экселевский файл, как базу данных, с помощью такого кода
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, все столбцы в ней опредлялись как заведомо содержащие строковые данные?
Не катит!
СУБД совершенно наплевать, как я пометил в эксцелевские столбцы. Она смотрит только на содержимое первых ячеек этих столбцов.
Я пока делаю по другому: прежде, чем открыть файл как базу данных, я его открываю с помощью эксцелевского приложения, добавляю в каждую ячейку первых десяти строк заведомо строковые данные (например, слово "Вася", сохраняю файл, потом открываю с помощью СУБД, удаляю первые десять строк.
Это - работает, но метод, сами видите, изуверский.
Может кто подскажет решение попроще
Всем большое спасибо за помощь! )
Всё действительно просто - нашёл на буржуйском форуме.
Просто необходимо изменить одно свойство в ConnectionString и выставить IMEX=1, а не 2, как я делал до этого.
Всем большое спасибо за помощь! )
Всё действительно просто - нашлось на буржуйском форуме.
Просто необходимо изменить одно свойство в ConnectionString и выставить IMEX=1, а не 2, как у меня было до этого.