Тема: Ограничение размера прикрепляемых файлов к объекту

Возникла необходимость ограничить размер прикрепляемых файлов, причем при добавлении нескольких файлов одновременно, ограничение действовало и на сумму их размеров. Пробовала в обработчиках событий File_BeforeAdd,File_BeforeCheckIn писать следующее:

Sub File_BeforeAdd(File, Object, Cancel)
Dim sizeMax
sizeMax=5242880
If File.Size >= sizeMax Then
Cancel=true
msgbox "Недопустимый размер файла!!"
End If
End Sub

НО размер добавляемого файла=0. Я так понимаю, что раз файл ещё не в базе, то TDMS не  может выдавать свойства внешнего файла. Мот как-нить через FileSystemObject перехватить ентот добавляемый файл, а?Подскажите, пожалуйста,  как  быть с этим ограничением?

Re: Ограничение размера прикрепляемых файлов к объекту

На данный момент не возможно отлавливать в событии BeforeAdd размер файла или его путь откуда он загружается, да и в FileSystemObject нужно явно указывать путь для GetFile. Могу предложить только такое решние. в событии File_Added, но если размеры файлов большие то все будет долго   :(

Sub File_Added(File, Object)
dim maxsize
maxsize = 5000
msgbox file.size
if file.size > maxsize then
   file.erase
end if
End Sub

Re: Ограничение размера прикрепляемых файлов к объекту

спасибо   :( . такой вариант был и возник вопрос : а эти  операции лишнего добавления-удаления  на базу никак не повлияют, не будет ли она из-за этого разростаться? и ещё: например,при добавлении группы файлов  только сумма их размеров превышает допустимое значение, как тогда удалить только эти файлы, а не все имеющиеся?

(изменено: vorona, 2 апреля 2009г. 14:23:57)

Re: Ограничение размера прикрепляемых файлов к объекту

"например,при добавлении группы файлов только сумма их размеров превышает допустимое значение  ;)"
если добавлять файлы группой(кучкой) то они обрабатываются по очереди
if file.size > maxsize then
file.erase
end if
происходит проверка каждого добавленного файла на соответствие размера, если не подходит то файл удаляется, после чего проверяется следующий. Прикрепленные файлы к объекту до этого не учитываются. Впринципе когда я испытывал данный скриптик работало все нормально, но советую самим попробывать потестить на копии базы.    ;)
событие File_Added генерируется в случае успешного добавления файла к объекту. Если добавляется группа файлов - событие генерируется для каждого файла в отдельности.

Re: Ограничение размера прикрепляемых файлов к объекту

а может запихивать имена успешно добавленных в Dictionary, может ещё время добавления какое-нибудь и типа если разница между соседними меньше минуты(хотя опять же от размера фалов будет зависить время добавления   :( ),то считать, что они добавлялись вместе и удалять соответственно вместе и после такой штоуки прерывать добавление последующих файлов?

Re: Ограничение размера прикрепляемых файлов к объекту

Надо запомнить какие файлы добавили. Это можно по разному сделать в тот же Dictionary записывать их имена из FileAdded, а потом заново получить их с объекта и проанализировать, не нужное удалить.   :rolleyes:

Re: Ограничение размера прикрепляемых файлов к объекту

спасибки за совет   :rolleyes:  тока про засорение базы не услышала ответа..

Re: Ограничение размера прикрепляемых файлов к объекту

Rutik пишет:

спасибки за совет   :rolleyes:  тока про засорение базы не услышала ответа..

Сильно не должна засоряться   ;)

Re: Ограничение размера прикрепляемых файлов к объекту

Есть операция "уминания" базы. Если SQL Server полноценный, можно настроить на автоматическое выполнение этой операции.

Re: Ограничение размера прикрепляемых файлов к объекту

Можно и на Express Edition.  ;)
При нем же SQL Agent тоже крутится, значит и задания выполняются... ) Просто jobs руками придется создавать. )) Ну или через Management Studio от других платных изданий. ))))

Но! усечение БД не даст урезания объема самих данных, просто высвободит свободное место БД (вернет операционке). И его будет не так много.
Так что добавление-удаление файлов конечно прибавит к размеру базы, но максимум на 10% (зависит от настроек SQL), которые в последствии все равно забьются данными.

Причем объем файла данных (mdf/ndf) особо не усечется (те самые 10%). А вот журнал транзакций/лог-файл БД (ldf) желательно периодически резать. И для этого есть специальная утилитка в TDMS Администраторе. ))

таким образом усечение БД есть смысл делать только в 2х случаях:
1. после капитальной чистки данных. Т.е. когда удаляются сами данные, размер БД остается неизменным и соответственно его желательно сократить до реальных значений.
2. При переносе/копировании базы через detach/attach, чтобы не копировать лишние "нули". )) Но ИМХО не лучший способ переноса/копирования БД. Backup|Restore лучше и проще (Опять же ИМХО)
А вот лог-файл пухнет постоянно. И если его периодически не подрезать, может перерасти по объему сами данные. Режится, кстати, он и при создании полной резервной копии БД.