我要根据输入的姓名或者编号查找某信息,我把代码贴出来,
Private Sub cmdFind_Click()
On Error Resume Next
    frmvipfind.Show 1
  
    Dim cndb As New ADODB.Connection
    Dim strsql As New ADODB.Recordset
    Dim i As Integer
  Dim sql_Vip As String
  If g_bool Then  'g_bool是全局变量,真时为查找
     With frmvipfind
        If .txtvip.Text <> "" And .txtname.Text <> "" Then
            sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From VipInfo where Vip_ID = '" & Trim(.txtvip.Text) & "/" & Trim(.txtname.Text) & "'"
        ElseIf .txtname.Text = "" Then
            sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From VipInfo where Vip_ID like '" & Trim(.txtvip.Text) & "%'"
        Else
            sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From  VipInfo where Vip_ID like '%" & Trim(.txtname.Text) & "'"
        End If     End With
     Unload frmvipfind
  Else
     Exit Sub
  End If
  
  cndb.Open CnString
  strsql.CursorLocation = adUseClient
  
  strsql.Open sql_Vip, cndb  'On Error Resume Next
    FlxVip.Clear
    FlxVip.FormatString = "Vip编号    |^    Vip名称  |^ 销 售 总 额|^ 打  折|^     地    址  |^     电  话     |^ 生日      "
    With FlxVip
       .Rows = 1
        Do While Not strsql.EOF
          i = .Rows
          .Rows = i + 1
          .TextMatrix(i, 0) = strsql("Vip_ID")
          .TextMatrix(i, 1) = strsql("Vip_name")
          .TextMatrix(i, 2) = strsql("vip_sum")
          .TextMatrix(i, 3) = strsql("dz")
          .TextMatrix(i, 4) = strsql("address")
          .TextMatrix(i, 5) = strsql("phone")
          .TextMatrix(i, 6) = strsql("birthday")
          
          strsql.MoveNext
      Loop
       
    End With
    'FlxVip.Refresh
  strsql.Close
  Set strsql = Nothing
  
  cndb.Close
  Set cndb = Nothing
End Sub
如果设置一个断点,那对sql_vip的判断就有起作用,就会在vsflexgrid控件中显示出数据,但没有设断点直接运行 ,那对sql_vip的判断好像无效的样子,无法显示出正确的数据,不知道这是什么原因?其中vip_id的格式为“数字/姓名”,谢谢各位了!

解决方案 »

  1.   

    为什么要在写完SQL语句后执行Unload frmvipfind命令?
      

  2.   

    to虚幻:因为输入编号和名称是在frmvipfind这个窗体上啊,那不然要怎么处理
      

  3.   

    to魔术师:你说得是判断sql_vip语句中有逻辑错误是吗?那为何设置断点时可以呢?谢谢!
      

  4.   

    上面看错了,改成这样应该可以Private Sub cmdFind_Click()
    On Error Resume Next
      
        Dim cndb As New ADODB.Connection
        Dim strsql As New ADODB.Recordset
        Dim sVip as String
        dim sName as string
        Dim i As Integer
      Dim sql_Vip As String
      If g_bool Then  'g_bool是全局变量,真时为查找
         frmvipfind.Show 1
         Unload frmvipfind
         sVip = frmvipfind.txtvip.text
         sName = frmvipfind.txtname.text
          If sVip <> "" And sName <> "" Then
              sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From VipInfo where Vip_ID = '" & Trim(sVip) & "/" & Trim(sName) & "'"
          ElseIf .txtname.Text = "" Then
              sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From VipInfo where Vip_ID like '" & Trim(sVip) & "%'"
          Else
              sql_Vip = "Select Vip_ID,Vip_name,vip_sum,dz,Address,Phone,Birthday From  VipInfo where Vip_ID like '%" & Trim(sName) & "'"
          End If  Else
         Exit Sub
      End If
      
      cndb.Open CnString
      strsql.CursorLocation = adUseClient
      
      strsql.Open sql_Vip, cndb  'On Error Resume Next
        FlxVip.Clear
        FlxVip.FormatString = "Vip编号    |^    Vip名称  |^ 销 售 总 额|^ 打  折|^     地    址  |^     电  话     |^ 生日      "
        With FlxVip
           .Rows = 1
            Do While Not strsql.EOF
              i = .Rows
              .Rows = i + 1
              .TextMatrix(i, 0) = strsql("Vip_ID")
              .TextMatrix(i, 1) = strsql("Vip_name")
              .TextMatrix(i, 2) = strsql("vip_sum")
              .TextMatrix(i, 3) = strsql("dz")
              .TextMatrix(i, 4) = strsql("address")
              .TextMatrix(i, 5) = strsql("phone")
              .TextMatrix(i, 6) = strsql("birthday")
              
              strsql.MoveNext
          Loop
           
        End With
        'FlxVip.Refresh
      strsql.Close
      Set strsql = Nothing
      
      cndb.Close
      Set cndb = Nothing
    End Sub
      

  5.   

    因为你显示为模态窗体,在unload之前不会执行中间的语句
      

  6.   

    还是不行啊,兄弟!我改的跟你那个一样了,还是不行,我先说明一下,在查找之前,在flexvip中已经显示出了所有vip表中的数据了,按cmdfind按钮后才执行上面的操作的!跟这有关系吗?谢谢!
      

  7.   

    我觉得你在unload窗体后再把值赋给变量,我觉得这有错误!赋的都是空值啊!
      

  8.   

    如果那样,你就在本窗体中定义sVip 和 sName 然后frmvipfind.Show 1在frmvipfind中处理
         Form1.sVip = frmvipfind.txtvip.text
         Form1.sName = frmvipfind.txtname.text关闭frmvipfind
    Unload frmvipfind
      

  9.   

    如果那样,你就在本窗体中定义sVip 和 sName 然后public sVip as string
    public sName as stringfrmvipfind.Show 1在frmvipfind中处理
         Form1.sVip = frmvipfind.txtvip.text
         Form1.sName = frmvipfind.txtname.text关闭frmvipfind
    Unload frmvipfind
      

  10.   

    去掉所有的with 和 end with ,使用全称,试试看,应该可以解决你的问题,这是vb的问题不是你的问题。