Incrémentation identifiant sql!!!

js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 - 20 févr. 2008 à 21:07
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 22 févr. 2008 à 15:06
Bonjour à tous,



<!--[if !supportEmptyParas]--> <!--[endif]-->


Je ‘’programme’’ en visual basic et access et je souhaiterai
faire de telle sorte que l’identifiant de ma table ‘’voiture’’ s’incrémente à
chaque fois que j’enregistre une nouvelle voiture, mais je ne sais pas comme le
faire. L’identifiant ‘’idvoiture’’ est de type texte. Le code (ci-après) que
j’avais marchait correctement jusqu’à ce que les enregistrements atteignent le
nombre de 10 en effet, pour les données de type texte 9 est supérieur à 10. Il
me parle donc à chaque fois de doublons. J’ai résolu le problème en utilisant
le type integer mais je souhaiterai vraiment garder le type texte. Quelqu’un
pourrait-il m’aider s’il vous plaît ? Merci d’avance.



<!--[if !supportEmptyParas]--> <!--[endif]-->



<!--[if !supportEmptyParas]--> <!--[endif]-->



Dim
rsenregistrervoiture As New Recordset





rsenregistrervoiture.Open
"select * from Tablevoiture", cn, 1, 2






<!--[if !supportEmptyParas]--> <!--[endif]-->






    rsenregistrer.AddNew






        If rsenregistrervoiture.RecordCount
< 1 Then






            rsenregistrer!idvoiture = 1






        Else






            Dim rsnumvoiture1 As New
ADODB.Recordset






            rsnumvoiture1.Open "select
max(idvoiture) as maximum from tablevoiture", cn, 1, 2






            Dim maximum As Integer






            maximum = rsnumvoiture1.Fields(0)






           
rsenregistrer!idvoiture =
maximum + 1



        End If



<!--[if !supportEmptyParas]--> <!--[endif]-->



<!--[if !supportEmptyParas]--> <!--[endif]-->


Cordialement

8 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 févr. 2008 à 21:23
Salut,
une solution à deux conditions/
1- Formater ton identifiant (sur 6 caractères par exemple)
IdVoiture="000001"
IdVoiture="000002"
IdVoiture="000003"

IdVoiture="000010"

2- Utilises Last au lieu de Max

rsnumvoiture1.Open "select Last(idvoiture) as maximum from tablevoiture", cn, 1, 2<?XML:NAMESPACE PREFIX = O /??>

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 févr. 2008 à 21:27
Ah , j' ai oublié !
Dim maximum As Integer<?XML:NAMESPACE PREFIX = O /??>

            maximum = CInt(rsnumvoiture1.Fields(0)

)

            rsenregistrer!idvoiture = maximum + 1

et remplaces par la même occasion
rsnumvoiture1.Open "select Last(idvoiture) as Dernier from tablevoiture", cn, 1, 2

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
cs_laridak Messages postés 11 Date d'inscription dimanche 25 février 2007 Statut Membre Dernière intervention 24 février 2008
21 févr. 2008 à 06:01
C'est simple pour que  garder le type texte tu peux utiliser la fonction
 CTYP(rsnumvoiture1.Fields(0)<?XML:NAMESPACE PREFIX = O /??>

,INTEGER)  et commca tu peux garder ton type text

here i'am again evreywhere
0
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 2
22 févr. 2008 à 09:27
Salut Messieurs,

j'ai essayé vos codes mais ça ne marche pas.laridak, CTYP(rsnumvoiture1.Fields(0)

,INTEGER) n'existe pas ou n'est pas correct sous VB6.0, je ne sais pas pourquoi? Quant à LIBRE_MAX, je ne sais pas comment formater mon id sur 6 caractères comme tu l'as suggéré, ce serait super si tu pouvais me dire comment faire. De plus de cette manière combien d'enregistrements possibles pourrais-je avoir avant d'avoir ce satané message d'erreur s'il te plaît? J'attends votre aide à tous. Merci d'avance.

Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
22 févr. 2008 à 13:07
Salut,
Pour le Formatage, c' est presque simple !
Format$(IdVoiture, "000000")


Si tes données sont déjà enregistrées dans un autre format.
 dans ta requete tu génère un champ MonIdVoiture
  et tu tries sur celui-ci.
  rsnumvoiture1.Open "select Format$(tablevoiture.idvoiture,"000000")
 As MonIdVoiture from tablevoiture ORDER BY
 Format$(tablevoiture.idvoiture,"000000");", cn, 1, 2
 Tu récupères ensuite le dernier de MonIdVoiture en allant au dernier.


et tu adoptes ce format à chaque nouvel enregistremet.
MonIdVoitue= Format$(Nouvelidvoiture,"000000").
Tu peux aussi mettre à jour ta table en remplaçant ton idvoitue par le nouveau format.
Genre "UPDATE tablevoiture.idvoiture SET tablevoiture.idvoiture=
 Format$(tablevoiture.idvoiture,"000000");"
comme ça tu peut récupèrer le dernier sans devoir formater ton champ.
(voir précédent post)


Pour le nombre d' enregistrement tu peux aller jusqu' à 999999.
Si c' est pas suffisant ,et que tu comptes avoir plus, tu peux choisir le format qui te permettera d' avantage : "00000000000" par exemple.
 


                        
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />


/P>
0
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 2
22 févr. 2008 à 14:53
Ok Merci, je vais essayer. Cependant, j'ai un autre problème. je souhaiterai récupérer le résultat nul ou vide d'une requête afin
d'en faire un traitement, mais je ne sais pas comment le faire. J'ai
essayé le rsvoiture.recordcount , le IsNull(rsvoiture). C'est à dire :

si rsvoiture ne donne pas de résultat alors

    traitement 1

sinon

    traitement 2

end if


Y-a-t-il quelqu'un pour m'aider s'il vous plaît? Merci d'avance.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
22 févr. 2008 à 15:03
perso, je fais le truc suivant:
Après avoir référencé mon recordset je fais ceci:


With rsvoiture
 On Error Resume Next
  .MoveLast
  .MoveFirst
If .Bof And .Eof Then   ==> 'aucun enregistrement
     <Traitement1>
Else   ==> 'recordset plein
    <Traitement2>
End With




PS: le On Error Resume Next c' est pour éviter l' erreur
suite à  MoveLast si le recordset est vide.







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
22 févr. 2008 à 15:06
mais tu peux aussi tester avec recordcount
If rsvoiture.recordcount=0 Then
'==> aucun enregistrement

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
Rejoignez-nous