Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
llama15
0 / 0 / 0
Регистрация: 05.09.2018
Сообщений: 9
1

Изменение типа данных связанных файлов

01.03.2019, 11:46. Просмотров 1290. Ответов 13

Добрый день.

Столкнулась в проблемой:
есть таблица в excel, в некоторых полях содержится более 255 символов и при создании связанной таблицы Access обрезает строку до 255 знаков.
Изменить тип данных через БД невозможно, в excele тоже не нашла как решить эту проблему.

При этом один раз у меня все-таки получилось как то связать таблицу и получился тип данных - "длинный текст" (как так получилось осталось загадкой).

Есть какие-то способы решить эту проблему без разделения ячеек на столбцы по 255?
Справок по этой теме нигде не нашла.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2019, 11:46
Ответы с готовыми решениями:

Автоматическое изменение значений полей при Выборе значения в поле со списком из связанных таблиц
Добрый день, бьюсь над проблемкой и не знаю как ее решить: Имеется несколько связанных таблиц, их...

Каким требованиям должен удовлетворять набор связанных данных, чтобы его можно было считать базой данных?
Заранее спасибо!

Не правильный запрос на добавление и изменение данных в связанных таблицах
Привет ребята. Делаю курсовую работу (Hibernate, Spring MVC, CRUD, MySQL). Возникла проблема в...

Изменение типа данных
Доброе время суток. Я хотел бы узнать, возможно ли изменение типа данных в запущенной программе....

Изменение типа данных Range
Здравствуйте, форумчане. Вопрос от ученика. Есть макрос, который сравнивает данные в таблице и в...

13
АЕ
194 / 140 / 31
Регистрация: 13.12.2016
Сообщений: 681
Записей в блоге: 1
01.03.2019, 12:22 2
llama15, Связывать таблицу принципиально?
Я обычно выделяю область в Эксэле, копирую и вставляю в новую таблицу.
Или импорт из файла - тогда каждое поле можно просмотреть по типу и отредактировать.
0
llama15
0 / 0 / 0
Регистрация: 05.09.2018
Сообщений: 9
01.03.2019, 12:45  [ТС] 3
Да, принципиально, чтобы исходник хранился в связанном файле excel. В excel хочу хранить данные для формирования таблиц для отчетности, например "Название"-это название столбца для используемой таблицы, "Значение" - код, используемый для заполнения ячейки (вот как раз он иногда бывает больше 255 символов, приходится делать доп столбец). Циклом в коде по нажатию кнопки формируется код запроса.
0
Миниатюры
Изменение типа данных связанных файлов  
Eugene-LS
3905 / 2255 / 428
Регистрация: 05.10.2016
Сообщений: 6,273
01.03.2019, 21:48 4
Цитата Сообщение от llama15 Посмотреть сообщение
Есть какие-то способы решить эту проблему без разделения ячеек на столбцы по 255?
Потестировал у себя - всё работает!
MSO 2010 x86 ENG ...
Код:
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub LinkNow()
'Проверка!
    LinkExcelList "d:\Temp\BTestBook01.xlsx", "Sheet1", "Sheet1Test01"
End Sub
Public Function LinkExcelList(filePath As String, listName As String, tableName As String)
' es 18.01.04
' Подлинковка листа книги Excel в режиме: READONLY - редакция данных не доступна
' Возвращает код ошибки или 0
'-------------------------------------------------------------------------
'Аргументы:
'   filePath   = Полный путь к файлу
'   listName   = Название листа
'   tableName  = Название таблицы (в текущей базе)
'-------------------------------------------------------------------------
Dim strLink As String
Dim tdf As TableDef
'Удаляем старую таблицу (если есть)
On Error Resume Next
    DoCmd.DeleteObject acTable, tableName
    Err.Clear
On Error GoTo LinkExcelListErr
'Задаем строку подключения
    strLink = "Excel 8.0;DATABASE=" & filePath
    Set tdf = CurrentDb.CreateTableDef(tableName)
    tdf.Connect = strLink
