begin process at 2010 03 21 01:18:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Algorithme

 > 

Maths

 > 

Probleme d'incrementation par code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme d'incrementation par code

mercredi 23 avril 2008 à 21:01:23 | Probleme d'incrementation par code

bruce207

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

mercredi 23 avril 2008 à 21:35:41 | Re : Probleme d'incrementation par code

casy

Membre Club
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
......






---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 25 avril 2008 à 18:59:23 | Re : Probleme d'incrementation par code

bruce207

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 ?
vendredi 25 avril 2008 à 21:02:30 | Re : Probleme d'incrementation par code

casy

Membre Club

tu es sur quel type de base ?


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
samedi 26 avril 2008 à 15:48:29 | Re : Probleme d'incrementation par code

bruce207

Bonjour,
J'utilise une base de donnée access (2003).
samedi 26 avril 2008 à 16:43:20 | Re : Probleme d'incrementation par code

casy

Membre Club
Réponse acceptée !
Ok, si tu es sous Access2003 il vaudrait peut-etre mieux utiliser la syntaxe VBA alors plutot que la syntaxe TRANSACT/SQL

Essaye avec cette requette :
SELECT * FROM recu ORDER BY CINT(MID(mat_rec,4))

c'est la même que l'autre mais avec des noms de fonctions VBA

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
mardi 5 août 2008 à 15:15:41 | Re : Probleme d'incrementation par code

bruce207

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
mercredi 6 août 2008 à 20:50:53 | Re : Probleme d'incrementation par code

casy

Membre Club
Il semblerait apparement que avec MySQL, l'instruction Convert s'utilise un peu différemment

Essaye avec la requette suivante :

SELECT * FROM recu ORDER BY CONVERT(SUBSTRING(mat_rec,4,999999999), SIGNED)


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
jeudi 7 août 2008 à 14:49:37 | Re : Probleme d'incrementation par code

bruce207

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.

jeudi 7 août 2008 à 17:54:40 | Re : Probleme d'incrementation par code

casy

Membre Club
Effectivement, c'est probablement le type mediumint qui n'est pas compris.

Il faudrait probablement faire une convertion mais je ne sais pas où. Je n'ai pas MySQL sous la main pour faire des tests.

Essaye, voir si ça marche, ceci :
    i = CInt(rst!num_rec) + 1

Sinon, il faudrait peut-etre faire la conversion dans le select.

SELECT CAST(num_rec AS SIGNED), mat_rec FROM recu ORDER BY CONVERT(SUBSTRING(mat_rec,4,999999999), SIGNED)

J'avoue ne pas pouvoir t'aider plus à ce niveau.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]


Cette discussion est classée dans : text, num, rst, rec, txtrec


Répondre à ce message

Sujets en rapport avec ce message

PB affichage des champs NULL de ma BD [ par monsnow ] Je veux afficher dans des Textbox des attributs d'une table de ma base de données...Mais pour les attributs NULL, VB me dit qu'il y a une erreur: inva Comment faire une jointure entre deux tables [ par laurent207 ] je dévoloppe un prog qui sauvegarde une table access ds un fichier texte. Dans un souci de perfectionnement, je souhaite inscrire dans le fichier le t pb dans un datagrid [ par oufben ] SaluuuuuuuutBon, c'est pas tout ca, mais les datagrid, ca commence a me #@~'#@J'arrive a afficher des donné dedans, la y a pas de probleme... Le truc, Inserer avec VB dans table access ! [ par YabLeo ] Salut alors voilà g un gros probleme qui m'empeche de continuer mon projet (en stage).Dans mon projet je créé une base access comme ceci :Set dbLbv = answer to reset et mscomm [ par akai ] bonjour debutant en vb je but sur un probléme quant à la réception de l atr de divers carte a puce.a chaque fois msComm1.InBufferCount me donne une va :: Prob d'enregistrement :: [ par alias666 ] Lu j'ai une table clients avec comme champs (N°Client,Nom,adresse,cp,ville,tel et fax) et une table contact(IdContact, nomContact,Fonction,Telcontact) ERF trouve pas :s [ par alias666 ] Kikoo tout le monde j'ai une table clients avec comme champs (N°Client,Nom,adresse,cp,ville,tel et fax) et une table contact(IdContact, nomContact,Fon API sax (XML) [ par zame ] Voilà je cherche comment lire des elements dans un fichier xml.J'arrive à le lire avec DOM,mais le probleme c'est qu'il fait 10mo et prend 3min a tou sql aide SVP!!!!!!! [ par KOMZY ] voici ma requete:qry = "select distinct[echantillon.Num_rde] from echantillon,rde where echantillon.num_rde=rde.num_rde" qry = qry & " and nu pb d'insertion dans sql server6.5 sous vb6 [ par obrosky ] Private Sub Command1_Click()Dim Answer, Msg ' Déclare la variable. Unload Form13 ' Décharge la feuille. Msg = "La feuille Roulement a été déch


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales