Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.05.2006, 12:51
CKC CKC вне форума
Прохожий
 
Регистрация: 04.05.2006
Сообщения: 2
Репутация: 10
Вопрос Как установить размер Blob поля?

Из 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  
Старый 04.05.2006, 13:56
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Решил я это проверить.
Сделал так:
1. Создал пустую базу данных средствами самого Access'a
2. Создал таблицу вот таким образом:
Код:
  ADOQuery1.SQL.Text:=
  'CREATE TABLE tbl1 '+
  '('+
  'fld1 OLEOBJECT '+
  ');';
  ADOQuery1.ExecSQL;    
3. Загрузил файл размером 55 мегабайт вот таким образом:
Код:
  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  
Старый 04.05.2006, 14:59
CKC CKC вне форума
Прохожий
 
Регистрация: 04.05.2006
Сообщения: 2
Репутация: 10
По умолчанию

Когда делаю то же самое, но создаю access файл программно - не работает А мне нужно создавать его именно программно.... Может при создании параметр какой нужно указать?
Ответить с цитированием
  #4  
Старый 05.05.2006, 05:45
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Неправда ваша
Вот код
Код:
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  
Старый 13.10.2008, 23:04
AlexGree AlexGree вне форума
Прохожий
 
Регистрация: 26.02.2008
Сообщения: 1
Репутация: 10
По умолчанию

А через что работаем, коллега? Если через BDE, то размер блоба в настройках алиаса (оракл и акцесс точно).
Ответить с цитированием
  #6  
Старый 14.10.2008, 02:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, он же через DAO работает. Там были какие-то заморочки. Давно было, уже не помню. То ли тип надо было как-то хитро указывать, то ли еще что...
Вообще, перейди на ADO и создавай таблицы вручную (т.е. запуская нужные запросы).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025