Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 doc в SQL  [new]
фокс
Guest
разумно ли хранить документы word excel в MSSQL? и как их туда загрузить?
28 дек 05, 19:32    [2218368]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
UP
29 дек 05, 06:07    [2219295]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Да, это можно и разумно....
Например так: http://www.caws.atnet.ru/vfox/sql7.html
С уважением, Алексей
29 дек 05, 08:16    [2219392]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
На MSSQL лучше для хранения документов и картинок использовать поле типа Image.
А отправлять их туда в девятке лучше через Blob

CREATE CURSOR file_excel(fe blob)
APPEND BLANK
APPEND MEMO fe FROM (pFileExcel) OVERWRITE

sqlexec(nConnect, 'insert into BD.dbo.BDTable(poleImage) values(?file_excel.fe)')
29 дек 05, 11:40    [2220064]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
И получать с сервера тоже через Blob:

Local cFile, cSql

cFile='c:\DocFile.xls'

CURSORSETPROP("MapBinary",.T.,0)

cSQL = 'select fe from BD.dbo.BDTable Where ....'
SQLExec(nConnect,cSQL, 'DocXLS')

IF RECCOUNT('DocXLS')>0
IF FILE(cFile)
DELETE FILE cFile
ENDIF
COPY MEMO fe TO (cFile)
ENDIF
29 дек 05, 11:55    [2220140]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
FoxLamer
На MSSQL лучше для хранения документов и картинок использовать поле типа Image.
А отправлять их туда в девятке лучше через Blob

Скажите пожалуйста, FoxLamer, а при работе через BLOB и Image (по сравнению с memo и Text соответственно) решена проблема "глотания" ODBC драйвером некоторых последовательностей символов (x0A + что-то) ? С хранением EXE- файлов я это не наблюдал, а вот при сохранении WODR-документов случалось.
С уважением, Алексей.
29 дек 05, 12:02    [2220174]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
Я это наблюдал при хранении файлов картинок примерно > 1000К. При использовании Image и Blob у меня этот эффект не проявлялся, хотя файлы изображений до 30Mb. Документы у меня хранятся в основном Вордовские. И тоже этот эффект пока не проявлялся.
29 дек 05, 12:09    [2220214]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Aleksey!

Судя по всему этого как раз и не должно происходить для blob/image - для
того он и предназначен. А вот для text/memo как раз должно происходить -
поскольку текст преобразуется учитывая всякие там collation и прочее... Не
предназначен text для хранения бинарной информации...

Posted via ActualForum NNTP Server 1.3

30 дек 05, 00:40    [2222466]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Igor Korolyov

Hi Aleksey!

Судя по всему этого как раз и не должно происходить для blob/image - для
того он и предназначен. А вот для text/memo как раз должно происходить -
поскольку текст преобразуется учитывая всякие там collation и прочее... Не
предназначен text для хранения бинарной информации...

Posted via ActualForum NNTP Server 1.3

Нет.. Это не так.
APPEND MEMO MemoFieldName FROM FileName[OVERWRITE] [AS nCodePage]
...
...
AS nCodePage
...
If you omit the AS nCodePage clause or specify 0 for nCodePage, no code page conversion occurs for the text file.
Т.е. если я не указал nCodePage, то конвертации не происходит.
Я насчет работы через blob/image я проверю. Гже-то у меня валяется Word - файл, который искажается при записи на сервер.
С уважением, Алексей.
30 дек 05, 08:49    [2222713]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
если есть наработки может кинете пример кода:

положить файл
достать
показать

30.12.05
думать некогда, суета, С НАСТУПАЮЩИМ!
30 дек 05, 19:50    [2224690]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
FoxLamer
На MSSQL лучше для хранения документов и картинок использовать поле типа Image.
А отправлять их туда в девятке лучше через Blob

CREATE CURSOR file_excel(fe blob)
APPEND BLANK
APPEND MEMO fe FROM (pFileExcel) OVERWRITE

sqlexec(nConnect, 'insert into BD.dbo.BDTable(poleImage) values(?file_excel.fe)')


почему-то у меня команда
APPEND MEMO fe FROM (pFileExcel) OVERWRITE не срабатывает
точнее она у меня выглядит так
APPEND MEMO rasp.doc FROM (c:\pr.xls) OVERWRITE

дает ошибку: The file specified does not exist.
30 дек 05, 20:59    [2224762]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Aleksey!

Э, не! Ты не путай фоксовый memo (который ко всему прочему ещё и атрибут
NOCPTRAN имеет - как раз для того чтобы заложенные в него бинарные данные
извлекались без перекодирования) и серверным Text - там совсем другие
правила работают... В лучшем случае наверное можно только закодировав в
BASE64 избежать ненужных конвертаций/искажений для бинарных файлов. А так -
пользуй Image...
Кстати интересный факт - в SQL2005 эти типы переименованы - и теперь они по
названию стали varchar/nvarchar и varbinary - просто в качестве размерности
ставится ключевое слово max...

СНГ :)

Posted via ActualForum NNTP Server 1.3

1 янв 06, 19:48    [2226085]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Igor Korolyov

Hi Aleksey!

Э, не! Ты не путай фоксовый memo (который ко всему прочему ещё и атрибут
NOCPTRAN имеет - как раз для того чтобы заложенные в него бинарные данные
извлекались без перекодирования) и серверным Text - там совсем другие
правила работают...

Ну и какие там интересно правила работают на сервере по отношению к полям типа Text ? В сравнении с полями типа Image ?


Igor Korolyov

В лучшем случае наверное можно только закодировав в
BASE64 избежать ненужных конвертаций/искажений для бинарных файлов...

А каким образом это сделать ? И не вырастит ли объем файла в два раза как минимум ?
С уважением, Алексей.
5 янв 06, 08:16    [2229968]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Aleksey!

> Ну и какие там интересно правила работают на сервере по отношению к полям
> типа Text ? В сравнении с полями типа Image ?

В MSDN весьма расплывчато про это говорится (хотя и упомянуто про bit
patterns). Впрочем ты же сам говорил про проблемы "с некоторыми
последовательностями символов" На разных платформах в частности разные
понятия про "перевод строки" - и если сервер ИНТЕРПРЕТИРУЕТ поле как
текстовое, то без сомнения он может например для одних клиентов "перевод
строки" считать как CRLF (это кстати только в Win стандарт такой! он не
кроссплатформенный), для других же проcто как LF - и соответственно при
записи со стороны Win клиента и чтении со стороны Unix будет "пропадание"
байта, а при обратном направлении наоборот - образуется "лишний" байт...
Уверен что это далеко не все конвертации которые претерпевает ТЕКСТ.

=========Beginning of the citation==============
Each text and ntext data value has a collation. Collations define attributes
such as comparison rules and sensitivity to case or accenting. The
collations for text values also specify a code page, which defines the bit
patterns used to represent each character. Each ntext value uses the Unicode
code page, which is the same for all the collations. Each database has a
default collation. When a text or ntext column is created, it is assigned
the default collation of the database unless you assign a specific collation
using the COLLATE clause. When two text or ntext values having different
collations are combined or compared, collation precedence rules determine
which collation is used for the operation.

Data in an image data is stored as a string of bits and is not interpreted
by SQL Server. Any interpretation of the data in an image column must be
made by the application. For example, an application could store data in an
image column using a BMP, TIFF, GIF, or JPEG format. The application that
reads the data from the image column must recognize the format of the data
and display it correctly. All an image column does is provide a location to
store the stream of bits that make up the image data value.
=========The end of the citation================

>> В лучшем случае наверное можно только закодировав в
>> BASE64 избежать ненужных конвертаций/искажений для бинарных файлов...

> А каким образом это сделать ?

Со стороны клиента вестимо. И это уж от используемого клиента зависит :) В
Фоксе это STRCONV()

> И не вырастит ли объем файла в два раза как минимум ?

