![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Из Delphi создаю Access файл, создаю в нем таблицу с Blob (Ole) полем и пытаюсь положить в это поле файлы. Но все они обрезаются до 32 kb. Как установить нужный размер поля?
Вот на всякий случай используемый код: var DBEngine, Workspace: Variant; db, td, recordset, recordset_f: Variant; const dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'; begin DBEngine := CreateOleObject('DAO.DBEngine.36'); Workspace := DBEngine.Workspaces[0]; Workspace.CreateDatabase('test', dbLangGeneral, EmptyParam); db := DBEngine.OpenDatabase('test'); td := db.CreateTableDef('tbl1', 0, '', ''); td.Fields.Append(td.CreateField('fld1',arrMDBTypes [ftBlob])); .... |
#2
|
||||
|
||||
![]() Решил я это проверить.
Сделал так: 1. Создал пустую базу данных средствами самого Access'a 2. Создал таблицу вот таким образом: Код:
ADOQuery1.SQL.Text:= 'CREATE TABLE tbl1 '+ '('+ 'fld1 OLEOBJECT '+ ');'; ADOQuery1.ExecSQL; Код:
ADOquery1.sql.text:='Insert into tbl1 (fld1) Values (:b)'; ADOQuery1.parameters.parseSQL(ADOquery1.sql.text, true); ADOQuery1.parameters.parambyname('b').LoadFromFile('c:\111.dbf',ftBlob); try ADOQuery1.execsql; except ShowMessage('Ашипка'); Exit; end; ShowMessage('Ok'); Юзайте, метод рабочий. ЗЫЖ Хотя стоит задуматься над пунктом 1, создавал базу я все-таки посредством Access'a, но ИМХО это не существенно |
#3
|
|||
|
|||
![]() Когда делаю то же самое, но создаю access файл программно - не работает
![]() |
#4
|
||||
|
||||
![]() Неправда ваша
Вот код Код:
procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Text:= 'CREATE TABLE tbl1 '+ '('+ 'fld1 OLEOBJECT '+ ');'; ADOQuery1.ExecSQL; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOquery1.sql.text:='Insert into tbl1 (fld1) Values (:b)'; ADOQuery1.parameters.parseSQL(ADOquery1.sql.text, true); ADOQuery1.parameters.parambyname('b').LoadFromFile('c:\111.dbf',ftBlob); try ADOQuery1.execsql; except ShowMessage('Ашипка'); Exit; end; ShowMessage('Ok'); end; procedure TForm1.Button3Click(Sender: TObject); var DBEngine, Workspace: Variant; const dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'; begin DBEngine := CreateOleObject('DAO.DBEngine.36'); Workspace := DBEngine.Workspaces[0]; Workspace.CreateDatabase('c:\db1.mdb', dbLangGeneral, EmptyParam); end; procedure TForm1.Button4Click(Sender: TObject); begin ADOConnection1.Connected:=true; Application.MessageBox('Ok','Ok'); end; порядок нажатия кнопок Button3 -> Button4 -> Button1 -> Button2 ADOConnection1.ConnectionString настроен на создаваемую базу ADOQuery1 настроен на ADOConnection1 Все работает, только загрузка идет на порядок дольше чем если базу создавать средствами Access'a |
#5
|
|||
|
|||
![]() А через что работаем, коллега? Если через BDE, то размер блоба в настройках алиаса (оракл и акцесс точно).
|
#6
|
|||
|
|||
![]() Ну, он же через DAO работает. Там были какие-то заморочки. Давно было, уже не помню. То ли тип надо было как-то хитро указывать, то ли еще что...
Вообще, перейди на ADO и создавай таблицы вручную (т.е. запуская нужные запросы). |