Страницы: 1
RSS
БД Access 2016 "Длинное поле" не заполняется данными более 510 знаков
 
Добрый день,

Имеется форма созданная в Excel посредством которой в БД Access заносятся данные, однако в выбранный столбец "CharacteristicsStateOfObjectComment" который имеет тип "Длинное поле" непосредственно в самой БД Access не выгружаются данные с ячейки в случае если данные составляют более 510 знаков (в моем случае текст), может быть я что-то делаю не так?
Скрытый текст
 
Доброе время суток
Цитата
Tidus1988 написал:
может быть я что-то делаю не так?
Да, именно так.
Цитата
Tidus1988 написал:
имеет тип "Длинное поле"
На картинке ниже приведён список названий типов данных, используемых в Access - там есть такое "Длинное поле"?
Цитата
Tidus1988 написал:
Cmd.Parameters("@CharacteristicsStateOfObjectComment").Type = adWChar
Цитата
adWChar 130 Указывает строку символов Юникода (DBTYPE_WSTR) нулем.
Пройдите по ссылке и укажите правильный тип данных.
Успехов.
 
Цитата
Андрей VG написал: "Длинное поле"
"Длинный текст"

Цитата
Пройдите по ссылке и укажите правильный тип данных.Успехов.
не совсем разбираюсь с этим, пробовал несколько типов данных, у всех, которые использовал появлялась данная ошибка.
 
Цитата
Tidus1988 написал:
у всех, которые использовал
Чтобы не гадать, в таких случаях лучше проводить исследования :)  
Код
Public Sub test()
    Dim pConn As New ADODB.Connection
    Dim pRSet As New ADODB.Recordset
    pConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Path\Имя файла вашей базы данных.accdb;Persist Security Info=False;"
    pRSet.Open "Select CharacteristicsStateOfObjectComment From [Имя вашей таблицы] Where CharacteristicsStateOfObjectComment = 'foo'", pConn
    Stop
    pRSet.Close
    pConn.Close
End Sub

И после остановки на Stop смотрите в Locals какой тип имеет pRSet Fields Item 1
 
Цитата
Tidus1988 написал:
Cmd.Parameters("@CharacteristicsStateOfObjectComment").Type = adWChar
Я так не изгаляюсь.
Достаточно выполнить
Код
Cmd.Parameters.Refresh
Тип сам подтянется
Эта проверка лишняя
Код
If IsEmpty(Worksheets("Экспертиза отчета об оценке").Range("E167")) = False Then
Если в ячейке пусто, то и зайдет пусто.
 
Цитата
doober написал:
Cmd.Parameters.Refresh
Привет, Сергей.
Спасибо.
 
Не за что Андрей.
Было лень добавлять много параметров, нашел способ  как их создать быстро.
 
Цитата
Андрей VG написал:
И после остановки на Stop смотрите в Locals какой тип имеет pRSet Fields Item 1
Type : adVarWChar
Ставлю Type : adVarWChar, та же ошибка выходит.
Изменено: Tidus1988 - 13.01.2020 09:12:09
 
Цитата
Tidus1988 написал:
Ставлю Type : adVarWChar, та же ошибка выходит.
Следовательно, скорее всего, поле CharacteristicsStateOfObjectComment в вашей таблице не имеет тип данных "Длинный текст". Зайдите в базу данных, откройте таблицу в конструкторе и посмотрите, какой тип данных установлен для этого поля.
 
Цитата
Андрей VG написал:
Следовательно, скорее всего, поле CharacteristicsStateOfObjectComment в вашей таблице не имеет тип данных "Длинный текст". Зайдите в базу данных, откройте таблицу в конструкторе и посмотрите, какой тип данных установлен для этого поля.
Изменено: Tidus1988 - 13.01.2020 09:47:28
 
Сделал отдельную Базу Данных, написал макрос по вышеуказанным советам, все равно та же ошибка.

Базу загрузить в первозданном виде не могу, ограничение в 100 кб., загрузил архивом.
Изменено: Tidus1988 - 13.01.2020 09:46:51
 
Цитата
Tidus1988 написал:
Сделал отдельную Базу Данных, написал макрос по вышеуказанным советам, все равно та же ошибка.
Естественно, нет таблицы Valuer, есть таблица Test. В таблице Test нет поля CharacteristicsStateOfObjectComment, есть поле Test. Издеваетесь?
Для тестовой базы
Код
Sub Export()
    Dim Con As ADODB.Connection
    Set Con = New ADODB.Connection
    With Con
       .Provider = "Microsoft.ACE.OLEDB.12.0"
       .ConnectionString = "Data Source=C:\Path\Test.mdb;Persist Security Info=False"
       .Open
    End With
    Dim Cmd As ADODB.Command
    Set Cmd = New ADODB.Command
    Cmd.ActiveConnection = Con
    Cmd.CommandText = "insert into [Test] (Код, Test) values " _
    & "(@Код, @Test)"
    Cmd.Parameters.Append Cmd.CreateParameter("@Код", adInteger, adParamInput)
    Cmd.Parameters.Append Cmd.CreateParameter("@Test", adLongVarWChar, adParamInput, 2& ^ 31 - 1)
    Cmd.Parameters("@Test").Value = Worksheets("Лист2").Range("A1").Value
    Cmd.Parameters("@Код").Value = Worksheets("Лист2").Range("B1").Value
    Cmd.Execute
End Sub
 
Видимо не заметил, благодарю.
Страницы: 1
Наверх