Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];

Вниз

MS Access-овские OLE-объекты. Как с ними работать без Access-а?   Найти похожие ветки 

 
ЮЮ ©   (2008-09-22 09:01) [0]

Ситуация такая: средствами Access-а был выполнен эксполт в таблицы на MS SQL. Поле стало типа image и Access все так же отображает из на формах из прилинкованных таблиц.

Однако возникли проблемы:
 Изменение (загрузка другой картинки) не сохраняется на сервере, хотя никаких ошибок Access не выдает. Идеально было бы воообще отказаться от Access-а, но возникает вопрос: чем докопаться до бинарных данных? TOleContainer.LoadFromStream считает поток данных неверным.


 
damp   (2008-09-22 10:15) [1]

Может так можно :
Напиши скрипт или проц-у на Accesse которая сохраняла бы двоичные данные в виде файлов в их естественном формате.
Затем напишешь проц-ру уже для Делпфи которая открывает файлы грузит и сохраняет их в TOleContainer в базе данных ..


 
sniknik ©   (2008-09-22 10:45) [2]

> TOleContainer.LoadFromStream считает поток данных неверным.
как записали(/что) тем и считает, если ожидает не в том формате то естественно будут неверными.
но если у тебя, это с аксесовской базой работает, а mssql-ем нет, при одинаковых данных (сравнить бинарное представление)... то гдето ошибка, в твоем коде скорее всего.


 
ЮЮ ©   (2008-09-22 10:58) [3]

> но если у тебя, это с аксесовской базой работает, а mssql-
> ем нет, при одинаковых данных


Аccess одинаково правильно работает с данными как в mdb, так и на сервере (только не сохранеяет в таблице). Вопрос в том, как работать без Ассess-а.


 
sniknik ©   (2008-09-22 11:15) [4]

> Аccess одинаково правильно работает с данными как в mdb, так и на сервере (только не сохранеяет в таблице).
т.е. ты с аксесовской базы не можеш прочитать обьект? ну тогда точно ошибка в коде.

> Вопрос в том, как работать без Ассess-а.
вообщето аксесс как программа это лишнее звено при написании программ на дельфи. и работается без него совершенно спокойно, стандартными средствами.
тот же TOleContainer насколько помню использовал(вернее тестил, т.к. ни в один проект это не пошло) для чтения обьектов без особых проблем. да и какие могут быть проблемы? - обычное блоб поле, положил обьект, взял обьект, положил картинку взял тоже самое, главное не потерять что где, если читать картинку как обьект естественно будут ошибки.


 
ЮЮ ©   (2008-09-22 11:43) [5]

> т.е. ты с аксесовской базы не можеш прочитать обьект? ну
> тогда точно ошибка в коде.

Да нет никакого кода, ибо непонятно чем вытащить те бинарные данные


> положил обьект, взял обьект, положил картинку взял тоже
> самое

Что значит "положид/взял" объект?
TOleCantainer.LoadFromStrem не всилах взять из блоб-а нгичего вразумительного, ибо таи и объекта то нет.
Судя по диалогу загрузки объекта в контенер в IDE, надо сначала тип объекта выбрать.
A в блобе может оказаться и "точечный рисунок" и "документ MS Word".


 
sniknik ©   (2008-09-22 13:18) [6]

> A в блобе может оказаться и "точечный рисунок" и "документ MS Word".
а, вот в чем проблема... ну, это то у меня было просто, т.к. я под определенные типы пробовал (нужно было), а что за тип данных у меня был и так, не приходилось вытаскивать из префикса самого поля, а зная что за обьект лежит просто создаешь именно его и все
> OleCont.CreateObject("OWC11.Spreadsheet", false); //OWC11.PivotTable OWC11.Spreadsheet OWC11.ChartSpace Excel.Sheet
правда после отказался от TOleCantainer, проще оказалось импортировать мелкософтские обьекты чем с общим контейнером работать.


 
ЮЮ ©   (2008-09-23 03:08) [7]

Но даже с объектом "точечный рисунок" возникает коллизия: объект созданный и загруженный в MS Access и Delphi IDE (YOleContainer) оказываютя совершно разнвми (даже судя по заголовкам) и не понимающие лруг друга :(

Кстати, я говорил, что image не сохраняется мз access-а в таблицу MS SQL. Так вот там была экспортироована ненормализованная с кучей nvarchar полей таблица, среди которых было одно image поле. Аналогично, т.е. без изменений (и без ошибок), работали и запросы ч/з ADO. Вылечилось по наитию: вынес это поле в отдельную таблюцу и все заработало.  

>правда после отказался от TOleCantainer, проще оказалось импортировать мелкософтские обьекты чем с общим контейнером работать.

Поделиться парой строчек, чтоб понять куда копать, не хочешь? :) Дело в том, что там с полтыши фотографий уже есть, да и формы пока аксесовские
использовать приходится.


 
sniknik ©   (2008-09-23 11:09) [8]

