ВБ вам инфо/ магазин информация
Привет, у меня тут небольшая проблема.
Во-первых, когда моя форма загружается, она получает информацию из базы данных (ms accsses)
Но если я внесу некоторые изменения в текстовые поля и нажму кнопку Сохранить, он не прочитает picturebox, что на нем есть изображение.
Потому что когда форма загружается, она загружает изображение в Picturebox , тогда я просто хотел отредактировать какой-то текст и нажать кнопку Сохранить, а он мне этого не позволит, потому что picturebox для него пуст.
Давайте начнем с прочитанной информации:
Try With cmd Dim stream As New IO.MemoryStream() conn.Open() .Connection = conn .CommandText = "select cPicture from Table where ID=@uID" .Parameters.Add("@uID", OleDbType.Integer, 50).Value = TextBox6.Text Dim image As Byte() = DirectCast(cmd.ExecuteScalar(), Byte()) stream.Write(image, 0, image.Length) Dim bitmap As New Bitmap(stream) PictureBox1.Image = bitmap '--->I have used another picturebox to display image from database. stream.Close() .Parameters.Clear() End With Catch ex As Exception MsgBox(ex.Message) Finally cmd.Dispose() If conn IsNot Nothing Then conn.Close() End If End Try
Здесь мне покажут картинку внутри picturebox (результат в порядке)
Теперь о спасении :
Try With cmd Dim ms As New IO.MemoryStream() PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) Dim arrimage() As Byte = ms.GetBuffer If Not PictureBox1.Image Is Nothing Then MsgBox("missing") Else MsgBox("has") End If conn.Open() .Connection = conn .CommandText = "UPDATE Table SET cName = @uName,cNumber = @uNumber,cSupplier = @uSupp,cStore = @uStore,cCount = @uCount,cPicture = @picture WHERE ID = 1" '.Parameters.Add("@uID", OleDbType.Integer).Value = TextBox6.Text .Parameters.Add("@uName", OleDbType.VarChar, 50).Value = TextBox1.Text .Parameters.Add("@uNumber", OleDbType.BigInt, 50).Value = TextBox2.Text .Parameters.Add("@uSupp", OleDbType.VarChar, 50).Value = TextBox3.Text .Parameters.Add("@uStore", OleDbType.VarChar, 50).Value = TextBox4.Text .Parameters.Add("@uCount", OleDbType.Integer, 50).Value = TextBox5.Text .Parameters.Add("@Picture", OleDbType.Binary).Value = arrimage .ExecuteNonQuery() .Parameters.Clear() ms.Close() End With Catch ex As Exception MsgBox(ex.Message) Finally cmd.Dispose() If conn IsNot Nothing Then conn.Close() End If End Try
И вот он дает мне сообщение:
MsgBox("missing")
И запрос требовал 6 вещей, чтобы внести изменения.
Как ее решить?
Что я уже пробовал:
не знаю точно, откуда берется проблема
0x01AA
Должно ли это быть так If Not PictureBox1.Image Is Nothing Then
не будь такимIf PictureBox1.Image Is Nothing Then
?
diablo22
да, моя ошибка в копии здесь, но это только для теста, я добавляю это, чтобы увидеть ... что он не распознает, чтобы иметь картинку.
Проблема возникает при выполнении запроса, он не запускает его, потому что ожидает 6 аргументов
0x01AA
"это не работает" означает что? Есть ли сообщение об ошибке/исключении?
Richard MacCutchan
Вы добавили uID
как первый параметр в вашем наборе, но этого нет в вашем наборе. INSERT
команда. Если столбец id объявлен автоматически сгенерированным, то вам не следует пытаться добавить его вручную. Если он не генерируется автоматически, то вам нужно включить его в INSERT
заявление.
0x01AA
жидкость закомментирован. И эта команда называется UPDATE
Richard MacCutchan
Спасибо, что я пропустил этот (смехотворно бесполезный) комментарий Марка.
Переформатировал вопрос (добавил тип языка в тег <pre>), Чтобы четко показать закомментированную часть.
0x01AA
:недурно:
Кстати: вы получаете уведомления в Q/A, например, когда я пишу это?
Я все еще не получаю уведомлений в Q/A, даже с задержкой.
Richard MacCutchan
Я получаю письмо с этим сообщением. И он появляется в списке комментариев выше (выпадающий список в маленьком красном квадрате).
0x01AA
Спасибо за ваш ответ. Похоже, мне нужно активировать уведомления по электронной почте, чтобы получить маленькую красную коробочку здесь, в Q/A. Я немного боюсь менять свои настройки, потому что в моем профиле всегда заранее выбран переключатель "забыть меня навсегда" :-)
Richard MacCutchan
Вау, это кажется неправильным. Вы сообщили об этом Крису?
0x01AA
До сих пор об этом не сообщалось. Но я изменил свой профиль, чтобы получить электронную почту для Q/A. Я все еще здесь, но все еще не получаю уведомлений :(
Ничего особенного, я могу с этим жить.
Еще раз большое вам спасибо за ваши отзывы.
diablo22
это правильно, и когда я пытаюсь обновить его, он терпит неудачу и говорит, что ему нужно 6 аргументов, и я думаю, что в picturebox не удается получить данные
0x01AA
Я не знаю. VB.NET, но может ли быть так, что параметры в VB.NET чувствительны ли они к регистру? Если да то это может быть проблемой:.Parameters.Add("@Picture", OleDbType.Binary).Value = arrimage
против. "UPDATE Table SET .... cPicture = @picture WHERE ID = 1"
Кстати: когда вы отвечаете на конкретный комментарий, пожалуйста, ответьте с помощью кнопки ответа комментария. Таким образом, ОП комментария будет проинформирован ;)
diablo22
я думаю, что нашел проблему, когда использую :
.Параметры.AddWithValue("@uName", TextBox1.Text)
.Параметры.AddWithValue("@uNumber", TextBox2.Text)
.Параметры.AddWithValue("@uSupp", TextBox3.Text)
.Параметры.AddWithValue ("@uStore", TextBox4.Text)
.Параметры.AddWithValue("@uCount", TextBox5.Text)
Работы исправляют все...Поэтому мне нужно проверить параметры
0x01AA
Вы проверили чувствительные к регистру вещи? Просто не устанавливая параметр, можно также неявно установить значение в null