Microsoft KB Archive/241794

= PRB: RDS May Return E_FAIL Status When Querying Index Server =

Article ID: 241794

Article Last Modified on 9/30/2003

-

APPLIES TO


 * Remote Data Service for ADO 2.0
 * Microsoft Remote Data Services 2.0
 * Microsoft Remote Data Services 2.1
 * Remote Data Service for ADO 2.5
 * Remote Data Service for ADO 2.6
 * Microsoft Remote Data Services 2.0

-



This article was previously published under Q241794



SYMPTOMS
Using the Data Factory in Remote Data Service 2.x to query Index Server for the document titles (DocTitle field) generates one of the following errors:

The data provider or other service returned an E_FAIL status.

-or-

Error: -2147217887 (80040e21) Description: Multiple-step operation generated errors. Check each status value. Source: Microsoft Cursor Engine

-or when using MDAC 2.6 or 2.7-

Run-time error '-2147267259 (80004005)':

Stream object cannot be read because it is empty, or the current position is at the end of the stream. For non-empty streams, set the current position with the Position property. To determine if a stream is empty, check the Size property.

The same errors will result for any of the Doc* properties or user-defined properties.



CAUSE
Index Server does not hard-code the datatype for DocTitle as a string. Thus the return value is recognized as a VARIANT. Remote Data Service is known to fail when handling the DBTYPE_VARIANT datatype for a property retrieved in OLE DB. Returning such a type with Remote Data Service results in the E_FAIL status error.



RESOLUTION
You can resolve this problem in the following ways:
 * Remove DocTitle from the Index Server query.
 * Use ActiveX Data Objects (ADO) to query for the DocTitle.



Steps to Reproduce Behavior
 Start a new Visual Basic project. Reference Remote Data Service and ADO libraries. Add two command buttons to Form1.  Copy and paste the following code over any declarations and code already present in the Form1 code module. Edit the server name ("HTTPServer") as appropriate. Option Explicit Dim rs As ADODB.Recordset Dim strSQL As String Const HTTPServer As String = "myServer" Const Scope As String = "C:\" Const QueryText As String = "Index Server"

Private Sub Command1_Click Dim DS As RDS.DataSpace Dim DF As Object Set DS = New RDS.DataSpace Set DF = DS.CreateObject("RDSServer.DataFactory", "http://" & HTTPServer) Set rs = DF.Query("Provider=msidxs", strSQL) Do Until rs.EOF Debug.Print rs("Filename"), rs("Vpath"), rs("DocTitle") rs.MoveNext Loop rs.Close Set rs = Nothing End Sub

Private Sub Command2_Click

Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=MSIDXS" ';Server=http://" & HTTPServer    Set rs = cn.Execute(strSQL)     Do Until rs.EOF         Debug.Print rs("Filename"), rs("Vpath"), rs("DocTitle")         rs.MoveNext     Loop     rs.Close     Set rs = Nothing     cn.Close     Set cn = Nothing End Sub

Private Sub Form_Load

strSQL = "SELECT Filename, Vpath, DocTitle FROM Scope('" + Chr(34) + _        Scope + Chr(34) + "') WHERE CONTAINS('" + Chr(34) + QueryText + _         Chr(34) + "') > 0 ORDER BY Rank DESC" Debug.Print strSQL End Sub  Use Command1 to reproduce the error message described above. Use Command2 to execute the query successfully using ADO.</ol>

Additional query words: kbgrpvbdb kbgrpmdac kbIdxServ200 kbdsupport kbdatabase

Keywords: kbrdo kbdatabase kbprb KB241794

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.