Pb syntaxe SQL dans recodset: trop peu de parametre
Bonjour,
Je fini par poster car j'ai fait vraiment beaucoup d'essais (j'ai même essayé de réfléchir) mais je n'y arrive pas.
Je cherche le premier numéro disponible pour faire un versement d'archive dans un cadre de classement type Archives départementales.
Dans un formulaire de "Versement" je saisi un code Série "Serie" et un code Sous-Série "NumeroVOSS".
La fonction ProchainVersement est lancéee
Code:
1 2 3
| '__ Donne le prochain numéro de série à utiliser
Me.txtProchainVersement.Value = ProchainVersement(Me.Serie, Me.NumeroVOSS) |
et me ramène le numéro
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Public Function ProchainVersement(ByVal Serie As String, ByVal NumeroVOSS As Long)
Dim sqltextPV As String
Dim ProchainContinuW As String
Dim ProchainContinuL As String
Dim rstPV As DAO.Recordset
Debug.Print "PV "; sqltextPV
Select Case Serie
Case "W"
' cas d'un classement en série continue, le numéro est à gauche
sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
rstPV.MoveLast 'se place sur le dernier record trié
RenvoiDescriptionPV = rstPV!ItemID
Debug.Print "ItemID = "; RenvoiDescriptionPV
rstPV.Close
ProchainContinu = Left(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) - 1) + 1
Case "L"
' cas d 'un classement en série thématique, le numéro est à droite
Select Case NumeroVOSS
Case "1"
'__ On selectionne les numéros d'articles commençant par 1L
sqltextPV = "SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, '" & Serie & "', vbTextCompare)) + 1) = " & NumeroVOSS & " AND ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
Debug.Print sqltextPV
Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
rstPV.MoveLast 'se place sur le dernier record trié
RenvoiDescriptionPV = rstPV!ItemID
Debug.Print "ItemID = "; RenvoiDescriptionPV
rstPV.Close
ProchainContinu = Right(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) + 1) + 1
Case Else
End Select
Case Else
rstPV.Close 'ne pas oublier de refermer le recordset apres
End Select
'Debug.Print "W"; ProchainContinu
Debug.Print "Prochain "; ProchainContinu
ProchainVersement = ProchainContinu
End Function |
Dans le cas W ca fonctionne
Dans le cas 1L j'ai l'erreur "Trop peu de param, 1 attendu"
Le debug print donne
Code:
SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, 'L', vbTextCompare)) + 1) = 1 AND ItemID LIKE '*L*' ORDER BY ItemID;
Parmi ceux qui veillent, il y en aurait-il un pour me décoincer?
Merci et bon WE