powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / SQL и картинки
25 сообщений из 58, страница 1 из 3
SQL и картинки
    #33637354
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые помогите плииз, а то мы тут уже вдвоем мучаемся ничего не выходит в общем так:
...
Рейтинг: 0 / 0
SQL и картинки
    #33637360
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри нечаянно нажал нето

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mstream As New ADODB.Stream
Dim SQLstr As String
Dim i As Integer

If ImgAddr.Text <> "" Then
cn = New ADODB.Connection
cn.ConnectionTimeout = 200
cn.Open("Provider=SQLOLEDB;data Source=WEBSRV;Initial Catalog=docob;User Id=docuser;Password=")
SQLstr = "Select docimg,uid from doclist"
rs = New ADODB.Recordset
rs.Open(SQLstr, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)



mstream = New ADODB.Stream
mstream.Type = ADODB.StreamTypeEnum.adTypeBinary
mstream.Open()
mstream.LoadFromFile(ImgAddr.Text)
rs.Fields("docimg").Value = mstream.Read
rs.Update()

rs.Close()
cn.Close()
Else : ImgAddr.Text = "отсутвует рисунок"
End If

End Sub
End Class

вот в таком виде картинка пишется в первую строку, как сделать чтобы писалось в любую????
...
Рейтинг: 0 / 0
SQL и картинки
    #33637446
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все не так просто, как кажется. Если б было просто - помог бы человеку своими силами
В общем, перевожу с русского на программистский :))
Visual Studio 2005, ADO 2.8, MS SQL Server 2000.

Код: 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.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mstream As New ADODB.Stream
Dim SQLstr As String
Dim i As Integer

    If ImgAddr.Text <> "" Then
        cn = New ADODB.Connection
        cn.ConnectionTimeout =  200 
        cn.Open("Provider=SQLOLEDB;data Source=WEBSRV;Initial Catalog=docob;User Id=docuser;Password=")
        SQLstr = "Select docimg,uid from doclist"
        rs = New ADODB.Recordset
        rs.Open(SQLstr, cn, ADODB.CursorTypeEnum.adOpenKeyset,    ADODB.LockTypeEnum.adLockOptimistic)

        ' Вот таким вот хитрым образом производится переход на 3-ю запись :))
        for i =  1  to  3 
            rs.MoveNext
        next

        mstream = New ADODB.Stream
        mstream.Type = ADODB.StreamTypeEnum.adTypeBinary
        mstream.Open()
        mstream.LoadFromFile(ImgAddr.Text)
        rs.Fields("docimg").Value = mstream.Read
        
        ' На этой строке - ошибка "Время ожидания истекло"
        rs.Update()

        rs.Close()
        cn.Close()
    Else 
        ImgAddr.Text = "отсутвует рисунок"
    End If

End Sub

Проблем две:
во-первых, непонятки со свойством rs.Source - он превратился в объект и у него появились свойства-члены - ToString, Eval и т.д. - как этим пользоваться?
во-вторых, при попытке получить ОДНУ запись с помощью логичного
"Select docimg, uid from doclist where uid = 3" при выполнении rs.Update() выдает ошибку "Время ожидания истекло" (в таблице 4 записи, размер файла - до 100 кБ) - с таким я еще не сталкивался (потому что на 2005-м, хвала БГ, не работал)
...
Рейтинг: 0 / 0
SQL и картинки
    #33637569
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, вот это:
mstream = New ADODB.Stream
не наша ошбика, - VS2005 автоматически убирает Set
...
Рейтинг: 0 / 0
SQL и картинки
    #33637651
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вот это:
ADODB.CursorTypeEnum.adOpenKeyset приходится писать, т.к. простого adOpenKeyset VS2005 не понимает... Я фигею с этого 2005-го, билли нам новую игрушку сделал... занимательную :))
...
Рейтинг: 0 / 0
SQL и картинки
    #33637668
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nibblesи вот это:
ADODB.CursorTypeEnum.adOpenKeyset приходится писать, т.к. простого adOpenKeyset VS2005 не понимает...
Даже если ADODB в референсах подключен?
...
Рейтинг: 0 / 0
SQL и картинки
    #33637687
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
угу, сам удивляюсь )))

From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33637704
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока безрезультатно.
Значит так, что делали:
1. Подключали вместо ADODB 2.8 библиотеку 2.5
2. Вместо "select [список полей]" писали "select *"
3. Вместо adOpenKeyset использовали adOpenDinamic

Какие еще будут предложения из раздела "Попинать шины"? :))
...
Рейтинг: 0 / 0
SQL и картинки
    #33639720
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
SQL и картинки
    #33640155
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
SQL и картинки
    #33640273
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот как я сохраняю файл в базу

Код: 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.
38.
39.
40.
41.
42.
43.
    Private Sub Report_Create()
        Dim lSqlConnection As SqlClient.SqlConnection = New SqlClient.SqlConnection(SqlConnection.ConnectionString)
        Dim lsdaTask As New SqlClient.SqlDataAdapter
        Dim dtTask As New DataTable
        Dim strFileName As String
        Dim fs As FileStream
        Dim abyte() As Byte

            lSqlConnection.Open()

            'создаем выражение select
            Dim lscSelect As New SqlClient.SqlCommand("здесь запрос", lSqlConnection)

            'создаем выражение update
            Dim lscUpdate As New SqlClient.SqlCommand("UPDATE ...", lSqlConnection)
            ' задаем параметры, если надо

            lscUpdate.Parameters.Add(New _
                SqlClient.SqlParameter("@R_ExcelData", System.Data.SqlDbType.Image,  0 , ParameterDirection.Input, True, CType( 0 , Byte), _
                CType( 0 , Byte), "Report_ExcelData", System.Data.DataRowVersion.Current, Nothing))

            'ссылка на объект
            lsdaTask.SelectCommand = lscSelect
            lsdaTask.UpdateCommand = lscUpdate

            'заполняем данные задачи
            lsdaTask.Fill(dtTask)

.....
здесь какая-то работа
.....
                'сохраняем отчет в базе 
                fs = New FileStream("путь и имя_файла" , FileMode.Open, FileAccess.Read)
                ReDim abyte(CInt(fs.Length))
                fs.Read(abyte,  0 , CInt(fs.Length))
                fs.Close()

                'сохраняем отчет в базе
                dtTask.Rows( 0 ).Item("Report_ExcelData") = abyte

            lsdaTask.Update(dtTask)     'обновляем данные
            lsdaTask.SelectCommand.Connection.Close()

end sub

может чем-то поможет
...
Рейтинг: 0 / 0
SQL и картинки
    #33642491
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оххх, короче поставил я VB 6 отдельно, перекинул процедуру, поправил синтаксис, и получил в результате туже самую ошибку. В общем не в Visual Studio дело. кто может что подсказать, откликнитесь пожалуйста.


From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33642732
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что за ошибка?
и приведите код на ВБ6
...
Рейтинг: 0 / 0
SQL и картинки
    #33642748
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибка: "Время ожидания истекло"

код на вб 6 отличается от Visual Studio только наличием Set'ов и отсутсвием скобок. на всякий случай приведу конечно:


From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33642755
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
Private Sub Command1_Click()
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mstream As New ADODB.Stream
Dim SQLstr As String
Dim i As Integer

        If ImgAddr.Text <> "" Then
            Set cn = New ADODB.Connection
            cn.ConnectionTimeout =  200 
            cn.Open "Provider=SQLOLEDB;data Source=WEBSRV;Initial Catalog=docob;User Id=docuser;Password="
            SQLstr = "Select docimg,uid from doclist"  
            Set rs = New ADODB.Recordset
            rs.Open SQLstr, cn, adOpenDynamic, adLockOptimistic
            For i =  1  To CInt(UIDnum.Text)
                rs.MoveNext
            Next i
            Set mstream = New ADODB.Stream
            mstream.Type = adTypeBinary
            mstream.Open
            mstream.LoadFromFile ImgAddr.Text
            rs.Fields("docimg").Value = mstream.Read
            rs.Update

        Else: ImgAddr.Text = "отсутвует адрес рисунка"
        End If
        
        rs.Close
        cn.Close

End Sub




From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33642784
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давай скрипт таблицы и всех dependens-объектов
...
Рейтинг: 0 / 0
SQL и картинки
    #33642824
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[doclist]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[doclist]
GO

CREATE TABLE [dbo].[doclist] (
[uid] [int] IDENTITY (1, 1) NOT NULL ,
[number] [char] (20) COLLATE Cyrillic_General_CI_AS NULL ,
[datedoc] [datetime] NULL ,
[lev1] [int] NULL ,
[lev2] [int] NULL ,
[docimg] [image] NULL ,
[comments] [varchar] (255) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33642997
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код рабочий
проверьте права досьтупа к серверу, таблице
и все-таки ИМХО лучше не выбирать все строки из таблицы, где есть поля типа IMAGE, а ограничивать выборку опреатором WHERE, т.к при больщих объемах данных (учитывая поля ИМАДЖ) сеть может не справляться и запрос отваливаться по таймауту
...
Рейтинг: 0 / 0
SQL и картинки
    #33643787
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Е-мое, никто что ли не знает как записываются байтовые массивы в базу???
заменить
Код: plaintext
rs.Fields("docimg").Value = mstream.Read
на
Код: plaintext
1.
2.
Dim r() as byte
r = mstream.Read
rs.Fields("docimg").AppendChunck r
...
Рейтинг: 0 / 0
SQL и картинки
    #33645072
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поехали:
1) я бы конечно тоже грешил на права доступа, если бы во-первых в первую строчку он не писал (пишет ведь!! ), и если бы я сам лично не создавал пользователя docuser у которого права dbo на эту базу. Проверю конечно на всякий случай.
2) AppendChunk штука конечно хорошая, но результат получаем тот же )) "Время ожидания истекло"
3) Кстати: когда я переделывал прогу под AppendChunk, я забыл поставить
r = mstream.read
дык вот, при этом запись в нужную строку прошла нормально, только конечно там была не картинка, поэтому выводить было нечего...

From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33645299
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хех, я тут решил проверить, самый тупой вариант: взял каринку на 12 кб, записалась, а вот больше 60 кб не хочет... кто знает где время ожидания поправить?
con.connectionTimeout?

From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33645307
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл сказать в первую строку пишет вне зависимости от размера...
From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
SQL и картинки
    #33645340
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял. Код в студию. Мой работает без проблем.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim r() As Byte
    cn.Open "driver={SQL Server};server=(local);database=callcenter"
    rs.Open "select * from doclist where uid is null", cn, adOpenKeyset, adLockOptimistic
    rs.AddNew
    Open "c:\100.txt" For Binary As # 1 
    ReDim r(LOF( 1 ))
    Get # 1 , , r
    Close # 1 
    rs("docimg").AppendChunk r
    rs.Update
End Sub
...
Рейтинг: 0 / 0
SQL и картинки
    #33645345
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл 100.txt под 200kb и влетает как птичка без всяких таймаутов.
...
Рейтинг: 0 / 0
SQL и картинки
    #33645403
Eugene D Dufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм ну ладно, вот вариант кода с использованием того что ты написал
Код: 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.
Private Sub Command1_Click()
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mstream As New ADODB.Stream
Dim SQLstr As String
Dim a() As Byte

        If ImgAddr.Text <> "" Then
            Set cn = New ADODB.Connection
            cn.ConnectionTimeout =  500 
            cn.Open "Provider=SQLOLEDB;data Source=WEBSRV;Initial Catalog=docob;User Id=docuser;Password="
            SQLstr = "Select docimg,uid from doclist where uid=" & UIDnum.Text
            Set rs = New ADODB.Recordset
            rs.Open SQLstr, cn, adOpenDynamic, adLockOptimistic
            Open ImgAddr For Binary As # 1 
            ReDim a(LOF( 1 )) As Byte
            Get # 1 , , a
            Close # 1 
            rs("docimg").AppendChunk a
            rs.Update

        Else: ImgAddr.Text = "ошибка"
        End If
        
        rs.Close
        cn.Close

End Sub



если UIDnum.text >= 2 то при попытке записать файл больше 12 кб получаем "Время ожидания истекло"


From Black Dragon with HOT Greetings
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / SQL и картинки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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