Error ADOBOOKMARK

Hola tengo la siguiente pregunta, espero puedas ayudarme...
Tengo el siguiente código de conexión para ejecutar una sentencia sql. El problema es cuando llega a la línea que ejecuta la sentencia sql (la marqué en negrita y subrayado).
Me da el siguiente error "No se encuentra la variable 'ADOBOOKMARK'", posteriormente si le doy click a la opción "pasar por alto" me da el siguiente error "Error: Microsoft Cursor Engine: El proveedor de datos u otro servicio devolvió un estado E_Fail"
He revisado la sentencia y no está mala. Además revisé en todo el proyecto si por alguna parte había usado o declarado esa variable, pero no, en ningún lado la utilizo
¿Me gustaría saber un poco acerca de este error y por qué ocurre? Si sabes como solventarlo me gustaría que me ayudaras por favor, y Gracias
****Aquí está el código*****
if this.dba_mode=1
    strsql=this.strsql
    strsql=strtran(alltrim(upper(strsql)),"str_to_date(","")
    strsql=strtran(alltrim(upper(strsql)),",'%d/%m/%y')","")
*!* creo una conexion ado
    myconn=createobject('adodb.connection')
*!* need a client side cursor for this so that we get a recordcount
    myconn.cursorlocation=3 && aduseclient
*!* open the data source
    myconn.open("driver=microsoft visual foxpro driver;" + ;
        "sourcetype=dbf;sourcedb="+this.dba_dir+ ";" + ;
        "exclusive=no;backgroundfetch=no;null=no;collate=machine;ole db services = -4")
*!* create an ado recordset to be used as the datasource for the datacombo control
    myrs=createobject('adodb.recordset')
*!* set the connection property of the recordset
    myrs.activeconnection=myconn
*!* the recordset inherits the cursorlocation of the connection
    myrs.locktype=3 && adlockoptimistic
    myrs.open(strsql,,,,1)
    if this.dba_act=1
** creamos el objeto cursor adapter
        locursoradapter = createobject("cursoradapter")
** asignamos el nombre del cursor
        locursoradapter.alias="_tempocursor"
** asignamos el tipo de datos que recibirá
        locursoradapter.datasourcetype="ado"
** convertimos el recordset a un cursor de vfp
        =locursoradapter.cursorfill(,,,myrs)
** desincorporamos el cursor, de el objeto cursoradapter
        =locursoradapter.cursordetach()
** destruimos el cursoradapter
        locursoradapter = null
        st="select * from _tempocursor into cursor "+alltrim(upper(this.dba_cursor))+" readwrite"
        &st
        select _tempocursor
        use
        st="select "+alltrim(upper(this.dba_cursor))
        &st
        myrs.close
    endif
    myconn.close
endif
if this.dba_mode=2
    lcserver=alltrim(this.dba_host)
    lcdatabase=alltrim(this.dba_base)
    lcuser =alltrim(this.dba_user)
    lcpassword = alltrim(this.dba_pass)
    dba_port=alltrim(this.dba_port)
    p_tabres=alltrim(this.dba_cursor)
    strsql=this.strsql
    strsql=strtran(alltrim(upper(strsql)),'==','=')
    strsql=strtran(alltrim(upper(strsql)),'.t.','1')
    strsql=strtran(alltrim(upper(strsql)),'.f.','0')
    strsql=strtran(alltrim(upper(strsql)),'\','\\')
    strsql=strtran(strsql,"%d/%m/%y","%d/%m/%y")
    strsql=strtran(strsql,"alltrim","trim")
    lcstringconn="driver={mysql odbc 3.51 driver};port="+alltrim(dba_port)+;
        ";server="+alltrim(lcserver)+;
        ";database="+lcdatabase+;
        ";uid="+lcuser+;
        ";pwd="+lcpassword
    sqlsetprop(0,"displogin",3)
    lnhandle=sqlstringconnect(lcstringconn)
    if lnhandle > 0
        =sqlexec(lnhandle,strsql,"_tempocursor")
        sqldisconnect(lnhandle)
    else
        =aerror(laerror)
        messagebox("error al conectarse: "+chr(13)+;
            "description:"+laerror[2])
    endif
    if this.dba_act=1
        strsql="select * from _tempocursor "+" into cursor "+alltrim(p_tabres)+" readwrite"
        &strsql
        select _tempocursor
        use
        st="select "+alltrim(upper(this.dba_cursor))
        &st
    Endif
Endif

2 Respuestas

Respuesta
1
¿Estoy perdido en tu cpodigo pero básicamente creas una conexión para usar una base fox?
Lo único que veo es que te faltan espacios antes del signo + por si muestras la variable resultante st aparece sin espacios
Ok. Te explico, este código funciona. El problema es el siguiente cuando estoy en esta línea de programación que ejecuto la sentencia sql, en esta línea específicamente:
st="select * from _tempocursor into cursor "+alltrim(upper(this.dba_cursor))+" readwrite"
&st

La ejecuta sin problema, pero cuando hace un select de muchos registros es cuando me da el error ADOBOOKMARK.
Respuesta
1
Disculpa la demora,
te debe estar faltando el driver del sql para completar la conexión

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas