![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 и создавай таблицы вручную (т.е. запуская нужные запросы). |