'Задаем название листа
    tdf.SourceTableName = listName & "$"
'Создание подлинкованной таблицы
    CurrentDb.TableDefs.Append tdf
    Set tdf = Nothing
    CurrentDb.TableDefs.Refresh
    DoEvents
    Exit Function
 
LinkExcelListErr:
    LinkExcelList = Err.Number
    MsgBox "Функция [LinkExcelList] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
End Function
0
Миниатюры
Изменение типа данных связанных файлов   Изменение типа данных связанных файлов  
01.03.2019, 21:48
odbcsql
363 / 83 / 7
Регистрация: 14.08.2012
Сообщений: 238
01.03.2019, 23:02 5
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Я, между прочим, предварительно опубликовал одно из решений (с картинками)
О нем и речь. Оно неверное. Попробуйте его на приложенном файле
0
Вложения
Тип файла: xlsx BTestBook01.xlsx (11.1 Кб, 2 просмотров)
Eugene-LS
3905 / 2255 / 428
Регистрация: 05.10.2016
Сообщений: 6,273
01.03.2019, 23:19 6
Цитата Сообщение от odbcsql Посмотреть сообщение
О нем и речь. Оно неверное.
И где ошибка?
Заранее признателен!
0
odbcsql
363 / 83 / 7
Регистрация: 14.08.2012
Сообщений: 238
01.03.2019, 23:24 7
Цитата Сообщение от Eugene-LS Посмотреть сообщение
И где ошибка?
В 20-й строке ексель-файла длинная запись, больше 255 символов. Читаем вашей процедурой и получаем 255. И ни символом больше.
0
Eugene-LS
3905 / 2255 / 428
Регистрация: 05.10.2016
Сообщений: 6,273
01.03.2019, 23:29 8
Цитата Сообщение от odbcsql Посмотреть сообщение
Совершенно точно не для того, чтобы засирать чужой топик
Глюк!
Из вашего файла не берёт!
А из моего берёт! (строка 13)

Странно!

Видимо с файлом что то не так ... - но это не ответ!
Согласен!
Надо разбираться...
Возмётесь?
0
Миниатюры
Изменение типа данных связанных файлов  
Вложения
Тип файла: zip BTestBook01a.zip (7.3 Кб, 1 просмотров)
tc2014
10 / 9 / 2
Регистрация: 12.02.2015
Сообщений: 79
01.03.2019, 23:38 9
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Глюк!
Из вашего файла не берёт!
А из моего берёт! (строка 13)

Странно!

Видимо с файлом что то не так ... - но это не ответ!
Согласен!
Надо разбираться...
Возмётесь?
Думаю что достаточно тип поля в базе аксеса

поменять на текст и будет ок.
А не понимает из за версий...
0
Eugene-LS
3905 / 2255 / 428
Регистрация: 05.10.2016
Сообщений: 6,273
01.03.2019, 23:41 10
Цитата Сообщение от tc2014 Посмотреть сообщение
Думаю что достаточно тип поля в базе аксеса
У линкованных данных тип (свойства) поля не поменять, увы
А линковка в условии задачки.
0
odbcsql
363 / 83 / 7
Регистрация: 14.08.2012
Сообщений: 238
01.03.2019, 23:44 11
Лучший ответ Сообщение было отмечено Capi как решение

Решение

Цитата Сообщение от Eugene-LS Посмотреть сообщение
Глюк!
Из вашего файла не берёт!
А из моего берёт! (строка 13)
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Видимо с файлом что то не так ... - но это не ответ!
Согласен!
Надо разбираться...
Проблема ясная и описанная много раз. Excel присваивает тип полю по первым 10 или 15 строкам. Если в них короткие записи, будет ограничено типом Текст (255), если есть хоть одна длинная будет Мемо. Решение в том, что чтобы первой строкой был длинный текст. Или открывать Excel и читать поячейково.
2
tc2014
10 / 9 / 2
Регистрация: 12.02.2015
Сообщений: 79
01.03.2019, 23:45 12
Цитата Сообщение от Eugene-LS Посмотреть сообщение
У линкованных данных тип (свойства) поля не поменять, увы
А линковка в условии задачки.
Снять линк с таблицы
поменять тип поля, прилинковать
Случаянно получилось именно поэтому)

