Hola a todos
Vengo con dos temas que me traen de cabeza.
El primero es el de los cursores de un recordset, y la pregunta es (aunque me tomeis por loco) ¿Por qué si abres un Recordset con un curso tipo 1 (Keyset) ó 2 Dynamic) , éste viene como 3 (Static) ?
La segunda es ¿Por qué si tienes un recordset cuya propiedad UPDATE y UPDATEBACH estan en .T. cuando haces un update a ese Recordset, te da un Error ADODB.RecordSet/3 DISP_E_MEMBERNOTFOUND: UPDATE ?
No sé por donde meterle mano a esto, el recordset se abre se pasan sus datos a una tabla Dbf, y no se hace nada con él hasta que los datos son devueltos al recordset, y cuando hago el update de un registro o el updatebach de todos los registros, me casca el modulo con el error antes dicho.
Deciros que mediante la funcion info(oRs) de Adolfo Lagos, verifico que la propiedad Update y UpdateBach esten a true antes de llamar a oRs:Update() o bien oRs:UpdateBach()
Alguien puede decirme algo de esto?
Propiedades y cursores de un Recordset
Propiedades y cursores de un Recordset
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Re: Propiedades y cursores de un Recordset
Pedro,
google translator:
Si decide cursor aduseclient pienso que siempre viene con Static.
La propiedad Update deja de ser válida si hay un error con el campo o el valor de poner en ese campo.
Si el campo ya ha sido cambiado por otro usuario a continuación, update también deja de ser válida.
La propiedad Update es válida y se puede utilizar sin embargo, en la presente actualización debido a la anterior puede tornar-se inválida.
Por favor poner el código aquí.
cheques ADORDD.
google translator:
Si decide cursor aduseclient pienso que siempre viene con Static.
La propiedad Update deja de ser válida si hay un error con el campo o el valor de poner en ese campo.
Si el campo ya ha sido cambiado por otro usuario a continuación, update también deja de ser válida.
La propiedad Update es válida y se puede utilizar sin embargo, en la presente actualización debido a la anterior puede tornar-se inválida.
Por favor poner el código aquí.
cheques ADORDD.
Regards
Antonio H Ferreira
Antonio H Ferreira
Re: Propiedades y cursores de un Recordset
Estimado Antonio
Los datos los he comprobados antes de ser pasado al RecordSet y todos coinciden con el tipo de campo, no obstante pongo aqui el código donde abro los recordset y paso los datos a una dbf y luego de la dbf al recordset. Observe que hay dos funciones INFO() e INFO2() La primera es para verificar las propiedades del Recordset y la segunda los datos de cada campo del recordset.
Codigo de apertura y traspaso de datos
Código de traspaso de datos entre la dbf y el RecordSet
Nota: paso los datos desde la dbf a un array porque luego me sirve para dar de baja al stock de articulos
Los datos los he comprobados antes de ser pasado al RecordSet y todos coinciden con el tipo de campo, no obstante pongo aqui el código donde abro los recordset y paso los datos a una dbf y luego de la dbf al recordset. Observe que hay dos funciones INFO() e INFO2() La primera es para verificar las propiedades del Recordset y la segunda los datos de cada campo del recordset.
Codigo de apertura y traspaso de datos
Code: Select all
cTempLin := cArea+"MODLIN.DBF"
aadd(aEstruc,{"CODIGO" ,"C", 14,0 } )
aadd(aEstruc,{"CONCEPTO" ,"C", 50,0 } )
aadd(aEstruc,{"CANTIDAD" ,"N", 7,2 } )
aadd(aEstruc,{"PRECIO" ,"N", 10,5 } )
aadd(aEstruc,{"IVA" ,"N", 5,2 } )
aadd(aEstruc,{"CUOIVA" ,"N", 10,2 } )
aadd(aEstruc,{"REC" ,"N", 5,2 } )
aadd(aEstruc,{"CUOREC" ,"N", 10,2 } )
aadd(aEstruc,{"IMPORTE" ,"N", 10,2 } )
aadd(aEstruc,{"FECHA" ,"D", 8,0 } )
aadd(aEstruc,{"IVAINCL" ,"L", 1,0 } )
aadd(aEstruc,{"NUMERO" ,"N", 6,0 } )
aadd(aEstruc,{"REGISTRO" ,"N", 6,0 } )
aadd(aEstruc,{"BORRADO" ,"L", 1,0 } )
dbCreate(cTempLin,aEstruc)
dbUseArea(.T.,,cTempLin,"TEMP",.F.,,)
oRsLineas := FW_OpenRecordSet(oConex,cSource1,3,2,1)
oRsArti := FW_OpenRecordSet(oConex,cSource2,3)
oRsLineas:MoveFirst()
ASIZE(aTempDat, oRsLineas:Fields:Count)
AFILL(aTempDat,.T.)
aTempDat := BlankDatos(aTempDat,oRsLineas)
oRsLineas:Find("Numero ="+Alltrim(Str(Int(nAlbar))),0,1,1 )
If oRsLineas:Eof() .and. oRsLineas:Bof()
Msginfo("No se han encontrado lineas")
oRsLineas:Close()
oRsArti:Close()
dbCloseAll()
Ferase(cTempLin)
Return nil
EndIf
nNumero := oRsLineas:Fields("numero"):Value
WHILE nNumero = Int(nAlbar)
aTempDat := BlankDatos(aTempDat,oRsLineas)
aTempDat := LoadDatos(aTempDat,oRsLineas)
TEMP->(dbAppend())
TEMP->CODIGO := aTempDat[ 2]
TEMP->CONCEPTO := aTempDat[ 3]
TEMP->CANTIDAD := aTempDat[ 4]
TEMP->PRECIO := aTempDat[ 5]
TEMP->IVA := aTempDat[ 6]
TEMP->CUOIVA := aTempDat[ 7]
TEMP->REC := aTempDat[ 8]
TEMP->CUOREC := aTempDat[ 9]
TEMP->IMPORTE := aTempDat[10]
TEMP->FECHA := aTempDat[11]
TEMP->IVAINCL := aTempDat[12]
TEMP->NUMERO := aTempDat[ 1]
TEMP->REGISTRO := oRsLineas:Bookmark
TEMP->BORRADO := .f.
TEMP->(dbUnlock())
ALTARTICULO(aTempDat,oRsArti)
oRsLineas:MoveNext()
If oRsLineas:Eof()
Exit
Else
nNumero := oRsLineas:Fields("numero"):Value
EndIf
EndDo
TEMP->(dbCommitAll())
OLDLINEAS()
oRsLineas:MoveFirst()
Return nil
Nota: paso los datos desde la dbf a un array porque luego me sirve para dar de baja al stock de articulos
Code: Select all
If lSuma
aLinAlb[ 2] := TEMP->Codigo
aLinAlb[ 3] := TEMP->Concepto
aLinAlb[ 4] := TEMP->Cantidad
aLinAlb[ 5] := TEMP->Precio
aLinAlb[ 6] := TEMP->Iva
aLinAlb[ 7] := TEMP->Cuoiva
aLinAlb[ 8] := TEMP->Rec
aLinAlb[ 9] := TEMP->Cuorec
aLinAlb[10] := TEMP->Importe
aLinAlb[11] := TEMP->Fecha
aLinAlb[12] := TEMP->Ivaincl
Info(oRsLineas) <------------------------------------------Compruebo propiedades del recordset
Info2(oRsLineas) <-----------------------------------------Compruebo _ del recordset
For nLin := 1 TO 12
oRsLineas:Fields(nLin-1):Value := aLinAlb[nLin]
EndFor
Info(oRsLineas) <------------------------------------------Compruebo propiedades del recordset
Info2(oRsLineas) <-----------------------------------------Compruebo _ del recordset
oRsLineas:Update() <------------------------------------Aqui es donde da el error
BAJARTICULO(aLinAlb)
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO