Problemas ADO

Hola compañeros
Este es mi primer mensaje en el foro... Estoy haciendo una base de datos en access de control de consumibles.
He creado tres tablas:
PLAQUETES : CODPMSA (texto y clave), stock(integer), descripción texto... Entre otras
MovArticles: CODPMSA(clave),quantitat(integer),tipusmoviment(combo tres opciones:entrada,salida,corregir_stock)...entre otras
Mi problema es que no se como, cuando desde el formulario vinculado a MovArticles le añado un registro y después de darle a la cantidad con la opción me haga los cálculos según opción y me modifique el campo cantidad de la tabla PLAQUETES.
He visto en el forum un mensaje de la experta Marciana y he intentado adaptarlo pero me da problemas de conexión.
He modificado la función que la tengo en el Modulo1 y la llamo al evento actualizar del campo quantitat de MovArticles.Lo llamo desde el formulario después de actualizar cantidad lo llamo desde aquí:
Private Sub quantitat_AfterUpdate()
Dim i As Variant
i = ActualitzaStock(CODPMSA, tipusmoviment, quantitat)
End Sub
La funcion es la siguiente:
Public Function ActualitzaStock(CODPMSA As String, tipusmoviment As String, Stock As Integer)
'Dim rsOut As New ADODB.Recorset
Dim i As Integer
Dim mov As String
'carregarem els datos
rsOut.Open "Plaquetes", CurrentProjectConnection, adOpenDynamic, adLockPessimistic
rsOut.Find "CODPMSA=&CODPMSA"
MsgBox "codi" & CODPMSA 'mostrarem el codi
If rsOut.EOF Then
MsgBox CODPMSA & "no existe"
Exit Function
End If
If tipusmoviment = "entrada" Then
rsOut!Stock = rsOut!Stock + quantitat 'suponemos que hacemos una entrada
MsgBox ("Stock:" & Stock)
If tipusmoviment = "salida" Then   'suponemos que hacemos una salida
rsOut!Stock = rsOut!Stock - quantitat
MsgBox ("Stock:" & Stock)
If tipusmoviment = "corregir_stock" Then   ''suponemos que hacemos una entrada
rsOut!Stock = rsOut!Stock + quantitat
MsgBox ("Stock:" & Stock)
End If
rsOut.Update
rsOut.Close
End Function
Estoy liado.. ¿alguien me puede ayudar?
Gracias

1 respuesta

Respuesta
1
Bueno a primera vista solo veo dos errore el primero seria no importante ya que el dato que actualizarías en caso que
If tipusmoviment = "corregir_stock" Then 'suponemos que hacemos una entrada
rsOut!Stock = rsOut!Stock + quantitat
seria
rsOut!Stock = quantitat
pero lo peor lo veo en
rsOut.Find "CODPMSA=&CODPMSA"
si CODPMSA es un texto deberia ser asi
rsOut.Find "CODPMSA= ' " & CODPMSA & " ' "
Y como creo que esta es la variante fíjate bien en la comilla sencilla vale, que debes pasarla como parte de la cadena de filtrado.
Si CODPMSA fuera un entero seria
rsOut.Find "CODPMSA=" & CODPMSA
Gracias jreina 44 por tu ayuda,
no domino el VB y no había visto los errores, los he arreglado y ahora me quedo encallado en esta linea:
Y mi pregunta es. ¿Qué tengo mal? Yo lo veo todo OK...
rsOut.Open "Plaquetes", CurrentProjectConnection, adOpenDynamic, adLockPessimistic
Solo veo la falta de un punto, ya que el adOpenDynamic y el adLockPessimistic depende de la manera de leer los datos y su actualización, para saber más te sitúas sobre el método Open del Recordset y presionas F1 para ayuda allí te explicara un poco más esa parte. La forma correcta creo yo seria
rsOut. Open "Plaquetes", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
o también:
RsOut. Open "Plaquetes", CurrentProject.AccessConnection, adOpenDynamic, adLockPessimistic
Aunque te recomiendo la primera
El CurrentProject. Connection no es nada más que la manera que nos permite Access usar su propia conexión de datos interna, mediante ADO.
Hola,
he probado las 2 opciones y me da error en ambas... se me abre el depurador en esta linea... paso el ratón por encima de los valores y tengo:
adOpenDynamic=2
adLockPessimistic=2
Current .Project.Access="Provider"=Microsoft.Access.OLEDB.10.0;Pessimistic Secu...
Supongo que el error lo tengo en el Current... pero no se como interpretarlo...
¿Alguna otra sugerencia? ¿Hay algún método para aveguar el problema?
Esta madrugada lo volveré a intentar...
Gracias
A si me reeleo tu código de nuevo y te falta crear el objeto recordset
Antes de esta linea
RsOut. Open "Plaquetes", CurrentProject. Connection, adOpenDynamic, adLockPessimistic
Escribe esta otra
Set rsOut = New ADODB.Recordset
Luego casi al final después de
RsOut. Close
Pones esta otra
Set rsOut = Nothing 
Me dices como te fue.
Muchas gracias jreina 44,
ya hacia días que le daba vueltas y más vueltas y no me salía.
Estoy haciendo pruebas y no me falla...
Hasta Pronto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas