Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поле - Тип данных: Двоичный / 10 сообщений из 10, страница 1 из 1
11.08.2004, 11:27:53
    #32644104
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле - Тип данных: Двоичный
Попалась мне база в формате Access 97 с очень странным полем. Тип данных - Двоичный. В поле хранились обычные строки. При этом в таблице быkи и обычные текстовые поля.

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

Вот по поводу типа данных вопросы:
1. как научить Access 2003 нормально отображать текст в этих полях.
2. как самому создавать поля с таким типом данных
3. как изменить размер поля с таким типом данных
4. зачем вообще оно нужно
...
Рейтинг: 0 / 0
11.08.2004, 11:51:12
    #32644178
Roma R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле - Тип данных: Двоичный
SELECT t1.fNumber, StrConv([fBinary],64) AS Выражение1, t1.fText, t1.fMemo
FROM t1;
...
Рейтинг: 0 / 0
11.08.2004, 11:59:04
    #32644203
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле - Тип данных: Двоичный
Что там ANSI, я догадывался. Но вопрос не в этом.
...
Рейтинг: 0 / 0
11.08.2004, 12:11:48
    #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
11.08.2004, 12:58:19
    #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
11.08.2004, 13:09:12
    #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
11.08.2004, 13:13:13
    #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
11.08.2004, 13:16:50
    #32644460
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле - Тип данных: Двоичный
Зачем нужен такой тип?


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

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

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

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

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


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