Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: опять копирование из excel
 
 автор: Scorpi   (24.06.2008 в 06:01)   личное сообщение
 
 

добрый день всем.
вот какая ситуация: при программном копировании из excel (проверялись 2 способа:
- sql = "INSERT INTO import (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f70, f71) "
sql = sql & " SELECT * FROM [$A6:BS" & k - 18 & "] IN '" & nm & "'[Excel 8.0;HDR=No]; "
CurrentDb.Execute (sql)
- DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "import", nm, False, "A6:BS" & k - 18)
теряется часть данных, причем по первому способу больше потери, но что при первом, что при втором отказывается копировать данные, если в ячейке например записано две даты (копирую в текстовое поле). Причем в первом случае вообще такие яцейки не берет, а во втором не копирует если даты записаны через пробел, если же через ентер, то копирует первую встречающуюся

Может есть мнения из-за чего: неподготовленность excel (но как тогда подготовить непонятно, копируется около 4,5 тыс строк) или это нюансы использования этих методов копирования?

  Ответить  
 
 автор: osmor   (24.06.2008 в 08:57)   личное сообщение
 
 

Первый способ просто выполняет запрос, все что не может быть вставлено пропускается.
используйте
CurrentDb.Execute (sql,dbFailOnError) в этом случае при невозможности вставки получите сообщение о ошибке.
если будете использовать вместо Insert into, SELECT поле1[, поле2[, ...]] INTO (запрос на создание таблицы), то вероятно результат будет таким же как и и во втором случае.
Точно поле в которое вы пытаетесь добавить данные из столбца с датами - текстовое?

Во втором случае ACCESS пытается пытается определить тип столбцов в Excel таблице и создает соответствующие поля в таблице ACCESS.
Поскольку столбец с датами "идентифицируется" как ДАТА, то в случае когда даты разделены пробелом, получается текст и ACCESS его не может преобразовать и из-за этого пропускает, в случае когда дата разделена переводом каретки, данные в ячейки воспринимаются как массив (я так думаю), но поскольку в ACCESS нет типа данных для хранения массивов, то берется только первый элемент.
ЧТо можно сделать...
ПОпробуйте в ручную импортировать Лист.... Получилось?
еще попробуйте изменить запрос приводя поля к нужному типу, т.е.
sql = sql & " SELECT cstr([Поле1]), cstr([Поле2]), cint(Поле3), ........ FROM [$A6:BS" & k - 18 & "] IN '" & nm & "'[Excel 8.0;HDR=No]; "

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList