БД Access и файл

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

БД Access и файл

Сообщение Prickly » 03.07.2005 (Вс) 10:28

Hi!

Не могу записать массив байт в поле Memo.

Код создания поля:

Код: Выделить всё

...
    'создаем поле FileArea
    Set F1 = NewTbl.CreateField("FileArea", dbMemo)
    F1.Attributes = dbUpdatableField
    F1.AllowZeroLength = False
    NewTbl.Fields.Append F1
...


Считываю в массив файл и пытаюсь записать в БД так:

Код: Выделить всё

    Dim BinaryData() as Byte
...
    File1 = FreeFile()
    Open strFile For Binary As #File1
      ReDim BinaryData(0 To LOF(File1) - 1)
      Get #File1, , BinaryData()
    Close #File1
    r(3).AppendChunk BinaryData()
...


Но на последней строчке из фрагмента листинга возникает ошибка

/Data type conversion error./

Может кто ткнет меня носом в ошибку?

Заранее благодарен.
Не было бы Гейтса, не было бы нас!

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 04.07.2005 (Пн) 8:19

////
Последний раз редактировалось Al Khamid 07.12.2007 (Пт) 17:56, всего редактировалось 1 раз.

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 07.07.2005 (Чт) 22:02

Нужно просто разместить файл в БД
Не было бы Гейтса, не было бы нас!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 08.07.2005 (Пт) 4:10

М.б. лучше OLE поле?
Бороться и искать, найти и перепрятать!

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 11.07.2005 (Пн) 10:11

Нет OLE здесь не подходит.

Надо именно Memo
Не было бы Гейтса, не было бы нас!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 11.07.2005 (Пн) 10:19

Memo? Хммм... Я, конечно, не спец в аксессе, но что-то мне подсказывает, что тип поля с таким названием может банально не позволять вставлять в себя нетекстовые символы - ну там, Chr(0) или Chr(20) какой-нить...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.07.2005 (Пн) 10:42

Не, в Access в Memo можно запихнуть все.
Но я все-же советовал бы использовать OLE.
Lasciate ogni speranza, voi ch'entrate.

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 11.07.2005 (Пн) 21:00

В ADO япрекрасно записал массив, а вот в DAO не выходит!!!

Странно...
Не было бы Гейтса, не было бы нас!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.07.2005 (Пт) 17:10

В DAO я записывал двоичный файл в базу (поле MEMO) так:

читал файл блоками по 10 Кб в строку, а потом так

rS!MemoField = Moya_Stroka

при этом целостность файла сохранялась полностью
А я все практикую лечение травами...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.07.2005 (Пт) 17:12

Для бинарных (и MEMO) полей рекомендуется не прямая работа с содержимым, а использование методов Append/GetChunk.
Lasciate ogni speranza, voi ch'entrate.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.07.2005 (Пт) 17:14

Я знаю, но у меня все работало прекрасно... :!:
А я все практикую лечение травами...

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 15.07.2005 (Пт) 21:34

To Павлов Максим файл наверно был текстовы, поэтому и целостность не нарушалась. Я прав?
Не было бы Гейтса, не было бы нас!

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 15.07.2005 (Пт) 22:28

Не подскажет кто, какой размер OLE поля (LongBinary)?
Не было бы Гейтса, не было бы нас!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 18.07.2005 (Пн) 6:31

2 Prickly Нет, я вшивал в БД и Zip и Exe!

А размер у OLE ОЧЕНЬ БОЛЬШОЙ !!! :wink:
А я все практикую лечение травами...

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 18.07.2005 (Пн) 8:22

Prickly писал(а):Не подскажет кто, какой размер OLE поля (LongBinary)?

Вроде как до 2Gb
Бороться и искать, найти и перепрятать!

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 18.07.2005 (Пн) 20:51

Дык вроде как сама БД до 2GB! Ну может малость по больше
Не было бы Гейтса, не было бы нас!

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 18.07.2005 (Пн) 20:55

2 Павлов Максим Как ты по 10кб в строку из exe загонял?
Не было бы Гейтса, не было бы нас!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 19.07.2005 (Вт) 6:06

Prickly писал(а):Дык вроде как сама БД до 2GB! Ну может малость по больше

Обшибся я... :(
OLE Object - Up to 1 gigabyte (limited by available disk space)
Memo - Up to 65,535 characters. (If the Memo field is manipulated through DAO and only text and numbers [not binary data] will be stored in it, then the size of the Memo field is limited by the size of the database.)
Бороться и искать, найти и перепрятать!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.07.2005 (Вт) 6:31

Вот, ток тут по 30 Кб, эт прям вырезка из моей проги:
Код: Выделить всё
.gGe.Value = 0
.gGe.Max = FileLen(CurFilePath)
ff = FreeFile
Open CurFilePath For Binary Access Read Lock Read As #ff
    Do While Loc(ff) < LOF(ff)
        DoEvents
        If prStop Then SaveFileToBase = False: Exit Function
        If prPause Then
            Do
                DoEvents
                If prStop Then SaveFileToBase = False: Exit Function
                If Not prPause Then Exit Do
            Loop
        End If
        s1 = Input(1024 * 31, #ff)
        .gGe.Value = .gGe.Value + Len(s1)
        s = s & s1
    Loop
    .cmdStop_Click
Close
Set rS = dB.OpenRecordset("select SourceFile, FileName from tblProjects where NameID=" & Prj)
rS.Edit
rS!SourceFile = s
rS!FileName = TrimString(CurFileName)
rS.Update
Set rS = Nothing
А я все практикую лечение травами...

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 21.07.2005 (Чт) 21:08

Ворос закрыт. Спасибо всем
Не было бы Гейтса, не было бы нас!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 41

    TopList