bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012
-
23 avril 2008 à 21:01
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
7 août 2008 à 17:54
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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 23 avril 2008 à 21:35
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
......
bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012 25 avril 2008 à 18:59
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 ?
bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012 5 août 2008 à 15:15
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
bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012 7 août 2008 à 14:49
Bonjour,
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.