> объект созданный и загруженный в MS Access и Delphi IDE (YOleContainer) оказываютя
> совершно разнвми (даже судя по заголовкам) и не понимающие лруг друга :(
ну так, они и не должны совпадать, контейнер у аксесса может работать по другому (если он у него вообще есть).
есть гарантия только на то, что ты вытащишь то что положил
> обычное блоб поле, положил обьект, взял обьект, положил картинку взял тоже самое
а не то, что обьекты разных программ будут совпадать.

> Поделиться парой строчек, чтоб понять куда копать, не хочешь?
мой код тебе не поможет, но код проверки с TOleCantainer возможно (ниже), никаких проблем нет, если конечно читать то что писал а не что попало.

procedure TForm1.ButCreateObjectClick(Sender: TObject);
begin
 OleContainer1.InsertObjectDialog();
end;

procedure TForm1.ButSaveObjectClick(Sender: TObject);
var
 Stream: TStream;
begin
 Stream:= TMemoryStream.Create;
 try
   OleContainer1.SaveToStream(Stream);
   Stream.Position:= 0;
   ADODataSet1.Edit;
   TBlobField(ADODataSet1.FieldByName("Ole")).LoadFromStream(Stream);
   ADODataSet1.Post;
 finally
   Stream.Free
 end;
end;

procedure TForm1.ButLoadObjectClick(Sender: TObject);
var
 Stream: TStream;
begin
 Stream:= TMemoryStream.Create;
 try
   TBlobField(ADODataSet1.FieldByName("Ole")).SaveToStream(Stream);
   Stream.Position:= 0;
   OleContainer1.LoadFromStream(Stream);
 finally
   Stream.Free
 end;
end;

создаешь рисунок/документ/... делаешь в нем чтонибудь сохраняешь, читаешь.
и совершенно неважно к чему подцеплен ADODataSet1 к аксессу, или mssql или любому другому sql серверу, лиш бы у него были блоб поля, работать должно везде.


 
ЮЮ ©   (2008-09-24 10:56) [9]


> создаешь рисунок/документ/... делаешь в нем чтонибудь сохраняешь,
>  читаешь.


Проблема в том, что там много понаписано аксессовским "точечным рисунком", который почему-то очень отличается от того "точечного рисунка", что создается в TOleContainer-е.

Вот как бы подружиться именно с аксессовским OLE-объектом?


 
Anatoly Podgoretsky ©   (2008-09-24 10:57) [10]

> ЮЮ  (24.09.2008 10:56:09)  [9]

Насколько я знаю, он отличается дополнительными байтами, перед данными.


 
sniknik ©   (2008-09-24 11:33) [11]

> который почему-то очень отличается от того "точечного рисунка", что создается в TOleContainer-е.
еще бы не отличался, один создан мелкософтом другой борландом, один просто обьект "указатель" на то какому приложению передать данные на открытие, другой контейнер для внедрения этого приложения к себе в программу, а уже в нем "указатель" и данные. причем и "указатель" не факт что по тому же принципу построен, что у мелкософта.

> Вот как бы подружиться именно с аксессовским OLE-объектом?
научиться читать также как аксесс. разобрать что означает у него префикс, и создавать соответствующий обьект самому.
кстати если это все ради какогото "точечного рисунка" то это куча усилий зря, достаточно откинуть префикс и останется "чистый" bmp файл (посфикс не влияет, откинется при открытии), загрузить его в image не проблема.

> Насколько я знаю, он отличается дополнительными байтами, перед данными.
байты обьекта контейнера, байты внедренного обьекта, собственно данные, постфикс внедренного обьекта, посфикс контейнера.
примерно так. (посфиксы возможно лишние, у меня просто оставались "лишние" байты после данных когда разбирался, решил что это постфикс)


 
Anatoly Podgoretsky ©   (2008-09-24 12:56) [12]

> sniknik  (24.09.2008 11:33:11)  [11]

Так и я не хочу ломать голову.


 
ЮЮ ©   (2008-09-25 02:05) [13]

> 10] Anatoly Podgoretsky ©   (24.09.08 10:57)


> [11] sniknik ©   (24.09.08 11:33)


Спасибо. Наверное так пока и поступлю, покв аксесс в прицепе.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1239290520
DynaBlaster
2009-04-09 19:22
2009.06.14
Проектирование БД


15-1239049804
Юрий
2009-04-07 00:30
2009.06.14
С Днём рождения ! 7 апреля 2009 вторник


11-1197626410
chum
2007-12-14 13:00
2009.06.14
Проблема с KOLComObj


15-1238963824
GibiW
2009-04-06 00:37
2009.06.14
Сопряжение окружностей (помогите)


11-1201359442
Elec3C
2008-01-26 17:57
2009.06.14
Вопрос по Button у





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский