Приведение строки "0,00 р." к типу "Double" является недопустимым - Visual Basic .NET
Формулировка задачи:
при сборке проекта выводится ошибка: Приведение строки "0,00 р." к типу "Double" является недопустимым.
подскажите как исправить
собственно ругается в этом месте
Public Class Form1
Friend cn As OleDb.OleDbConnection
Friend da As New OleDb.OleDbDataAdapter
Dim ds As New DataSet
Dim G_Rec_ID
Friend Admin As Boolean = False
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Button2.Text = "Добавить" Then
If NumericUpDown1.Value + NumericUpDown2.Value = 0 Or TextBox1.Text = "" Then
MsgBox("Не все поля заполнены", MsgBoxStyle.Exclamation)
Exit Sub
End If
Dim InsCommand As New OleDb.OleDbCommand("INSERT INTO Calculate (Товар, Дата, Цена, Остаток) VALUES ('" & TextBox1.Text & "', " & AccDate(Now) & ", '" & NumericUpDown1.Value - NumericUpDown2.Value & "', '" & Label7.Text & "')", cn)
InsCommand.ExecuteNonQuery()
Else
Dim UpdCommand As New OleDb.OleDbCommand("UPDATE [Calculate] SET [Товар]='" & TextBox1.Text & "', [Цена]='" & NumericUpDown1.Value - NumericUpDown2.Value & "' WHERE [Код]=" & G_Rec_ID, cn)
UpdCommand.ExecuteNonQuery()
Button2.Text = "Добавить"
'G_Rec_ID = -1
End If
NumericUpDown1.Value = 0
NumericUpDown2.Value = 0
TextBox1.Text = ""
NUD_Focus()
Stat()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Close()
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
cn.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IO.File.Exists(Application.StartupPath & "\Admin.txt") Then Admin = True
cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\1.mdb")
cn.Open()
Label4.Text = Now.ToLongDateString
Stat()
Show()
NUD_Focus()
Button6.Enabled = Admin
End Sub
Sub Stat()
GetBalance()
GetSummToday()
GetSummYear()
GetSumm30Days()
DGV_Today()
End Sub
Private Sub NumericUpDown2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown2.ValueChanged
If NumericUpDown2.Value > 0 Then
NumericUpDown1.Value = 0
NumericUpDown1.Enabled = False
Else
NumericUpDown1.Enabled = True
End If
End Sub
Private Sub NumericUpDowns_KeyDown(ByVal s As NumericUpDown, ByVal e As System.Windows.Forms.KeyEventArgs) Handles NumericUpDown1.KeyDown, NumericUpDown2.KeyDown
If e.KeyCode = Keys.Delete Then s.Value = 0
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
If s.Value = 0 Then Exit Sub
TextBox1.Focus()
End If
End Sub
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
If NumericUpDown1.Value > 0 Then
NumericUpDown2.Value = 0
NumericUpDown2.Enabled = False
Else
NumericUpDown2.Enabled = True
End If
End Sub
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If TextBox1.TextLength = 0 Then Exit Sub
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
Button2.Focus()
End If
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
If DataGridView1.SelectedCells.Count = 0 Then Exit Sub
Dim Rec_ID As Integer = DataGridView1.SelectedCells(0).Value
Dim DeleteCommand As New OleDb.OleDbCommand("DELETE * from Calculate Where [Код] = " & Rec_ID, cn)
DeleteCommand.ExecuteNonQuery()
Stat()
End Sub
Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
TextBox1.Text = DataGridView1.SelectedCells(1).Value
If DataGridView1.SelectedCells(3).Value > 0 Then
NumericUpDown1.Value = DataGridView1.SelectedCells(3).Value
Else
NumericUpDown2.Value = DataGridView1.SelectedCells(3).Value * -1
End If
G_Rec_ID = DataGridView1.SelectedCells(0).Value
Button2.Text = "Сохранить"
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Form2.Show()
End Sub
'User Subs
Sub NUD_Focus()
NumericUpDown2.Focus()
NumericUpDown2.Select(0, 4)
NumericUpDown2.Value = 0
End Sub
Function AccDate(ByVal D As Date) As String
Return "#" & D.ToString("MM/dd/yyyy").Replace(".", "/") & "#"
End Function
Sub GetBalance()
Label7.Text = Labels("Select SUM(Цена) AS Price from Calculate")
End Sub
Sub GetSummToday()
Label1.Text = -Labels("Select SUM(Цена) AS Price from Calculate Where [Дата] = " & AccDate(Now) & " AND [Цена] < 0")
End Sub
Sub GetSumm30Days()
Label10.Text = -Labels("Select SUM(Цена) AS Price from Calculate Where [Дата] BETWEEN " & AccDate(Now.AddDays(-30)) & " AND " & AccDate(Now) & " AND [Цена] < 0")
End Sub
Sub GetSummYear()
Dim BeginYear As Date = "01.01." & Now.Year
Label8.Text = -Labels("Select SUM(Цена) AS Price from Calculate Where [Дата] > " & AccDate(BeginYear) & " AND [Цена] < 0")
End Sub
Function Labels(ByVal Comm As String) As String
da.SelectCommand = New OleDb.OleDbCommand(comm, cn)
Dim Sum As New DataTable
da.Fill(Sum)
If Sum.Rows.Count > 0 AndAlso Sum(0)(0).ToString <> "" Then
Return Format(Sum(0)(0), "0,00") & " грн."
End If
Return "0,00 грн."
End Function
Private Sub DGV_Today()
da.SelectCommand = New OleDb.OleDbCommand("Select * from Calculate Where [Дата] = " & AccDate(Now), cn)
Dim Data As New DataTable
da.Fill(Data)
Fill_DGV(Data)
End Sub
Sub Fill_DGV(ByVal Tbl As DataTable)
DataGridView1.DataSource = Tbl
DataGridView1.Columns(0).Visible = 0
DataGridView1.Columns(1).Width = 120
DataGridView1.Columns(2).Width = 65
DataGridView1.Columns(3).Width = 60
DataGridView1.Columns(4).Width = 60
End Sub
End Class Sub GetSummToday()
Label1.Text = -Labels("Select SUM(Цена) AS Price from Calculate Where [Дата] = " & AccDate(Now) & " AND [Цена] < 0")
End SubРешение задачи: «Приведение строки "0,00 р." к типу "Double" является недопустимым»
textual
Листинг программы
Fill_DGV(calcAdapter.GetData)