Modif d'un ordre dans Access97

Luke - 24 oct. 2000 à 22:57
 Renaud - 25 oct. 2000 à 20:59
J'ai une table contenant 4 champs, dont un nommé Ordre (qui me sert à afficher les données de ma table selon cet ordre précisément). Lorsque par VB6 j'efface une donnée de ma table, je veux que l'ordre ainsi affecté soir modifié.

Exemple:
Champ1 Champ2 Ordre
----------------------------
Henri Martine 2
France Fabienne 1
Luke Vb6 3

Et je veux enlever la premiere ligne...
je veux donc que l'ordre de la derniere ligne, la seule affectée, devienne 2!

Évidemment, ma table contient plus d'une enregistrement, donc ca doit boucler...
Comment puis-je faire cela?

Merci énormément et continuez votre travail!!!

3 réponses

Luke, tu m'étonnes....

t 'es pas un peu feignant des fois ?
Enfin, je t'envoie un début de solution qui comprend :

L'accès à une base de données comprenant deux champs, Champ1, la clé primaire, et Ordre.
Le champ Ordre doit être UNIQUE !

Deux remarques :

Il peut y avoir autant d'autres champs que tu le souhaites,
Le nom et la localisation de la table peuvent être changés !
Il est préférable d'indexer le champ Ordre
Je sais, ça fait quatre remarques, pas deux...

Sur une feuille, deux listBox, une ordonnée (clause Order By) et une pas :
- lstTableOrdonnee
- lstTableNative

Au chargement de la feuille (Load), les deux listes sont renseignées

Une textBox qui permet de saisir la cle d'une occurrence à supprimer
- TxtCle

Un bouton (cmdSupprimer) qui , après contrôle de l'existence de la clé saisie dans TxtCle, supprime la clé et renumérote (comme tu le souhaites, j'espère), les occurrences de la table.

Les deux listes sont rafraîchies (ça fait toujours du bien...).

Voilà, c'est tout simple, t'aurais pu trouver Merde...

Amitiés - Renaud -

***************
The Code.... (pour le Design, tu te débrouilles...)
***************

Option Explicit

'*------------------------------------------------
Public gdtbMabase As Database, gwrkMonWorkSpace As workspace
Private Sub cmdSupprimer_Click()
Dim strCle As String
strCle = CStr(txtCle.Text)
If strCle <> "" Then
Call pcdSupprimerCle(strCle)
End If
End Sub
Private Sub Form_Load()
Set gwrkMonWorkSpace = CreateWorkspace("", "admin", "", dbUseJet)
Set gdtbMabase = gwrkMonWorkSpace.OpenDatabase("D:
enaudd1.mdb", False, False)
Call pcdRemplirListe
End Sub

'*------------------------------------------------
Private Sub pcdRemplirListe()
Dim rdsMonSet As Recordset
lstTableNative.Clear
lstTableOrdonnee.Clear
Set rdsMonSet = gdtbMabase.OpenRecordset("select champ1,ordre from table1 order by Ordre")
With rdsMonSet
While Not .EOF
lstTableNative.AddItem .Fields("Ordre").Value & " - " & .Fields("Champ1").Value
.MoveNext
Wend
.Close
End With
Set rdsMonSet = gdtbMabase.OpenRecordset("select champ1,ordre from table1")
With rdsMonSet
While Not .EOF
lstTableOrdonnee.AddItem .Fields("Ordre").Value & " - " & .Fields("Champ1").Value
.MoveNext
Wend
.Close
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
gdtbMabase.Close
gwrkMonWorkSpace.Close
End Sub

'*------------------------------------------------
Private Sub pcdSupprimerCle(ByVal pstrCle As String)
Dim strSql As String, lngOrdreSupprime As Long
Dim rdsMonSet As Recordset
'recupère la cle supprimée - elle doit être unique ...Set rdsMonSet gdtbMabase.OpenRecordset("select champ1,ordre from table1 WHERE Champ1 '" & pstrCle & "'")
With rdsMonSet
If Not .EOF Then
lngOrdreSupprime = .Fields("Ordre").Value
Else
' n'existe pas ...
MsgBox "L'occurrence " & pstrCle & " n'existe pas"
.Close
Exit Sub
End If
.Close
End With
' supprime la clestrSql "DELETE FROM Table1 WHERE Champ1 '" & pstrCle & "'"
gdtbMabase.Execute strSql, dbFailOnError
Call pcdRenumeroter(lngOrdreSupprime)
End Sub

'*------------------------------------------------
Private Sub pcdRenumeroter(ByVal plngCle As String)
' recoit le numéro d'ordre de la clé supprimée
Dim rdsMonSet As Recordset
Set rdsMonSet = gdtbMabase.OpenRecordset("select champ1,ordre from table1")
With rdsMonSet
While Not .EOF
' avant , c'est pas la peine de renuméroter
' d'ailleurs, c'était mieux Aaaavant....
If .Fields("Ordre").Value > plngCle Then
.Edit
.Fields("Ordre").Value = .Fields("Ordre").Value - 1
.Update
End If
.MoveNext
Wend
.Close
End With
Call pcdRemplirListe
End Sub
0
Je suis débutant et mes moyens ici chez moi sont limités...désolé de t'étonner. Avoir plus d'expérience je ne vous embeterais plus...
0
C'était une plaisanterie, ne te fâches pas !!!

Et continues à poser des questions, c'est comme ca qu'on avance !!!

Amitiés - Renaud -

>PS : J'espère au moins que ca t'as aidé... A bientôt...
0
Rejoignez-nous