请教一个查询时出现的问题
查询时出现”实时错误‘-2147217887 (80040e21)’多步OLE DB操作产生错误。如果可能,请检查每个OLE DB状态值。没有工作被完成“
查询10天内的数据没有问题,超过10天就出现上述错误。这是什么原因?
代码如下:
Dim cn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim strsql As Stringcn.Open "Provider=SQLOLEDB.1;Data Source=" & strServerName & ";UID=sa;PWD=sa;initial catalog=STCard_Enp;ConnectionTimeout = 500"strsql = "select distinct Dept_Name,Person_Name,Brush_Date,dbo.f_hb(Person_Name,Dept_Name,Brush_Date) as Brush_time from (select distinct Dept_Name,Person_Name,Brush_Date,Brush_time from ST_Person a " & _ "join ST_Department b on a.Dept_ID=b.Dept_ID " & _ "join KQ_Download d on a.Card_No=d.Card_No and Brush_Date between '" & Text1.Text & " ' and '" & Text2.Text & " '" & _ "where not exists (select 1 from KQ_SJ where Card_id=d.Card_No and date1=d.Brush_Date and d.Brush_Time between time1 and time2 and date1 between '" & Text1.Text & " ' and '" & Text2.Text & " ') ) as b order by Dept_Name,Person_Name,Brush_Date"rs.Open strsql, cn, adOpenKeyset, adLockReadOnlyIf rs.RecordCount = 0 Then MsgBox "没有适合条件的记录"Exit SubEnd IfVSFlexGrid1.Rows = rs.RecordCount + 1rs.MoveFirsti = 1Do While rs.EOF = FalseVSFlexGrid1.TextMatrix(i, 0) = rs.Fields("Dept_Name")VSFlexGrid1.TextMatrix(i, 1) = rs.Fields("Person_Name")VSFlexGrid1.TextMatrix(i, 2) = rs.Fields("Brush_Date")If IsNull(rs.Fields("Brush_time")) Then VSFlexGrid1.TextMatrix(i, 3) = 0Else VSFlexGrid1.TextMatrix(i, 3) = rs.Fields("Brush_time")End Ifi = i + 1rs.MoveNextLooprs.Closers.MoveFirsti = 1for i=1 to rs.RecordCountVSFlexGrid1.TextMatrix(i, 0) = rs.Fields("Dept_Name")VSFlexGrid1.TextMatrix(i, 1) = rs.Fields("Person_Name")VSFlexGrid1.TextMatrix(i, 2) = rs.Fields("Brush_Date")If IsNull(rs.Fields("Brush_time")) Then VSFlexGrid1.TextMatrix(i, 3) = 0Else VSFlexGrid1.TextMatrix(i, 3) = rs.Fields("Brush_time")End Ifrs.MoveNextnext irs.Close
[解决办法]
应该是字段的空值问题,
VSFlexGrid1.TextMatrix(i, 0) = iis(isnull(rs.Fields("Dept_Name")),"",rs.Fields("Dept_Name")
...下两条也这样改
[解决办法]
优化你的SQL(strsql)语句,以缩短查询时间。