带有sql查询的条件语句

时间:2014-05-05 04:30:41

标签: sql-server vb.net

我之前发过一个问题,但它太复杂了,我认为这就是为什么没有人试图回答它的原因。所以我决定用最简单的方式来做这件事。所以这是我的代码:

    Private Sub frmcrc_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    conn = GetConnect()
    Dim com As New SqlClient.SqlCommand
    Dim dr As SqlClient.SqlDataReader

    conn.Open()
    com.CommandText = "Select * from tblCRClearance where crc_no = '" & frmComm.txtCRCNum1.Text & "'"
    com.Connection = conn
    dr = com.ExecuteReader
    dr.Read()

    txtCRCNo.Text = dr!crc_no
    txtCLTAcctNo.Text = dr!crc_clientno
    lblrootpayee.Text = dr!crc_rootpayee
    txtPayeeName.Text = dr!crc_payeename
    txtClientName.Text = dr!crc_clientname
    txtProjName.Text = dr!crc_projectname
    txtCommType.Text = dr!crc_commtype
    txtGrossAmt.Text = dr!crc_grossamount
    txtWTax.Text = dr!crc_withheld
    txtCALType1.Text = dr!crc_caliqtype1
    txtCALDate1.Text = dr!crc_caliqdate1
    txtCALNo1.Text = dr!crc_caliqnum1
    txtCALAmt1.Text = dr!crc_caliqamt1
    txtCALDesc1.Text = dr!crc_caliqdesc1
    txtCALType2.Text = dr!crc_caliqtype2
    txtCALNo2.Text = dr!crc_caliqnum2
    txtCALAmt2.Text = dr!crc_caliqnum2
    txtCALDate2.Text = dr!crc_caliqdate2
    txtCALDesc2.Text = dr!crc_caliqdesc2
    txtCALType3.Text = dr!crc_caliqtype3
    txtCALDate3.Text = dr!crc_caliqdate3
    txtCALNo3.Text = dr!crc_caliqnum3
    txtCALAmt3.Text = dr!crc_caliqamt3
    txtCALDesc3.Text = dr!crc_caliqdesc3
    txtCALIQ.Text = dr!crc_caliqtotal
    txtNetAmt.Text = dr!crc_netamount
    txtVoucherNum.Text = dr!crc_voucherno
    txtCRLNum.Text = dr!crc_crlno
    txtDate.Text = dr!crc_date
    txtCPFNo.Text = dr!crc_cpfno
    txtPreparedBy.Text = dr!crc_preparedby
    txtCheckedBy.Text = dr!crc_checkedby
    txtApprovedBy.Text = dr!crc_approvedby
    txtGrossPrice.Text = dr!crc_grossprice
    txtLess1.Text = dr!crc_lessprice1
    txtDesc1.Text = dr!crc_lessdesc1
    txtLess2.Text = dr!crc_lessprice2
    txtDesc2.Text = dr!crc_lessdesc2
    txtLess3.Text = dr!crc_lessprice3
    txtDesc3.Text = dr!crc_lessdesc3
    txtNetSellingP.Text = dr!crc_netsellingprice
    txtRate.Text = dr!crc_rate
    txtGrossRel.Text = dr!crc_grossrelease
    txtDed1.Text = dr!crc_ded1
    txtDDesc1.Text = dr!crc_deddesc1
    txtDed2.Text = dr!crc_ded2
    txtDDesc2.Text = dr!crc_deddesc2
    txtDed3.Text = dr!crc_ded3
    txtDDesc3.Text = dr!crc_deddesc3
    txtDed4.Text = dr!crc_ded4
    txtDDesc4.Text = dr!crc_deddesc4
    txtDed5.Text = dr!crc_ded5
    txtNetRel.Text = dr!crc_netrelease
    txtCollectibles.Text = dr!crc_collectibles


    conn.Close()


    txtCLTAcctNo.Text = frmComm.cmbAcctNo1.Text
    txtCRLNum.Text = frmComm.txtCRLNo.Text
    txtProjName.Text = frmComm.txtUnitCode1.Text
    txtClientName.Text = frmComm.cmbClientName1.Text + " " + frmComm.Label13.Text

    txtCommType.Text = frmComm.cmbParticulars1.Text
    txtPayeeName.Text = frmComm.cmbPayee01.Text
    Me.lblrootpayee.Text = frmComm.lblrootpayee.Text

End Sub

它的工作方式如下:sql查询获取的crc编号与txtCRCNum1中的数据相同。它的工作方式与我想要的一样,但我有一些问题。我有30个文本框,就像txtCRCNum1一样,因此将有30个不同的crc编号值,具体取决于我将获得其值的文本框。我想要一个条件语句,其中它检查应该包含crc编号的文本框是否为空。如果它是空的,那么将显示字段:

    txtCLTAcctNo.Text = frmComm.cmbAcctNo1.Text
    txtCRLNum.Text = frmComm.txtCRLNo.Text
    txtProjName.Text = frmComm.txtUnitCode1.Text
    txtClientName.Text = frmComm.cmbClientName1.Text + " " + frmComm.Label13.Text

    txtCommType.Text = frmComm.cmbParticulars1.Text
    txtPayeeName.Text = frmComm.cmbPayee01.Text
    Me.lblrootpayee.Text = frmComm.lblrootpayee.Text

如果不为空,则执行sql查询部分。

我应该如何设置条件语句以使其按照我的描述工作?

2 个答案:

答案 0 :(得分:1)

您可以像处理其他类一样向表单添加过程和方法。在这种情况下,由于CRCForm在所有情况下都取决于crc值,我们将在构造函数中传递它。

Public Class frmcrc
    ' a crc value property
    Private _crcVal As String = ""            ' I am guessing it is string

    ' the constructor
    public Sub New(crcval As String)
         ' This call is required by the designer.
         InitializeComponent()

         _crcVal = crcval
    End Sub

    ' etc
End Class

当用户点击30(?!)文本框/按钮对中的一个时。这需要一个表单实例而不是VB默认实例(即frmcrc.Show),无论如何都是坏的。

Dim f As New frmCrc(txtCRCNum1.Text)
f.Show

表单现在具有处理TB1,Tb2或TB22所需的值。表格不需要知道或关心它来自何处。该查询将在SQL中使用_crcVal。

现有的表单加载代码只需要处理_crcValString.Empty的情况。如果它不是String.Empty,那么只发布frmComm部分(可能应该是一个类)否则执行查询并显示结果。

您还可以向表单添加CrcValue属性以执行查询并显示结果而不创建新的表单实例,只需使用新的crcvalue。

修改

“其他”东西的一个类 - 我无法分辨数据代表什么,我称之为BaseAcct:

Public|Friend Class BaseAcct
   Public Property AccountNumber As String

   Public Property UnitCode As String
   ' etc

End Class

较新的版本支持自动实现的属性,这就是定义属性所需的全部内容。旧版本,您需要编写Get和Set代码。您还可以添加FetchDataDisplayData等过程,让类从一个表单获取数据并将其发布到另一个表单,指定哪个表单作为参数。您必须将数据从一个表格复制到另一个表格的ELSE可以是:

  Dim BAcct As New BaseAcct
  ' ... etc

  If _crcVal <> String.Empty Then 
     ' ...

  Else
      BAcct.Display(Me)    ' let the class post the data to this form
  End If

crcVal可以是类中的一个属性,但即使它是,我还是要求它在构造函数中传递给frmcrc,因为似乎是的形式没有它就毫无意义。也就是说,您的代码不应该能够创建没有该值的表单实例。

答案 1 :(得分:0)

首先,你应该知道所有30个文本框ID'。我不知道你会在哪里放置if语句。但我建议你有一个button_click事件,你将检查所有文本框。

所有不同的30个文本框的另一件事,你有相同的文本框,如txtCRCNo,txtCLTAcctNo,lblrootpayee等, 如果是这样,那么您一次只能允许一个文本框。

因此,为所有文本框创建textbox_TextChanged事件,而在文本框中键入时,所有其他文本框都应为空。

注意:将所有文本框放在面板中。

  Sub txtCRCNum1_TextChanged()
       txtCRCNum2.Text=""
       txtCRCNum2.Enabled=False
       ' and so on
  End Sub

现在很容易在button_click

上制作解决方案
  Sub button_click()
    Dim ctrl As New Control
    For Each ctrl In Panel1.Controls
        If TypeOf ctrl Is TextBox Then
            If ctrl.Text <> "" Then
                'sql query with that textbox
            End If
        End If
    Next