Вырастет, но не в 2, а лишь на треть - пропорция 8/6 - т.е. 1 некодированный
байт это 1.(3) кодированных байта - ну и плюс к тому по стандарту должно
быть "выравнивание" (padding) на границу 4-х символов, хотя не всегда это
соблюдается :(

Posted via ActualForum NNTP Server 1.3

7 янв 06, 15:18    [2234431]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
2Aleksey-K
Еще раз поднимаю тему, т.к. я был неправ((
В поле Image тоже портятся файлы размером > ~22Mb(а не 30 как я утверждал)
Причем, этот же эффект я наблюдаю и на MSSQL2005 как в поле image, так и в поле varbinary(max)
Видимо дело в драйвере ODBC.
Как побороть проблему?

Вот пример испорченного файла jpg.
Размер 23Mb.
Снизу смазан...
Почему такое происходит? Может кто-нибудь знает?

К сообщению приложен файл. Размер - 0Kb
18 янв 06, 14:32    [2265870]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Вот черт!
А я уже перевел код под поля Image :(
Ну ладно. Зато мне показалось, что Image<>BLOB работает быстрее, чем Text<->MEMO.
А что портит, это да... Я тоже это проверил. ODBC "хавает" коды типа 0A с какой-то комбинацией других байт. Придется преобразовывать все в чистый тест с помощью STRCONV()
С уважением, Алексей
18 янв 06, 15:05    [2266055]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Можно так:
STRCONV(FILETOSTR("FileName.jpg"), 13)
и затем в MEMO (BLOB) поле и на сервер.

С уважением, Алексей
18 янв 06, 15:09    [2266073]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
автор
Можно так:
STRCONV(FILETOSTR("FileName.jpg"), 13)
и затем в MEMO (BLOB) поле и на сервер.

Спасибо, попробую...
А image все равно лучше, чем text, т.к. при загрузке в text портятся файлы гораздо меньшего размера...
18 янв 06, 15:59    [2266330]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
да здесь вообще другой глюк возник...
открыт курсор с полем blob в котором файл ворда, делаю:
a="c:\docum."+tip
COPY MEMO rasp.doc TO a

оно через раз, то делает файл, то нет...

какая-то полная фигня...
19 янв 06, 10:17    [2268241]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
2фокс
Попробуйте так:

local m.a, m.tip
m.tip='doc'
m.a="c:\docum."+m.tip
COPY MEMO rasp.doc TO (m.a)

2Aleksey-K
Спасибо, все заработало.
Теперь прогоняю через STRCONV() все файлы >20Mб
Только задержка возросла, т.к. STRCONV() работает с таким файлом ~4-5 c
Но это для меня не критично)
19 янв 06, 10:46    [2268419]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
FoxLamer
Aleksey-K
Спасибо, все заработало.
Теперь прогоняю через STRCONV() все файлы >20Mб
Только задержка возросла, т.к. STRCONV() работает с таким файлом ~4-5 c
Но это для меня не критично)

НЕМА ЗА ШО :)
Теперь мне осталось тоже самое сделать :)
Я правда храню в Text полях только EXE - файлы, но все равно надо перекодировать. Мало ли что .
С уважением, Алексей.
19 янв 06, 11:04    [2268528]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
не понятно, а если я храню файлы ворда, их что - тоже перекодировать?
19 янв 06, 11:51    [2268842]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
FoxLamer
Member

Откуда: СССР
Сообщений: 167
2фокс
Я храню сейчас файлы размером>20Мб, предварительно "прогнав" их через strconv(). Остальные - как обычно.
Все файлы в поле image, а на SQL2005-в varbinary(max)
19 янв 06, 12:24    [2269038]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL  [new]
фокс
Guest
FoxLamer
2фокс
Попробуйте так:

local m.a, m.tip
m.tip='doc'
m.a="c:\docum."+m.tip
COPY MEMO rasp.doc TO (m.a)

2Aleksey-K
Спасибо, все заработало.
Теперь прогоняю через STRCONV() все файлы >20Mб
Только задержка возросла, т.к. STRCONV() работает с таким файлом ~4-5 c
Но это для меня не критично)


И все-таки это ГЛЮК!!!
Глюк в 9-ке, перепробовал все, помогло только:
COPY MEMO rasp.doc TO "c:\DOCUM."+tip
т.е. прямое указание имени файла, через переменную НЕ РАБОТАЕТ!!!
19 янв 06, 15:17    [2269943]     Ответить | Цитировать Сообщить модератору
 Re: doc в SQL ПРОСТО ГЛЮК!!!  [new]
фокс
Guest
19 янв 06, 15:18    [2269952]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить