Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS SQL + ADOTable + doc файлы 
:(
    Опции темы
Гость_алек
Дата 13.10.2005, 08:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте! Подскажите как в таблицу MS SQL помещать и считывать doc.* файлы. Использутся Delphi7, ADOТable.
  Вверх
offline
Дата 13.10.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Вот посмотри

Код

procedure TForm1.Button1Click(Sender: TObject);
var MSWord: Variant;
begin
MSWord := CreateOleObject('Word.Application');
MSWord.Visible:=True;
MSWord.Documents.Open(ExtractFilePath (Application.ExeName)+'\1.doc');
MSWord.ActiveDocument.Range.Select;//Выделяем весь документ
MSWord.Selection.Copy;//Копируем кусок в буфер
RichEdit1.PasteFromClipboard();//Вставляем куда нужно, папример в RichEdit
end;

PM MAIL   Вверх
Гость_алек
Дата 13.10.2005, 10:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(kirilllius @ 13.10.2005, 09:48)
Вот посмотри

Код

procedure TForm1.Button1Click(Sender: TObject);
var MSWord: Variant;
begin
MSWord := CreateOleObject('Word.Application');
MSWord.Visible:=True;
MSWord.Documents.Open(ExtractFilePath (Application.ExeName)+'\1.doc');
MSWord.ActiveDocument.Range.Select;//Выделяем весь документ
MSWord.Selection.Copy;//Копируем кусок в буфер
RichEdit1.PasteFromClipboard();//Вставляем куда нужно, папример в RichEdit
end;

Это конечно интересно, спасибо, но мне бы хотелось посмотреть как именно работать с полем БД, как записать туда файл Word и как этот файл открыть снова в Word
  Вверх
offline
Дата 13.10.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



т.е. ты хочешь хранить сам файл в базе?

Зачем дуть базу, можно хранить в ней только ссылки на файл, а затем запускать файлы по ссылкам. Но это не удобно тем, что придется таскать файлы за собой.
Другой способ, это считать содержимое файла через поток в Blob поле. А при открытии файла сохранять обратно содержимое Blob поля на винт и открывать его с винта.
PM MAIL   Вверх
Гани
Дата 19.10.2005, 09:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте!
У меня к ВАМ такой вопрос:
на дельфи использую компонент ADOQuery. хотел сделать update. Не подскажете как правильно использовать этот компонент.

adoQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(' update и тд ');
А потом что ? ADOQuery1.ExecSQL или ADOQuery1.Open ?
  Вверх
offline
Дата 19.10.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



ADOQuery1.ExecSQL


ADOQuery1.Open используется тогда, когда ADOQuery1 возвращает результат, а update или delete результатов не возврацают ;)

PM MAIL   Вверх
Guest
Дата 19.10.2005, 10:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тогда он мне ошибку выдает.
У меня есть таблица состоящий из двух полей id, count. На форме я ввожу в edit1 число(id).
Он должен отнимать из count значение 2 соответствующий числу(id). Как это делать?
  Вверх
offline
Дата 19.10.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Наверно так

Код

UPDATE Tab SET count = count - 2
WHERE ID=4
;

PM MAIL   Вверх
Gans
Дата 19.10.2005, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



sql код правильный.
Но на Дельфи через adoquery

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update db2inst1.tmc set count=count-2 where id='+J+'');
ADOQuery1.ExecSQL;

Здесь J я ввожу с клавиатуры
Этот код выдает ошибку

Acces violation at address 1f453E7E in modul "msado15" . Write of address 02465010
Это че за ошибка?
PM MAIL   Вверх
offline
Дата 19.10.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



А что это J+''

попробуй так

J := Edit1.Text;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update db2inst1.tmc set count=count-2 where id='+ QuotedStr(J));
ADOQuery1.ExecSQL;

Это сообщение отредактировал(а) kirilllius - 19.10.2005, 21:53
PM MAIL   Вверх
Gans
Дата 20.10.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



Здравствуйте!!
Как можно через dbComboBox посмотреть данные одного поля таблицы (ADOTable)?

