powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поле - Тип данных: Двоичный
10 сообщений из 10, страница 1 из 1
Поле - Тип данных: Двоичный
    #32644104
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попалась мне база в формате Access 97 с очень странным полем. Тип данных - Двоичный. В поле хранились обычные строки. При этом в таблице быkи и обычные текстовые поля.

В 97 Access их с виду не отличишь от обычных строк, а в Access 2003 - иероглифы. Копание в реестре (...Nls\CodePage...; ...\FontMapper...) привело к тому, что русский появился везде (в некоторых программах раньше встречались иероглифы вместо русских букв), но поле в Access 2003 по прежнему оставалось с иероглифами. Задачу удалось решить только сохранив таблицу в текстовый файл, и заново импортировав двоичные поля как строки.
Такого типа данных теоретически нет в природе. Но в конструкторе чёрным по белому написано: Тип данных - Двоичный.

Вот по поводу типа данных вопросы:
1. как научить Access 2003 нормально отображать текст в этих полях.
2. как самому создавать поля с таким типом данных
3. как изменить размер поля с таким типом данных
4. зачем вообще оно нужно
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644178
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT t1.fNumber, StrConv([fBinary],64) AS Выражение1, t1.fText, t1.fMemo
FROM t1;
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644203
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что там ANSI, я догадывался. Но вопрос не в этом.
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644247
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Как я понял, ты взял базу, в которой текст хранится в ANSI, тебе его нужно конвертонуть

UPDATE t1 SET t1.fBinary = StrConv([fBinary],64);

2 и 3. ALTER TABLE t1 ADD COLUMN НовоеПоле Binary(87);
Думаю размер можно задать и в конструкторе

4. Зачем нужен такой тип? Думаю для совместимости с другими базами
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644404
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Roma R
спасибо всё понял, но по поводу последнего вопроса - непонятки.
ведь в оригинальной таблице строки хранились в двух видах полей - двоичных и текстовых.

провёл эксперимент:
создал таблицу счётчик + строка (254)
индексы по счётчику-ключ, по строке-допускаются совпадения
результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
формат базы     формат поля                   размер файла
Ассесс 2003     текст (сжатие Юникод)         2,19 МБ
Ассесс 2003     текст ()                      2,16 МБ
Ассесс 2003     двоичный                      12,3 МБ
Ассесс 97       текст ()                      1,3 МБ
Ассесс 97       двоичный                      12,4 МБ
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644443
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет marvan
Поскольку файл в формате 97, думаю, поле создавали в VBA-коде, манипулируя TableDefs

примерно следующим образом

Код: plaintext
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.
  Dim dbC As Database
  Dim newTable As TableDef
  
  Set dbC = CurrentDb
  
  Set newTable = dbC.CreateTableDef("tableForBinaryFields")
  
  
  Dim tField As dao.Field
  
 
  With newTable
      'поле ID - будет счетчиком 
     
     Set tField = .CreateField("ID",  4 )  'dbLong 
     tField.Attributes = tField.Attributes And dao.dbAutoIncrField
     .Fields.Append tField
    
      'поле binField - будет двоичным 
     Set tField = .CreateField("binField",  9 )  'dbBinary 
     tField.Size =  25   ' длина поля в байтах 
     
     .Fields.Append tField
  End With
   
   
   dbC.TableDefs.Append newTable
   dbC.TableDefs.Refresh

двоичное поле хранит произвольные данные - что напишешь, то и будет.
Если формат файла > 97 и хранить будешь строки, то заказывать надо удвоенную длину, поскольку писаться будет юникод.

По поводу крякозябров. - Как всегда, песня из двух куплетов. Если проблема возникает в пределах одной версии, то поем так:
у поля есть свойство CollationOrder, (не провярял, но) думаю, что для избавления от крякозябров достаточно подрулить его значение.

При переносе с 97 в 2003, думаю, проблема возникает в связи с тем, что 97й пишет в поле ANSI, а 2003 читать хочет юникод. Поэтому и работает либо указанный Roma R StrConv, либо выгрузка/загрузка через текстовый файл. Вновь загруженные данные строковые уже в юникоде в поле пишутся.
Вот так я думаю.

С выражением лица,
Victosha
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644453
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvan2 Roma R
спасибо всё понял, но по поводу последнего вопроса - непонятки.
ведь в оригинальной таблице строки хранились в двух видах полей - двоичных и текстовых.

провёл эксперимент:
создал таблицу счётчик + строка (254)
индексы по счётчику-ключ, по строке-допускаются совпадения
результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
формат базы     формат поля                   размер файла
Ассесс 2003     текст (сжатие Юникод)         2,19 МБ
Ассесс 2003     текст ()                      2,16 МБ
Ассесс 2003     двоичный                      12,3 МБ
Ассесс 97       текст ()                      1,3 МБ
Ассесс 97       двоичный                      12,4 МБ


Текст - это фактически VarChar, а двоичное - честное binary - без Var - сколько байт заказал размера, столько и получил размера файла
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644460
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем нужен такой тип?


Ну массив фиксированного размера или структуру туда можно записать.
в отличие от LongBinary (OLE) - слишком редко применяется в акцессах, чтобы его в конструктор размещать ...

(думаю так. или выражение лица у меня такое.)
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644500
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, двоичный тип данных действительно ошибка природы. Редкий зверь с тремя кривыми лапами.
...
Рейтинг: 0 / 0
Поле - Тип данных: Двоичный
    #32644577
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvanПохоже, двоичный тип данных действительно ошибка природы. Редкий зверь с тремя кривыми лапами.

ну, может, им строка фиксированной ширины понадобилась, и они ее прямо в базе фиксировать решили...

А может, они так интернационализацию делали...

(с выражением лица)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поле - Тип данных: Двоичный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]