Hacía mucho tiempo que no escribía por aqui, dejé de programar hace tiempo. Buenos pues me han hecho volver a coger la tecla y darle al código.
En este caso tomé un programa y lo he modificado para un amigo. todo funciona bien a excepción de un registro de la base de datos de albaranes que tengo en ese programa (está en access) y uso ADO para manejar los datos.
El caso es que para probar hice 3 albaranes, el 1º con 49 lineas, el 2º con 9 lineas y el 3º con 10 lineas. Con el 2º y el 3º no hay problemas en las modificaciones (que es donde tengo el problema) pero con el primero si tengo problemas
al modificarlo (ya sea cambiando datos o sin cambiarlos) en cuanto pasa el primer registro, ya no puedo hacer Move, MoveFirst, ni Update, ni UpdateBatch ni nada, el recordset esta abierto y los datos los grabo en un dbf para comprobar
que no haya discordancia con la tabla de access, en cuanto a tipos de datos y longitudes. Pero como os digo en cuanto paso del 1º registro ya todos son errores ADODB.RecordSet/6 DISP_E_UNKNOWNNAME: MOVEFIRST o MOVE o UPDATE
o UPDATEBATCH . He comprobado el recordset antes de dar el error, esta bien y permite todas estas propiedades. Aqui os dejo el codigo, por si me podeis iluminar, y de paso me haríais un favor enorme, porque ya estoy que me subo por las paredes.
Muchas gracias por anticipado
- Code: Select all Expand view
cSource1 := "SELECT * FROM LINALB"
oRsLin := FW_OpenRecordSet(oConex,cSource1,3)
oRsLin:MoveFirst() <-------------------------------------Aqui no hay problemas
oRsLin:Filter := "[NUMERO] = '"+cNumAlba+"'" <-------------------Aqui tampoco
oRsLin:MoveLAst() <--------------------------------------------------Aqui tampoco
aDatos[09] := aDatos[11] := aDatos[12] := 0
For nIni := 1 TO Len(aLinVenAlb)
aLinAlb[1] := aLinVenAlb[nIni,12]
Do Case
Case !aLinVenAlb[nIni,14] .and. aLinVenAlb[nIni,13] <> 0 //Un registro que ya existía puede haber sido modificado
oRsLin:MoveFirst() [color=#FF0000]<---------------------------------Aqui despues al pasar la 2º vez da error[/color]
oRsLin:Move(aLinVenAlb[nIni,13]-1,1) [color=#FF0000] <------------------ y aqui da error si comento la linea anterior[/color]
lSuma := .T.
Case aLinVenAlb[nIni,14] = .T. .and. aLinVenAlb[nIni,13] <> 0 //Registro borrado
oRsLin:Move(aLinVenAlb[nIni,13]-1,1)
oRsLin:Delete()
oRsLin:Update()
lSuma := .F.
Case aLinVenAlb[nIni,14] = .T. .and. aLinVenAlb[nIni,13] == 0 //Un registro que hemos añadido y hemos borrado
lSuma := .F.
Case !aLinVenAlb[nIni,14] .and. aLinVenAlb[nIni,13]== 0 //Un registro nuevo que hemos añadido
If !Empty(aLinVenAlb[nIni,2])
oRsLin:AddNew()
lSuma := .T.
aLinAlb[1] := cNumAlba
Else
lSuma := .F.
EndIf
Case !aLinVenAlb[nIni,14] .and. aLinVenAlb[nIni,13]== 0 ; //un registro vacío
.and. Empty(aLinVenAlb[nIni,2])
lSuma := .F.
EndCase
If lSuma
aLinAlb[ 2] := aLinVenAlb[nIni, 1]
aLinAlb[ 3] := aLinVenAlb[nIni, 2]
aLinAlb[ 4] := aLinVenAlb[nIni, 3]
aLinAlb[ 5] := aLinVenAlb[nIni, 4]
aLinAlb[ 6] := aLinVenAlb[nIni, 5]
aLinAlb[ 7] := aLinVenAlb[nIni, 6]
aLinAlb[ 8] := aLinVenAlb[nIni, 7]
aLinAlb[ 9] := aLinVenAlb[nIni, 8]
aLinAlb[10] := aLinVenAlb[nIni, 9]
aLinAlb[11] := aDatos[2]
aLinAlb[12] := aDatos[3]
Grabadbf(aLinAlb)
For nLin := 1 TO 12
oRsLin:Fields(nLin-1):Value := aLinAlb[nLin]
EndFor
* oRsLin:Update() [color=#FF0000]y aqui si descomento esta linea que es para hacer el update linea a linea[/color]
BAJARTICULOMALB(aLinAlb)
Do Case
Case aLinVenAlb[nIni,6] = aIva[1,2] //.or. aIva[4,2] //Iva General, Vigente o Anterior
aDatos[09] += aLinVenAlb[nIni,7] //Bruto
aDatos[11] += aLinVenAlb[nIni,8] //Cuota de Iva
aDatos[12] += aLinVenAlb[nIni,9] // Total
Case aLinVenAlb[nIni,6] = aIva[2,2] //.or. aIva[5,2] //Iva Reducido, Vigente o Anterior
aDatos[09] += aLinVenAlb[nIni,7] //Bruto
aDatos[11] += aLinVenAlb[nIni,8] //Cuota de Iva
aDatos[12] += aLinVenAlb[nIni,9] // Total
Case aLinVenAlb[nIni,6] = aIva[3,2] //.or. aIva[6,2] //Iva Super Reducido, Vigente o Anterior
aDatos[09] += aLinVenAlb[nIni,7] //Bruto
aDatos[11] += aLinVenAlb[nIni,8] //Cuota de Iva
aDatos[12] += aLinVenAlb[nIni,9] // Total
Case aLinVenAlb[nIni,6] = aIva[4,2] //.or. aIva[6,2] //Iva exento
aDatos[09] += aLinVenAlb[nIni,7] //Bruto
aDatos[11] += aLinVenAlb[nIni,8] //Cuota de Iva
aDatos[12] += aLinVenAlb[nIni,9] // Total
EndCase
EndIf
EndFor
oRsLin:UpdateBatch() [color=#FF0000]<------------------y aqui si he dejado comentada la linea del update anterior para que me haga un unpdatebatch [/color]
aDatos[10] := nTipoIva
For n := 1 TO Len(aDatos)
oRsAlbar:Fields(n-1):Value := aDatos[n]
EndFor
oRsAlbar:Update()
oRsAlbar:Filter := ""
oRsLin:Close()
SysRefresh()
Return(lSigue)