Нельзя впихнуть больше чем выделено места
0
Eugene-LS
3905 / 2255 / 428
Регистрация: 05.10.2016
Сообщений: 6,273
02.03.2019, 00:29 13
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Видимо с файлом что то не так ...
Нет! не в файле!
Кажется нашел! ....

Добавлено через 3 минуты
Цитата Сообщение от odbcsql Посмотреть сообщение
Проблема ясная и описанная много раз. Excel присваивает тип полю по первым 10 или 15 строкам. Если в них короткие записи, будет ограничено типом Текст (255), если есть хоть одна длинная будет Мемо.
Совершенно в дырочку!
Старый Excel сравнивал первые 3 строчки - а этот ....
Решение есть, но посложнее будет....

Добавлено через 28 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Решение есть, но посложнее будет....
А вот и оно решение (на скорую руку!)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Private Sub LinkNow() 'Проверка решения ...
 
Dim sPath As String
    
    sPath = "d:\Temp\BTestBook01.xlsx"
    
    esCreateFirstTextROW_in_ExcelWB sPath, 2, 1 'вставляет длинный текст в файл Excel
    LinkExcelList sPath, "Sheet1", "Sheet1Test01" 'Подлинковка листа книги Excel
    
End Sub
Public Function LinkExcelList(filePath As String, listName As String, tableName As String)
' es 18.01.04
' Подлинковка листа книги Excel в режиме: READONLY - редакция данных не доступна
' Возвращает код ошибки или 0
'-------------------------------------------------------------------------
'Аргументы:
'   filePath   = Полный путь к файлу
'   listName   = Название листа
'   tableName  = Название таблицы (в текущей базе)
'-------------------------------------------------------------------------
Dim strLink As String
Dim tdf As TableDef
'Удаляем старую таблицу (если есть)
On Error Resume Next
    DoCmd.DeleteObject acTable, tableName
    Err.Clear
On Error GoTo LinkExcelListErr
'Задаем строку подключения
    strLink = "Excel 8.0;DATABASE=" & filePath
    Set tdf = CurrentDb.CreateTableDef(tableName)
    tdf.Connect = strLink
'Задаем название листа
    tdf.SourceTableName = listName & "$"
'Создание подлинкованной таблицы
    CurrentDb.TableDefs.Append tdf
    Set tdf = Nothing
    CurrentDb.TableDefs.Refresh
    DoEvents
    Exit Function
 
LinkExcelListErr:
    LinkExcelList = Err.Number
    MsgBox "Функция [LinkExcelList] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
End Function
 
Public Sub esCreateFirstTextROW_in_ExcelWB(wbSoursePath As String, Optional iRow As Integer = 2, Optional iColumn As Integer = 1)
'es - 28.07.2012
'Процедура вставляет длинный текст в файл Excel (wbSoursePath)
'ВНИМАНИЕ!
'   MS Excel должен быть закрыт !
'--------------------------------------------------------------------
'Аргументы:
'   wbSoursePath  = Исходный файл
 
'--------------------------------------------------------------------
Dim objWorkbook As Object
'--------------------------------------------------------------------
On Error GoTo esCreateFirstROW_in_ExcelWB_Err
    
    Set objWorkbook = Get_ExcelWorkBook(wbSoursePath)
 
    With objWorkbook.Worksheets(1)
 
    '01 - Добавляем одну строку вверх листа :
        .Rows(iRow).Insert                    'Добавляем одну строку над iRow
        
    '02 - Пищем строку в 500 символов ( Например)...
        '.Range("A2").FormulaR1C1 = String(500, "Q")
        .cells(iRow, iColumn) = "Del Me NoW!" & vbCrLf & String(500, "Q")
    End With
