Option Explicit
'在SQLServer2000 Northwind数据库中创建以下存储过.程'===============================================================
'create  procedure sp_orders
'    @Begdate datetime,
'    @Enddate datetime
'as
'select * from orders
'where orderdate >= @begdate and orderdate <= @enddate
'
'===============================================================
Private connOrders As New ADODB.Connection
Private cmmOrder As New ADODB.Command
Private strSQL As String
Private Const strConnect = "Provider=msdasql;driver={sql server};server=d091j;uid=sa;pwd=123;database=Northwind"Private Sub cmdExcute_Click()    Dim rstOrders As New ADODB.Recordset
    Dim strMsg As String
    
    DoEvents
    Me.MousePointer = vbArrow
    connOrders.ConnectionTimeout = 15
    connOrders.Open strConnect
    
    
    With cmmOrder
    
        Set .ActiveConnection = connOrders
            .CommandType = adCmdStoredProc
            .CommandText = "sp_orders"
            .Parameters(1).Type = adChar
            .Parameters(1).Size = Len(txtBegDate.Text)
            .Parameters(1).Direction = adParamInput
            .Parameters(1).Value = txtBegDate.Text
            .Parameters(2).Type = adChar
            .Parameters(2).Size = Len(txtEndDate.Text)
            .Parameters(2).Direction = adParamInput
            .Parameters(2).Value = txtEndDate.Text
             
             Set rstOrders = .Execute
            
    End With
      
   
    If rstOrders.RecordCount Then
        Call FillFlexGrid(rstOrders)
    Else
        MsgBox "no record"    End If    Set rstOrders = Nothing
    Set connOrders = Nothing
    End SubPrivate Sub FillFlexGrid(rstOrders As ADODB.Recordset)
    Dim intCol As Integer
    Dim strItem As String
    
    With flxgrid
        .ScrollBars = flexScrollBarNone
        .FixedCols = 0
        .FixedRows = 1
        .Rows = 1
        .Cols = rstOrders.Fields.Count
        .Row = 0
        For intCol = 0 To .Cols - 1
            .Col = intCol
            .Text = rstOrders.Fields(intCol).Name
        
        Next intCol
        
        Do Until rstOrders.EOF
            strItem = "*prc*"
            For intCol = 0 To .Cols - 1
                strItem = strItem & rstOrders.Fields(intCol).Value & vbTab
            Next intCol
            .AddItem strItem
            rstOrders.MoveNext
                 
         Loop
        .ScrollBars = flexScrollBarBoth
        
    End With
    
End Sub

解决方案 »

  1.   

    在数据库里只有1996-07-04至1998-05-06有记录.可是我随便输入一个1993-01-01 至1993-09-01
    它并没有调用  :
    Else 
            MsgBox "no record"请各位指点指点。
     
      

  2.   

    你看看sp_orders实际的参数类型
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
    http://feiyun0112.cnblogs.com/
      

  3.   

    是datetime类型.
    输入1997-01-01 至1996-09-01 是正常的。
      

  4.   

      If rstOrders.RecordCount>0 Then or If not rstOrders.EOF  Then
      

  5.   

    在 connOrders.Open 前加一句
    connOrders.CursorLocation = adUseClient
    如果是服务端游标,rstOrders.RecordCount 初始为 -1,并且随游标的移到而变化。
      

  6.   

    如果是服务端游标,在If rstOrders.RecordCount Then 
    前加一句 rstOrders.MoveLast即可。