while not ADOTable1.Eof do
begin
DBComboBox1.Items.Add(ADOTable1.FieldByName('last_name').AsString);
ADOTable1.Next;
end;
А этот код не корректно работает.
Кто нибудь подскажите пожалуйста.
S O S.
PM MAIL   Вверх
offline
Дата 20.10.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Скажи, по-русски, что ты хочешь посмотреть?
PM MAIL   Вверх
НурболКазбеков
Дата 21.10.2005, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.10.2005

Репутация: нет
Всего: нет



Как в Delphi c помощью Word-а (WordDocument или WordApplication) просмотреть doc-файлы, которые хранятся в блоб-полях. Заранее спасибо.
PM MAIL   Вверх
НурболКазбеков
Дата 21.10.2005, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.10.2005

Репутация: нет
Всего: нет



kirilllius: Как в Delphi c помощью Word-а (WordDocument или WordApplication) просмотреть doc-файлы, которые хранятся в блоб-полях. Заранее спасибо.
PM MAIL   Вверх
offline
Дата 21.10.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Попробуй считать Ворд файлы обратно из блоб полей через поток и сохранить его на винт, а затем открыть этот файл с винта.
PM MAIL   Вверх
YurikGL
Дата 22.10.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
MSWord.Selection.Copy;//Копируем кусок в буфер
RichEdit1.PasteFromClipboard();//Вставляем куда нужно, папример в RichEdit


Крайне не советую использовать буфер обмена т.к. у пользователя там могло что-нибудь лежать.

Цитата
Зачем дуть базу, можно хранить в ней только ссылки на файл, а затем запускать файлы по ссылкам. Но это не удобно тем, что придется таскать файлы за собой.

Это часто нужно для создания единой системы разграничения прав в базе данных.

Автору: Работа с документами ворд в смысле помещения их в БД ничем не отличается от помещения других двоичных данных в БД. Теперь по поводу открытия документов ворда из базы или записи их в БД, наиболее корректный вариант ИМХО - работа через файлы (уже упомянутая kirilllius). Сначала сохранем из базы на винт, потом открываем во ворде или сначала сохраняем на винт из ворда а потом записываем в базу.


PM MAIL WWW ICQ   Вверх
offline
Дата 22.10.2005, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата
kirilllius: Как в Delphi c помощью Word-а (WordDocument или WordApplication) просмотреть doc-файлы, которые хранятся в блоб-полях. Заранее спасибо.


Если файл записан в блоб поле через TMemoryStream, то вот как его прочитать

Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Potok : TMemoryStream;
begin
 try
  Potok := TMemoryStream.Create;
  TBLOBField(ADOTable1.FieldByName('Blob_поле')).SaveToStream(Potok);
  Potok.Position := 0;
  Potok.SaveToFile('C:\Temp.doc');
  ShellExecute(Handle, 'open','C:\Temp.doc',nil,nil,SW_SHOWNORMAL);
 finally
  Potok.Free;
 end;
end;

PM MAIL   Вверх
offline
Дата 26.10.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата

но когда я редактирую и закрываю документ, запрашивает о сохранении. Нажимаю Ок, но изменение нигде не сохраняется, ни в базе, ни в оригинале (в самом документе).


Итак
1 мы считываем и сохраняем данные в файл C:\Temp.doc Поэтому когда ты после редактирования нажимаешь кнопку принять изменения, то они вносятся именно в файл C:\Temp.doc а ни в какой другой. Чтобы эти изменения сохранились в базу, то тебе нужно этот файл C:\Temp.doc опять через поток сохранить в Блоб поле. Сам фай туда не сохранится.
2 чтобы сохранить файл в блоб поле есть два варианта легкий и тяжелый.
легкий - это кинуть кнопочку на форму по нажатию на которой будет выбранный или определенный файл записываться в блоб поле.
тяжеллый - это создание процесса. т.е. создаешь прощесс, запускаешь ворд, редактируешь файл, закрываешь Ворд, процесс конотолирует Водд и как только процесс завершается, то файл C:\Temp.doc записывается а блоб поле.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.