【问题标题】:Create Procedure and CheckBox in Visual Basic with WindowsForm使用 Windows 窗体在 Visual Basic 中创建过程和复选框
【发布时间】:2020-09-22 08:59:25
【问题描述】:

问题。 如何在 VB 中使用 CheckBox 来请求创建过程中的更改? 例如。: 这是我的 sql 代码和 Visual Basic 代码。 该过程提供一定时间的数据和前一天的数据。 WindowsForm 中显示的数据。 如果选中 CheckBox - 前一天的数据, 如果不检查 - 在一定时间内提供数据。

ALTER PROCEDURE [dbo].[UP_DIR_sel_protocol_DataImport]  
    @obj varchar(10), @k_uch varchar(10), @tab varchar(10), @pr_withLastdate int
AS
begin

set dateformat dmy

if (@pr_withLastdate = 0)
begin
    select * 
    from DIR_protocol_DataImport 
    where left(codDB,1)=(case @obj when 'FL' then '4' when 'UR' then '3' else left(codDB,1) end)
    and codDB=(case when @k_uch='' then codDB else @k_uch end) 
    and isnull(tab,'')=(case when @tab='' then isnull(tab,'') else @tab end) 
    order by codDB,tab,id
end
if (@pr_withLastdate = 1)
begin
    select * 
    from DIR_protocol_DataImport 
    where left(codDB,1)=(case @obj when 'FL' then '4' when 'UR' then '3' else left(codDB,1) end)
    and codDB=(case when @k_uch='' then codDB else @k_uch end) 
    and isnull(tab,'')=(case when @tab='' then isnull(tab,'') else @tab end)  
    and eddate<convert(datetime,convert(varchar(10),getdate(),104)) --без изменений текущего дня
    order by codDB,tab,id
end

end
Public Sub proc_protocol()
        Try
            'regim: "protocol"
            Grid_report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
            Me.Cursor = Cursors.WaitCursor

            Dim v_sql As String = ""
            Dim filtr_uch As String = "", filtr_tab As String = "", n_tab As Int16 = 0, last_date As Boolean

            If Check_uch.CheckedItems.Count() = 1 Then
                filtr_uch = Check_uch.CheckedItems.Item(0)
                filtr_uch = filtr_uch.Substring(1)
                filtr_uch = filtr_uch.Substring(0, filtr_uch.IndexOf(")"))
            End If
            If Ch_0.Checked Then
                n_tab += 1
                filtr_tab = "0"
            End If
            If Ch_1.Checked Then
                n_tab += 1
                filtr_tab = "1"
            End If
            If Ch_2.Checked Then
                n_tab += 1
                filtr_tab = "2"
            End If
            If Ch_3.Checked Then
                n_tab += 1
                filtr_tab = "3"
            End If
            If Ch_4.Checked Then
                n_tab += 1
                filtr_tab = "4"
            End If
            If Ch_5.Checked Then
                n_tab += 1
                filtr_tab = "5"
            End If
            If Ch_6.Checked Then
                n_tab += 1
                filtr_tab = "6"
            End If
            If Ch_8.Checked Then
                n_tab += 1
                filtr_tab = "8"
            End If
            If Ch_9.Checked Then
                n_tab += 1
                filtr_tab = "9"
            End If
            If Ch_del.Checked Then
                n_tab += 1
                filtr_tab = "del"
            End If
            If Ch_lastDate.Checked Then
                last_date("")
                n_tab += 1
                filtr_tab = "last"
            Else
                last_date("")

            End If
            If n_tab > 1 Then filtr_tab = ""

            v_sql = "exec dbo.UP_DIR_sel_protocol_DataImport " + M_convert.FM_strSTR("FL") + "," + M_convert.FM_strSTR(filtr_uch) _
                + "," + M_convert.FM_strSTR(filtr_tab) + "," + last_date.ToString()
            M_qSQL.Build_DGView(Me.Grid_report, v_sql)

            Grid_report.Refresh()
            Me.Cursor = Cursors.Default
            Grid_report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            Dim v_str = "Строк - " + Grid_report.RowCount.ToString
            ToolStripStatusLabel1.Text = v_str

        Catch ex As Exception
            MessageBox.Show("Oшибка в процедуре " + ex.Message, Me.Text)
        End Try
    End Sub

【问题讨论】:

  • 你的问题到底是什么——你做了什么,什么没有按预期工作,你遇到了什么样的错误等等?
  • 我不明白如何通过Visual Basic中的CheckBox从Procedure中获取WindowsForm中的先前数据。
  • 将 3 个反引号放在各自的行上。在标记为[sql-server][vb.net] 的问题中,将lang-vb 放在 vb 代码块的前 3 个反引号旁边,以防止其语法突出显示为 sqlserver
  • 您对last_date("")last_date.ToString() 的使用令人困惑。请发布解释它们的代码(它是一个重载的方法吗?)

标签: sql-server vb.net stored-procedures


【解决方案1】:

所以,我知道如何在 VB 中使用 CheckBox 在创建过程中进行更改请求^^

我应该在我的 VB 代码中添加 @... :D 非常感谢您的帮助!

Public Sub proc_protocol()
        Try
            'regim: "protocol"
            Grid_report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
            Me.Cursor = Cursors.WaitCursor

            Dim v_sql As String = ""
            Dim filtr_uch As String = "", filtr_tab As String = "", n_tab As Int16 = 0, last_date As Integer
'...
'...
'...
            If Ch_lastDate.Checked Then
                last_date = 1
                n_tab += 1
                filtr_tab = "last"
            Else
                last_date = 0

            End If

            If n_tab > 1 Then filtr_tab = ""

            **v_sql = "exec dbo.UP_DIR_sel_protocol_DataImport " _
            + "@obj = " + M_convert.FM_strSTR("FL") _
            + ",@k_uch = " + M_convert.FM_strSTR(filtr_uch) _
            + ",@tab = " + M_convert.FM_strSTR(filtr_tab) _
            + ",@pr_withLastdate = " + last_date.ToString() `this is @pr_withLastdate change request in the Create Procedure**

            M_qSQL.Build_DGView(Me.Grid_report, v_sql)
'...
'...
'...
        End Try
    End Sub

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多