Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизExcel -> ADO(Jet.OLEDB.4) -> AdoDataSet Найти похожие ветки
← →
Quest (2003-07-03 09:48) [0]Пропадают значения при экспорте столбца значений из Excel ...
Задача: из Excel в Access экспортируется столбец со значениями,
ConnectionXLS.ConnectionString:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Name_File+";Extended Properties=Excel8.0;Persist Security Info=False";
Связь устанавливается, но после запроса:
DataSetXLS.CommandText:="SELECT * " +
"FROM "+ "[" +
Sheet +"] "+
" WHERE F1 <> "" ;
вDataSetXLS
находятся не все значения. (значения вида "12345678" , целое десятизначное число)
Из 92 выбираются лишь 68 ... в XLS файле менял формат ячеек, отслеживал пробелы, убирал группировки, даже шрифт и цвет ставил стандартными :)
В чём может быть проблема?
← →
Quest (2003-07-03 10:23) [1]100% решения не видно, но может у кого есть идеи?
пожалуйста выскажите, даже самые неправдоподобные
← →
sniknik (2003-07-03 10:52) [2]выбиратся вообщето должно все, ну то что является данными. формулы не пройдут. а данные должны.
> даже самые неправдоподобные
фазы луны влияют, подожди несколько дней. :о))
WHERE F1 <> ""
условие не выполняеся, пустая строка это что? на что сравнение? может там нет значения и надо так WHERE not ((F1 = "") or (isNull(F1)))
или вроде этого.
(операции со значением Null дают неопределенный результат)
????
← →
Quest (2003-07-03 11:14) [3]WHERE F1 <> "" - это отсекание пустых значений по первому столбцу, иначе выбираются порядка 7000 строк, НО даже без этого условия, то есть:
SELECT * FROM [SHEET]
, часть значений переходят в DataSet - пустыми, хотя в Excel-е они есть :(
насчёт луны я уже думал, даже ждал смены давления ...
Выяснилось следующее, если числовые значения которые не беруться (формул в этом столбце - нет) переписать в Excel-e ручками, то они в выборке появляются! но мне нужно экспортировать очень часто и из множества файлов, неужели всё "править руками" ?!
← →
Quest (2003-07-03 13:26) [4]Вроде "свет пробился", при изменении типа данных в ячейках Excel (при редактировании файла), он меняет тип лишь при "входе - выходе" из ячейки, автоматом по столбцу непрокатывает ... вывод, при запросе тип поля определяется как "текстовое" и те значения которые имеют "числовой" тип - опускаются :( ... а я считал что выбираемые значения имеют тип Variant и при помещении в DataSet сами приводятся к нужному типу ?!
выходит, необходимо делать принудительное приведение к одному типу в запросе.
Не подскажете как корректно это сделать?
← →
Quest (2003-07-03 13:32) [5]если кому ещё интересно, кажись нашёл!!!!
Параметры инициализации Microsoft Excel
Папка Jet\4.0\Engines\Excel содержит параметры инициализации драйвера Msexcl40.dll, используемого при доступе к внешним электронным таблицам Microsoft Excel. В следующем примере демонстрируются типичные значения элементов данной папки.
win32=<путь>\ msexcl40.dll
TypeGuessRows=8
ImportMixedTypes=Text
AppendBlankRows=1
FirstRowHasNames=Yes
Ядро базы данных Microsoft Jet следующим образом использует элементы в папке Excel.
Элемент Описание
TypeGuessRows Число строк, проверяющихся при определении типа данных. Тип данных определяется по максимальному числу найденных значений одного типа. В случае совпадения используются типы в следующем порядке: Number, Currency, Date, Text, Boolean. Если обнаруживаются данные, не соответствующие выбранному типу столбца, возвращается пустое значение Null. Если столбец, содержащий данные разных типов, обнаруживается при импорте, то тип данных всего столбца определяется значением элемента «ImportMixedTypes».
По умолчанию проверяется 8 строк. Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
← →
Quest (2003-07-03 13:51) [6]и всё же, как в запросе принудительно привести значения к одному типу?
интересно, я сам через некоторое время отвечу на этот вопрос или всё же ктото проявит инициативу? :)))
← →
Quest (2003-07-03 16:21) [7]уточняю вопрос. в Oracle используется CAST, в MSSQL - CONVERT, а что можно использовать в связке EXCEL -> ADO для приведению к нужному типу ?
← →
sniknik (2003-07-03 16:48) [8]CStr, CInt ...
CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CStr(expression)
CVar(expression)
(в MSSQL используется и CAST и CONVERT, но в общем смысл понятен :о))
← →
Quest (2003-07-03 16:56) [9]Премного благодарен.
← →
Quest (2003-07-03 17:19) [10]мдааа, всё равно не катит
SELECT CStr(F1) FROM [SHEET]
тоже ругается:
... raised exception class EOleException with message "Data provider or other service returnde an E_FAIL status".
Может есть другой способ приведения к типу понимаемый ADO JET.4?
← →
sniknik (2003-07-03 17:36) [11]это и есть способ для JET.4
попробуй так (у тебя же там разнотипные значения а ты их все под одну гребенку)
SELECT iif(IsNumeric(F1),CStr(F1),"0") FROM [Sheet1$]
← →
Quest (2003-07-04 14:11) [12]к сожелению и эта схема не работает, в ADODataSet поступают одни пустые значения ...
← →
sniknik (2003-07-04 15:28) [13]Quest © (04.07.03 14:11)
правильнее будет сказать она работает, но не так как ты от нее ожидаеш.
пришли мне файл с начитаемыми позициями. посмотрю, так сказать чегонибудь трудно (не сталкивался с такой избирательностью).
← →
sniknik (2003-07-05 00:01) [14]ну вот пришол с работы, пора занятся делом. :о))
проблему вызавали не неправильные данные как ни странно а наоборот правильные с точки зрения Excel, если присмотрется там возникает упоминание что число записано строкой, и с ними как раз проблем нет, впереди до данных внушительный заголовок с пустыми полями так что колонка определяется как текстовая, а вот "правильные" числовые данные как раз игнорируются. странный поворот, можно конечно пробежатся по всем ячейкам и исправить все на числа включая заголовок или заставить все воспринимать как текст(а у тебя с таким форматированием листа по другому и не будет), к счастью есть параметр который говорит jet-у чтобы все воспринимать как текст (в общем только строку подключения поправить нужно как ниже).
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\0201040301.xls;Extended Properties="Excel 8.0; IMEX=1";Persist Security Info=False
← →
Quest (2003-07-07 11:41) [15]Большое спасибо! Именно этого и не хватало.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c