powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Varbinary(Max) разрешает занести только 400кб
13 сообщений из 13, страница 1 из 1
Varbinary(Max) разрешает занести только 400кб
    #35534174
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Имеется интерфейс на аксе, через который в таблицу на SQL сервере 2005 заносятся изображения. И если размер такого файла больше 400кб, то в базу данный рисунок уже не заносится. Почему такое происходит, ведь максимальный размер 2^31-1 байт, который можно занести?
Вот функция, которая заносит файл в базу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Function SaveFileToDB(sFiles As String) As Double
    Dim s As String
    
    On Error GoTo  1 
    s = Nz(sFiles, "")
    ImgPath = s
    For i =  1  To Len(ImgPath)
        If Mid(ImgPath, i,  1 ) = "." Then last_dot = i
    Next i
    ExtImg = Mid(ImgPath, last_dot +  1 ,  1000 )
    ExtImg = "." & ExtImg
    Me.ExtensImg.Value = ExtImg
    
    If (Dir(s) = "") Or (s = "") Then MsgBox "Файл не найден": Exit Function
    
    Set MStream = CreateObject("ADODB.Stream")
    MStream.Type = adTypeBinary
    MStream.Open
    MStream.LoadFromFile s
    Me.ScanDocField = MStream.Read
ex:
    Set MStream = Nothing
    Exit Function
 1 
    SaveFileToDB = Err.Number
    GoTo ex
End Function
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35551706
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подниму темку, так как 400 кб это слишком мало как оказалось. Нужно хотя бы мегабайт, лучше 2.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Function SaveFileToDB(sFiles As String) As Double
    Dim s As String
    Dim fso As Object, file As Object

    On Error GoTo  1 
    s = Nz(sFiles, "")
    ImgPath = s
    For i =  1  To Len(ImgPath)
        If Mid(ImgPath, i,  1 ) = "." Then last_dot = i
    Next i
    ExtImg = Mid(ImgPath, last_dot +  1 ,  1000 )
    ExtImg = "." & ExtImg
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.GetFile(ImgPath)
    If file.size > CLng( 400 ) *  1024  Then
        MsgBox "Размер файла превышает 400 килобайт"
        flag = True
        Exit Function
    End If
    
    Me.ExtensImg.Value = ExtImg
    
    If (Dir(s) = "") Or (s = "") Then MsgBox "Файл не найден": Exit Function
    
    Set MStream = CreateObject("ADODB.Stream")
    MStream.Type = adTypeBinary
    MStream.Open
    MStream.LoadFromFile s
    Me.ScanDocField = MStream.Read
    Set MStream = Nothing
    Set fso = Nothing
ex:
    Set MStream = Nothing
    Exit Function
 1 
    SaveFileToDB = Err.Number
    GoTo ex
End Function

Подскажите пожалуйста выход из ситуации.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35551810
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен тип поля image, а не varbinary.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552280
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyНужен тип поля image, а не varbinary.

С этим типом у меня SQL ругается:
'MyTable' table
- Unable to preserve trigger 'trChanges'.
Cannot use text, ntext, or image columns in the 'inserted' and 'deleted' tables.

А этот тригер мне нужен...
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552342
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи текст триггера.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552428
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПокажи текст триггера.

Вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
BEGIN
	SET NOCOUNT ON;

	declare @EventID as uniqueidentifier
	declare @UserAddress as varchar( 50 )
	Set @EventID=newid()

IF not UPDATE(WorkStatusDate) or not UPDATE(DateAddImage)

begin
	Update dbo.MyTable
	SET dbo.MyTable.DateUpdate = Getdate(), dbo.MyTable.UpdateEvent = @EventID
	FROM dbo.MyTable inner Join
	(SELECT Inserted.* FROM Inserted inner join Deleted On Inserted.RowID=Deleted.RowID) as Upd on
	dbo.MyTable.RowID=Upd.RowID
end 

Insert changes.MyTable (ClientID,DateUpdate,RowID,UpdateEvent,UpdateUser,UserMachine,UserApp)
SELECT Deleted.ClientID,GetDate(),Deleted.RowID, @EventID,
	SUSER_SNAME(),HOST_NAME(),APP_NAME()
FROM Inserted inner join Deleted On Inserted.RowID=Deleted.RowID

END
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552440
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что я нашел (цитата из http://www.sqlteam.com/Forums/topic.asp?TOPIC_ID=10813):
автор
You can't do any text/image column comparisons in a trigger. Those types of columns are not stored the same as the rest of the data, so they can't be made accessible using the deleted and inserted tables.

Secondly, text and image column modifications are not logged by default, and I believe they can only be logged using the WRITETEXT and UPDATETEXT commands. Basically this means the trigger can't tell if the text columns were updated anyway.

Reconsider whether you truly need text columns. There are far more limitations than advantages. You can always use multiple varchar columns if you need to store more than 8000 characters. Also read Books Online about text columns, and the READTEXT, WRITETEXT, and UPDATETEXT commands. You could rewrite your trigger as a stored procedure, and may be able to utilize these commands to do what you want.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552447
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам перевод нужен?
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552469
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConnВам перевод нужен?

Спасибо. В целом понял.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35552796
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
Update dbo.MyTable
	SET dbo.MyTable.DateUpdate = Getdate(), dbo.MyTable.UpdateEvent = @EventID
	FROM dbo.MyTable inner Join
	(SELECT Inserted.* FROM Inserted inner join Deleted On Inserted.RowID=Deleted.RowID) as Upd on
	dbo.MyTable.RowID=Upd.RowID
Никогда не пользовался конструкцией inner join (select … ) as , но думаю, что тут достаточно заменить Inserted.* на Inserted.RowID. И image заработает.
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35554053
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Код: plaintext
1.
2.
3.
4.
Update dbo.MyTable
	SET dbo.MyTable.DateUpdate = Getdate(), dbo.MyTable.UpdateEvent = @EventID
	FROM dbo.MyTable inner Join
	(SELECT Inserted.* FROM Inserted inner join Deleted On Inserted.RowID=Deleted.RowID) as Upd on
	dbo.MyTable.RowID=Upd.RowID
Никогда не пользовался конструкцией inner join (select … ) as , но думаю, что тут достаточно заменить Inserted.* на Inserted.RowID. И image заработает.

Image то вроде заработал, но что-то всё равно больше 400 килобайт файл цеплять у меня не хочет...
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35554464
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем мотивирует на этот раз?
...
Рейтинг: 0 / 0
Varbinary(Max) разрешает занести только 400кб
    #35554749
x33x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyЧем мотивирует на этот раз?

Тут уже всё трудно, даже затрудняюсь объяснить.
В аксесе выпадает с сообщением, что "Действие прерывано со связанным объектом" на строке:
Код: plaintext
1.
Me.Recordset.FindFirst strcrit
Me.Bookmark = Me.Recordset.Bookmark
когда я пытаюсь занести любой файл более 400 килобайт.
И файл как-то то попадает в базу, то нет.

В общем буду сам копаться, или просто оставлю ограничение в 400 килобайт.
В любом случае спасибо за помощь.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Varbinary(Max) разрешает занести только 400кб
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]