Страницы: 1
RSS
Слишком большая длина записи при переносе данных из Excel2007 в Access2007.
 
Добрый день.
Есть база аксесс, состоящая из 3 таблиц. Все поля, кроме индкерса текст 255 символов
Есть файл Excel, в котором формируется запрос на запись новой строки данных в таблицу.
Всё работает.
В какой-то момент вдруг выдал сообщение, "Слишком большая длина записи".
Проверка базы показала, что строка не записалась в одну из таблиц.
Проверил все поля не размер записи. К 255 символам даже близко ничего не подбирается.

Из-за чего может возникать такая проблема? И как её решить?
 
Попробуйте поменть тип поля на МЕМО.
А ещё можно попробовать указать тип параметра adVariant (для ADODB.Command).
There is no knowledge that is not power
 
Не помогло.
 
А сколько полей в записи
суммарная длина записи (без мемо) должна быть меньше 4000(если не ошибаюсь)
 
может по индексу не проходит? вроде как предел достигнут?
 
Длина строки, которая не помсещается 2352 символа.

Другие записи нормально заходят в таблицу.
 
у меня все заливает, покажите как добавляете записи, либо мой пример изучите
----------
Забыл добавить база создается в том же каталоге что и файл xls, не забудьте сохранить файл на физический диск компьютера
Изменено: R Dmitry - 28.06.2013 21:07:07
Спасибо
 
4000, если

Число знаков в записи (кроме полей с типом данных «Поле MEMO» и «Поле объекта OLE»), если для свойства Сжатие Юникод полей задано значение Да

иначе меньше
 
Цитата
Андрей Даркшевич пишет:
К 255 символам даже близко ничего не подбирается.
:)
Я сам - дурнее всякого примера! ...
 
попыталась создать 10 полей по 255====увы
только 7*255<2000симв

Код
Dim s1
s1 = "CREATE TABLE TEST([IdTest] COUNTER,"
s1 = s1 & "[NameTest1] char(255),"
s1 = s1 & "[NameTest2] char(255),"
s1 = s1 & "[NameTest3] char(255),"
s1 = s1 & "[NameTest4] char(255),"
's1 = s1 & "[NameTest5] char(255),"
's1 = s1 & "[NameTest6] char(255),"
s1 = s1 & "[NameTest7] char(255),"
s1 = s1 & "[NameTest8] char(255),"
s1 = s1 & "[NameTest9] char(255),"
s1 = s1 & "[NameTest10] char(255));"

 Db.Execute (s1), dbFailOnError 'varchar
 
вот так ввело 10 полей

Код
s1 = "CREATE TABLE TEST([IdTest] COUNTER,"
s1 = s1 & "[NameTest1] memo,"
s1 = s1 & "[NameTest2] memo,"
s1 = s1 & "[NameTest3] memo,"
s1 = s1 & "[NameTest4] memo,"
s1 = s1 & "[NameTest5] memo,"
s1 = s1 & "[NameTest6] memo,"
s1 = s1 & "[NameTest7] memo,"
s1 = s1 & "[NameTest8] memo,"
s1 = s1 & "[NameTest9] memo,"
s1 = s1 & "[NameTest10] memo);"

 Db.Execute (s1), dbFailOnError 'varchar
 
galina mur,
Код
varchar

Вам поможет,
........... хотя это к данной теме это отношение не имеет (мне просто было лень создать access ручками, вот я и создал его программно).
Спасибо
 
QUOTE]R Dmitry пишет:
у меня все заливает, покажите как добавляете записи, либо мой пример изучите
----------
Забыл добавить база создается в том же каталоге что и файл xls, не забудьте сохранить файл на физический диск компьютера[/QUOTE]

Дмитрий, сейчас запись в базу происходит так:
Set oCm = New ADODB.command
oCm.ActiveConnection = Cn
oCm.CommandText = "Insert into Applications " & ActiveWorkbook.Sheets("zapros").Range("c1").Value & "  values  " & ActiveWorkbook.Sheets("zapros").Range("e1").Value
oCm.Execute iRecAffected
oCm.CommandText = "Insert into Applications1 " & ActiveWorkbook.Sheets("zapros").Range("c5").Value & "  values  " & ActiveWorkbook.Sheets("zapros").Range("e5").Value
oCm.Execute iRecAffected
oCm.CommandText = "Insert into Scoring " & ActiveWorkbook.Sheets("zapros").Range("c9").Value & "  values  " & ActiveWorkbook.Sheets("zapros").Range("e9").Value
oCm.Execute iRecAffected

База и код создавались не мной, а мне это осталось как страшное наследие.
 
Код
'----------------------------
Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
   With rs
      .CursorLocation = adUseClient
      .Open "select top 1 * from Applications;", cn ', adOpenStatic, adLockOptimistic
      .AddNew
      .Fields(ActiveWorkbook.Sheets("zapros").Range("c1").Value).Value = _
                                                         ActiveWorkbook.Sheets("zapros").Range("e1").Value
      .Update
      .Close
   End With
   Set rs = Nothing

попробуйте, примерно так таблицы Applications.
Изменено: R Dmitry - 01.07.2013 20:40:40
Спасибо
 
Дмитрий, дебагер говорит следующее:

rs.Fields(ActiveWorkbook.Sheets("zapros").Range("c1").Value).Value <В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.>
 
Код
ActiveWorkbook.Sheets("zapros").Range("c1").Value

а это разве не имя поля куда добавляется запись?
в общем это должно быть имя поля куда, добавляются данные
Спасибо
 
Да, это именно список полей, куда заливать данные. Он не пустой - проверил по дебагеру, на всякий случай.
 
Список?
соответственно будет и список значений
я показал пример для одного поля и одного значения
воспользуйтесь функцией split, и тогда циклом занесите нужные данные в нужные поля, и обновите рекордсет
Спасибо
 
Не могу победить.
Листинг процедуры, которая должна заносить данные:
Скрытый текст
 
Код
adOpenStatic

у меня это было за комментировано, либо замените на
Код
adOpenDinamic
Спасибо
 
Oren_Spartach, длинные листинги - или в .txt, или под spoiler.
Страницы: 1
Читают тему
Наверх