'--------------------------------------------------------------------
'Сохраняем РЕЗУЛЬТАТ ...
    objWorkbook.Save
    DoEvents
    
esCreateFirstROW_in_ExcelWB_Bye:  'Закрываем всё!
    On Error Resume Next
    'Set objWorkheet = Nothing
    objWorkbook.Close
    Set objWorkbook = Nothing
    'objExcelApp.Quit
    'Set objExcelApp = Nothing
    Err.Clear
    Exit Sub
 
esCreateFirstROW_in_ExcelWB_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure esSRS_1C_Rep_MarkFirstROW", vbCritical, "Error!"
    Resume esCreateFirstROW_in_ExcelWB_Bye
End Sub
 
Public Function Get_ExcelWorkBook(sWBPath As String) As Object
'Перехват уже открытой локально книги MS Excel
'--------------------------------------------------------------------------
'Возвращает объект Application.WorkBook
'--------------------------------------------------------------------------
'Аргументы:
'   sWBPath = Путь к книге MS Excel
'--------------------------------------------------------------------------
'Функция получает доступ к книге Excel не зависимо от того, открыта она или нет
'  + Запущен Excel или нет то-же не важно.
'  * если только книга открыта по сети другим пользователем, то Save уже не пойдёт.
'--------------------------------------------------------------------------
Dim ExlApp As Object
Dim ExcelIsOpen As Boolean
Dim WbIsOpen As Boolean
On Error Resume Next
'Запуск MS Excel (если не запущен)
    Set ExlApp = GetObject(, "Excel.Application")
    If Err.Number = 429 Then
        'Debug.Print "Microsoft Excel не запущен. - Запускаем ...."
        'Debug.Print String(72, "-")
        Err.Clear
        Set ExlApp = CreateObject("Excel.Application")
        ExcelIsOpen = False
    Else
        ExcelIsOpen = True
    End If
 
    If ExcelIsOpen = False Then
        ExlApp.Visible = False
    
    Else
        ExlApp.Visible = True
    End If
    
    WbIsOpen = False
    For Each Get_ExcelWorkBook In ExlApp.WorkBooks
        If Get_ExcelWorkBook.FullName = sWBPath Then 'Книга уже открыта!
            'Debug.Print "Книга: " & Get_ExcelWorkBook.FullName  & " - Уже открыта."
            WbIsOpen = True
            Exit For
        End If
    Next Get_ExcelWorkBook
    
    
    If WbIsOpen = False Then 'если Книга не была открыта
        Set Get_ExcelWorkBook = ExlApp.WorkBooks.Open(sWBPath)
    End If
 
    'wrk.Save
    'ExlApp.WindowState = -4140 ' Свернуть окно Excel
 
 
End Function
Строку(и) с "Del Me NoW!" в начале - не обрабатываем! ... (пока так ...)

Добавлено через 7 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А вот и оно решение (на скорую руку!)
И ыссшо:
Есть возвожность предвалительно обработать лист, найти там первую же строчку длинее 255 символов и переместить её на вторую строку со смещением вниз.
Так будет "красивее", но это уж вы сами ...
2
llama15
0 / 0 / 0
Регистрация: 05.09.2018
Сообщений: 9
04.03.2019, 10:28  [ТС] 14
Огромное всем спасибо!
0
04.03.2019, 10:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2019, 10:28

Изменение типа данных в колонке
В Access изменил тип данных колонки с цифрового на текстовый(ибо цифровой был указан по ошибке),...

Изменение типа данных в DBGrid
Товарищи! Такая вот проблема. Есть DBGrid в нем есть столбец "Дата окончания лицензии". Так же на...

Изменение типа данных (Integer в Char)
опять я. есть таблица carta, где id имеет тип integer. Хочу преобразовать в char. Вот-так. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru