Bonjour,
mon probleme est le suivant : j'ai tapé le code suivant qui va dans ma base dans le dernier enregistrement le trouve (ici des matricules ex REC1, REC2, . . .RECn), si le recorset n'est pas vide, renvoie sa longueur et en fonction de la longueur donné lui attribue (incremente) un nouveau numéro et l'affiche dans le textbox à l'ouverture de la feuille.
Form Activate()
'Instanciation de variable
Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection
'Procédure de connection
Call Connexion(cnx)
rst.Open"SELECT * FROM recu", cnx, adOpenKeyset, adLockOptimistic, adCmdText
If rst.RecordCount <> 0Then
rst.MoveLast
Num = Len(rst!mat_rec)
SelectCase Num
Case4
i = Right(rst!mat_rec, 1)
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
Case5
i = Right(rst!mat_rec, 2)
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
.
.
.
.
Case14
i = Right(rst!mat_rec, 11)
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
EndSelect
.
.
Le truc c'est que ça marche jusqu'au N°9 et s'arrete au N°10. J'ai regardé dans la base et je me suis rendu compte que le matricule REC10 se trouve juste apres REC1 (en 2eme position). J'utilise access 2003 et j'aimerais savoir comment faire pour que REC10 revienne en dernier position pour que mon code s'execute correctement ou sinon comment faire pour continuer d'incrementer mes matricules et resoudre ce probleme.
Merci d'avance<!-- / message --><!-- END TEMPLATE: bbcode_code -->
A voir également:
Cette variable utilise un type automation non géré par visual basic
Dans la mesure ou ton champ dans la base est de type alphanumérique tu ne pourras le trier que dans l'ordre alphabétique, c'est à dire caractère par caractère.
Ainsi tous les REC1xxxxxxxxxxxxxxxxxxxxxxxx se trouveront toujours avant les REC2, parce que sur le 4eme caractère 1 est avant 2 dans l'ordre alphabétique.
Regarde si une requette de ce style ne passerait pas chez toi :
SELECT * FROM recu ORDER BY CONVERT(int,SUBSTRING(mat_rec,4,999999999))
Ensuite tu peux largement simplifer ton code. Pourquoi faire un select case avec tous les cas imaginables :
Form Activate()
'Instanciation de variable
Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection
'Procédure de connection
Call Connexion(cnx)
rst.Open"SELECT * FROM recu ORDER BY CONVERT(int,SUBSTRING(mat_rec,4,999999999))", cnx, adOpenKeyset, adLockOptimistic, adCmdText
If rst.RecordCount <> 0Then
rst.MoveLast
i = Mid(rst!mat_rec,4) ' Remplace tout ton Select Case
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
end if
......
Bonjour,
j'ai essayé le code que tu m'as donné mais le debogeur s'arrete sur la ligne :
rst.Open"SELECT * FROM recu ORDER BY CONVERT(int,SUBSTRING(mat_rec,4,999999999))", cnx, adOpenKeyset, adLockOptimistic, adCmdText
et m'affiche le message suivant :
Erreur d'exécution'-2147467259(80004005)':
la méthode 'Open' de l'objet'_Recordset'a échoué
Que faire ?
Bonjour,
vu que mon application va gerer un grand nombre d'information, j'ai changé de bdd, maintenant j'utilise une bdd MySQL et le probleme d'incrementation se pose egalement avec la nouvelle bdd. Quand je met le code suivant :
'Instanciation de variable
Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection
'Procédure de connection
Call Connexion(cnx)
rst.Open"SELECT * FROM recu ORDER BY CONVERT(int,SUBSTRING(mat_rec,4,999999999))", cnx, adOpenKeyset, adLockOptimistic, adCmdText
If rst.RecordCount <> 0Then
rst.MoveLast
i = Mid(rst!mat_rec,4) ' Remplace tout ton Select Case
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
end if
......
j'ai le message d'erreur suivant qui pointe toujours sur la meme ligne:
Erreur d'exécution '-2147217900
....for the right syntax to use near 'int, SUBSTRING(mat_rec,4,9999999))' at line 1
je voudrais savoir comment faire pour y remedier
Merci d'avance
la requete marche mais elle s'arrete à la ligne en bleue
'Instanciation de variable
Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection
'Procédure de connection
Call Connexion(cnx)
rst.Open"SELECT * FROM recu ORDER BY CONVERT(SUBSTRING(mat_rec,4,999999999), SIGNED)", cnx, adOpenKeyset, adLockOptimistic, adCmdText
If rst.RecordCount <> 0Then
rst.MoveLast
i = Mid(rst!mat_rec,4)
i = i + 1
txtrec(0).Text = "REC" & i
i = rst!num_rec + 1
txtrec(1).Text = i
end if
......
Et j'ai le message d'erreur suivant :
Erreur d'exécution '458':
La variable utilise un type Automation non géré par Visual Basic
et je signale que le type de num_rec est définie par mediumint(8) unsigned.