#vb.net
#vb.net
Вопрос:
получить ошибку в этой строке
Ещё
Hitung = Microsoft.VisualBasic.Right(Rd.GetString(0), 3) 1
Комментарии:
1. Ваша строка — это буквы, двойник — это число; вы не можете преобразовать буквы в число.
2. Пожалуйста, включите опцию Strict. Это процесс из 2 частей. Сначала для текущего проекта — в обозревателе решений дважды щелкните Мой проект. Выберите Compile слева. В раскрывающемся списке Option Strict выберите ВКЛ. Во-вторых, для будущих проектов — Перейдите в меню Сервис -> Параметры -> Проекты и решения -> VB Defaults. В раскрывающемся списке Параметр Строгий выберите ВКЛ. Это избавит вас от ошибок во время выполнения.
3. Вероятно, это очень помогло бы, если бы вы точно сообщили нам, где вы получили эту ошибку
4. Это большой объем кода, чтобы показать, что кажется ошибкой в одной строке.
5. извините, я впервые задаю вопрос в этой сети, извините
Ответ №1:
Какую базу данных вы используете, для которой требуется Odbc, а не ее собственный поставщик?
Я бы предположил, что метки изначально пусты, поэтому нет необходимости устанавливать значение .Text
""
.
Call
Ключевое слово больше не требуется.
Избавьтесь от Koneksi
метода и объявлений Cmd
and Rd
. Объекты базы данных должны создаваться и размещаться в том методе, в котором они используются. Язык предоставляет Using...End Using
блоки, которые заботятся об этом для нас, даже если есть ошибка.
Не обновляйте пользовательский интерфейс (заполняйте поле со списком, метки и т. Д.), Пока соединение открыто. Если вы используете a DataTable
, считыватель (для которого требуется открытое соединение) может заполнить его, и соединение может быть закрыто.
Не объединяйте строки для построения инструкций sql. Всегда используйте параметры. Посмотрите ComboBox1.SelectedIndexChanged
событие.
Наконец, в последнем методе я вижу вашу проблему в NomorOtomatic
методе. Опция Strict поможет вам. Смотрите мой комментарий.
Hitung = Microsoft.VisualBasic.Right(Rd.GetString(0), 3) 1
Старый Right
метод vb6 возвращает a String
. Вы не можете добавить единицу в строку. Компилятор пытается преобразовать Right(Rd.GetString(0), 3)
в a Double
, чтобы он мог выполнить добавление. По-видимому, то, что отображается "ual"
, не может быть преобразовано в число.
Я заменил Right
метод на Substring
метод .net. См. https://docs.microsoft.com/en-us/dotnet/api/system.string.substring?view=net-5.0
Я добавил a .TryParse
, чтобы проверить, есть ли допустимое число, и корректно завершил работу, если синтаксический анализ не удался.
Private ConStr As String = "Your connection string"
Dim tgljualMySQL As String
Sub kondisiawal()
lbltanggal.Text = Today
lbladmin.Text = FormMenuUtama.STLabel4.Text
TextBox3.Enabled = False
Label12.Text = "0"
munculkodepelanggan()
NomorOtomatis()
BuatKolom()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
lbljam.Text = TimeOfDay.ToString
End Sub
Private Sub Formtransjual_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
kondisiawal()
End Sub
Sub munculkodepelanggan()
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd As New OdbcCommand("select * from tbl_pelanggan", Conn)
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
For Each row As DataRow In dt.Rows
ComboBox1.Items.Add(row(0))
Next
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd As New OdbcCommand("select * from tbl_pelanggan where kodepelanggan = ?;", Conn)
Cmd.Parameters.Add("@ComboText", OdbcType.NVarChar, 50).Value = ComboBox1.Text
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
If dt.Rows.Count > 0 Then
lblnamaplg.Text = dt(0)("namapelanggan")
lblalamat.Text = dt(0)("alamatpelanggan")
lbltelepon.Text = dt(0)("telppelanggan")
End If
End Sub
Sub NomorOtomatis()
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd = New OdbcCommand("Select * from tbl_jual where nojual in(select max(nojual) from tbl_jual)", Conn)
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
If dt.Rows.Count > 0 Then
Dim StrHitung = dt(0)(0).ToString
Dim Hitung As Integer
If Not Integer.TryParse(StrHitung.Substring(StrHitung.Length - 3), Hitung) Then
MessageBox.Show($"Database returned {StrHitung}. The right 3 characters cannot be converted to a number")
Exit Sub
End If
TextBox1.Text = "ADM" amp; (Hitung 1)
Else
TextBox1.Text = "ADM001"
End If
End Sub
Кстати, что вы собираетесь делать, когда ваши цифры будут выше 999?
Комментарии:
1. @RevaDiva Вы включили
If Not Integer.TryParse
код? Если это так, вы не должны получать никаких ошибок; просто окно сообщения. Если в вашей базе данных неверные данные, вы не можете использовать этот метод. Это ужасный способ получить первичный ключ. Пусть база данных выполняет автоматическое числовое поле для создания PK.