Galactus13
Messages postés335Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 août 2023
-
14 déc. 2008 à 03:26
Galactus13
Messages postés335Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 août 2023
-
25 déc. 2008 à 18:27
Bonjour a tous
J'ai besoins d'un coup de mains car je rame depuis un moment sur ce qui suis :
j'aimerais pouvoir modifier une base de données existante déjà lourde,
J'utilise trois base.mdb différentes mais un seul listview à la fois
Il faut que mon système d'enregistrement soit compatible entre les 3 .mdb qui n'ont pas les mêmes champs !
' -------------------------------------------------------------
' Set DB = OpenDatabase(StatusBar1.Panels(1).Text)
' Set MaBase = DB.OpenRecordset(ListTables)
' ChampsAModifier = la ligne qui a été modifier ou créer
' Tables_Champs = listview
' -------------------------------------------------------------
If ChampsAModifier = 0 Then Exit Sub ' Si on n'a rien changer, on annule
On Error GoTo Erreur
Dim B As Long, C As Long, I As Integer
Dim LesChamps(50) As String
For I = 1 To Tables_Champs.ColumnHeaders.count ' On charge les Champs
LesChamps(I) = Tables_Champs.ColumnHeaders(I).Text
Next
Set DB = OpenDatabase(StatusBar1.Panels(1).Text)
Set MaBase = DB.OpenRecordset(ListTables)
With MaBase
For B = 1 To Tables_Champs.ListItems.count ' Parcourir les items
.AddNew ' Nouveau ...
.LesChamps(B) = Tables_Champs.ListItems(B).Text' Écrire le contenu de l'item
For C = 1 To Tables_Champs.ColumnHeaders.count - 1 ' Parcourir les SubItems
.LesChamps(C) = Tables_Champs.ListItems(B).SubItems(C) ' Enregistrer leurs contenu
Next C
.Update
Next B
End With
La syntaxe ".LesChamps(C)" crée une erreur ! m'en voulez pas mais je suis débutant et à force de lire des tonnes de doc, je sais plus ou j'en suis !
D'avance, merci !
' cnx
inexistante?
If CnxAdo Is Nothing Then
Exit Function
ElseIf Not (CnxAdo.State = adStateOpen)
Then
Exit Function
End If
'
sql vide?
sSql = Trim$(sSql)
If LenB(sSql) = 0 Then Exit Function
'
logique rows
If lFirstRow < 0 Then
Exit Function
ElseIf lLastRow < 0 Then
Exit Function
ElseIf (lLastRow > 0) And (lLastRow < lFirstRow)
Then
Exit Function
End If
' variables
Dim i As Long
Dim j As Long
Dim RstAdo As New ADODB.RecordSet
Dim Itmx As ListItem
' init Listview
If bHeader Then MyLv.ListItems.Clear:
MyLv.ColumnHeaders.Clear
MyLv.Visible = False
On Error GoTo Lbl_Err
' Paramètres RecordSet et lancement de la
requête
RstAdo.CursorLocation = adUseClient
RstAdo.Open sSql, CnxAdo, adOpenDynamic,
adLockPessimistic
' Si il n'y a pas de champs
on ne fait rien
If RstAdo.Fields.Count > 0 Then
' header
If bHeader Then
' on affiche
forcément toutes les colonnes puisque c'est la requête qui prévoit le
retour
For i = 0 To RstAdo.Fields.Count - 1
MyLv.ColumnHeaders.Add , ,
RstAdo.Fields(i).Name
Next i
End If
'
champs. attention!! si pas de header, il faut évidemment que la listview ait
été préparée avant!
If RstAdo.RecordCount > 0 Then
' 1er champ zéro
= aucun champs
If lFirstRow > 0 Then
' dernier
champ zéro tous, trop grand> on réduit
au dernier
If (lLastRow = 0) Or (lLastRow > RstAdo.RecordCount) Then
lLastRow = RstAdo.RecordCount
' ajoute
RstAdo.Move lFirstRow - 1
For i = lFirstRow - 1 To lLastRow - 1
Set Itmx = MyLv.ListItems.Add(, ,
CStr(RstAdo.Fields(0).Value))
For j = 1 To RstAdo.Fields.Count - 1
Itmx.SubItems(j) = IIf(LenB(RstAdo.Fields(j).Value) > 0, RstAdo.Fields(j).Value,
vbNullString)
Next j
' passe à
l'enregistrement suivant
If Not RstAdo.EOF Then RstAdo.MoveNext
Next i
' pas d'erreur
FillListViewFromAdoCnx = True
Else
' pas de
champs mais pas d'erreur pour autant
FillListViewFromAdoCnx = True
End If
Else
' pas d'erreur
FillListViewFromAdoCnx = True
End If
End If
' gestion d'erreur s'il y en a eu
Lbl_Err:
If Not (Err.Number = 0) Then
FillListViewFromAdoCnx = False
Err.Clear
End If
MyLv.Visible = True
'
destruction objets
RstAdo.Cancel
If Not (RstAdo.State = adStateClosed)
Then RstAdo.Close
Set RstAdo = Nothing
Set Itmx = Nothing
End Function
# Unload Me ' retour à la feuille principale (listView et Menu)
'et on suppose qu'il n'y a plus de code après
mais tu devrais consulter les tutos ou prendre un bon bouquin pour noël
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Galactus13
Messages postés335Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 août 20231 25 déc. 2008 à 12:37
bonjour,
Après des déboires avec internet, je remercie PCPT Mais hélàs, je n'ai toujours pas réussi à comprendre comment faire !
Remplir les colonnes du listview, sa j'y arrive très bien! y ajouter des données aussi !
mais enregistrer les dites données dans ma base sa c'est un bloquage parfait !
je sais que je n'aurais au max qu'une dizaine de champs sur 2 ou 3000 lignes
mais comme mes trois bases n'ont pas les même champs comment enregistrer les dit champs de la base ouverte ! (une seule ouverte a la fois)
J'ai essayé sa aussi:
# If ModifMDB.Caption <> " Nouvelle Fiche ...." Then
# Unload Me ' retour à la feuille principale
# End If
# ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 'ajout des données dans la table
# ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# MaBase.AddNew
# For I = 1 To X
# MaBase![LblEtiquet(I).caption] = IIf(IsNull(TxtDonnées(I).Text), "", (TxtDonnées(I).Text))
# Next I
# MaBase.Update
# Unload Me ' retour à la feuille principale (listView et Menu)
LblEtiquet(I).caption contient le nom du champs dans sa colonne
TxtDonnées(I).Text contient lui les données !
C'est plus un coups de pouce, mais une vrai leçon qu'il me faudrait !
Galactus13
Messages postés335Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 août 20231 25 déc. 2008 à 18:27
Lol! Pour le bouquin Ado et Access, j'y suis depuis le début du mois !
Rien que pour sa et le fonctionnement de la listview !
# MaBase.addNew
# For I=1 to X
# MaBase.fields(LblEtiquet(I).caption).value = IIf(IsNull(TxtDonnées(I).Text), "", (TxtDonnées(I).Text))
- J'avais testé sa aussi, mais sa ne marchait qu'en boitant car cela modifiait le dernier enregistrement et n'ajoutait pas mon enregistrement!!!
Et je viens de me rendre compte de l'erreur !
<< For I 1 >> alors que j'aurais du faire << For I 0 >> !
(Le premier Champs passait à la trappe!) Sa crevait mes yeux !
Grand merci, sa m'enlève déjà une grosse épine !
J'espère que la modification d'une fiche sera plus facile car je n'oublierais pas ce fichu Zéro ! c'est dur d'apprendre à mon age !