Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


La création d'un champ dans une table liée m'est refusé.
auteur : Maxence HUBICHE
Il faut créer le champ directement dans la table source. Donc si la table est une table d'une base Access, il est possible de passer par un autre workspace (ou une autre connexion, mais ça nécessiterait l'ajout des adox).
Dans ce Workspace, ouvrez la database en fonction de la propriété connect de la table (ou de la propriété qui donne la base d'origine) et là, vous pourrez ajouter votre champ.


Comment créer un formulaire instantané par rapport à une table X en VBA ?
auteur : Cafeine
_ Première possibilité :
DoCmd.SelectObject acTable, "VotreTable", True
DoCmd.RunCommand acCmdNewObjectAutoForm
_ Seconde possibilité :
Sub NouvForm(ByVal NomTable As String)

Dim frm As Form
Set frm = CreateForm
With frm
.RecordSource = NomTable
.RecordsetType = 0
.Caption = NomTable
.DefaultView = 2
.ViewsAllowed = 2
.ScrollBars = 0
.NavigationButtons = True
End With
AjouterTB frm, NomTable
DoCmd.Restore
DoCmd.Close acForm, frm.Name, acSaveYes
End Sub

Sub AjouterTB(f As Form, s As String)
    Dim rs As Recordset
    Dim fld As Field
    Dim c As Control
    Dim l As Control
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset(s, dbOpenSnapshot)
    For Each fld In rs.Fields
        Set c = CreateControl(f.Name, acTextBox, acDetail, "", fld.Name, 1440, 360 * i, 1440, 360)
        Set l = CreateControl(f.Name, acLabel, , c.Name, fld.Name, 0, 360 * i)
        i = i + 1
    Next
End Sub

[VBA] Comment masquer une table ?
auteur : Team Access
Application.SetHiddenAttribute acTable, NomdeTaTable, True

Comment faire pour trouver le plus grand nombre contenu dans une table ?
auteur : Gdal

Si la table n'est pas trop grosse

on peut utiliser Dmax dans la propriété source contrôle du champ txt_1
Source contrôle.....=MaxDom("nombre";"[Chiffre]")

PS: Cette solution est moins rapide que la deuxième pour les tables contenant beaucoup d'enregistrements, car les fonctions domaine (Dmax,dlookup,dmin,etc... sont très lentes par rapport à un recordset)


On crée un recordset

Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT MAX([Nombre])AS Maximum FROM [Chiffre]")
Me!txt_1 = rst!Maximum 'txt_1 est une zone de texte
rst.Close
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Rétablir les liaisons des tables liées après déplacement d'une base fractionnée
auteur : Tofalu
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library


Comme leurs noms l'indiquent, la première fonction ne permet de lier qu'une seule table avec un nom donné, alors que la seconde liera toutes les tables.
Vous devrez bien évidemment modifier ces codes afin qu'ils répondent parfaitement à votre attente.


Voici les variables et valeurs que vous aurez besoin de mettre à jour :
strMotPasse, strCheminBd, strNomTable

Sub lier()
Dim strMotPasse As String
Dim strCheminBd As String
Dim strNomTable As String
Dim strConnect As String
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef

'Définit mot passe, nom table, chemin base de données
strMotPasse = "pass"
strCheminBd = "c:\test.mdb"
strNomTable = "Table1"
'Instancie l'objet Database
Set oDb = CurrentDb
'Définit la chaine de connexion permettant la liaison
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=" & strCheminBd
'Crée la nouvelle table
Set oTbl = oDb.CreateTableDef(strNomTable)
With oTbl
    .Connect = strConnect
    .SourceTableName = strNomTable
End With
'Ajoute la table à la base de données
oDb.TableDefs.Append oTbl: oDb.TableDefs.Refresh
End Sub 

Sub lierToutes()
Dim strMotPasse As String
Dim strCheminBd As String
Dim strConnect As String
Dim strNomsTables() As String
Dim strTemp As String
Dim i As Integer
Dim oDb As DAO.Database
Dim oDbSource As DAO.Database
Dim oTbl As DAO.TableDef
Dim oTblSource As DAO.TableDef

'Définir mot passe et chemin base de données
strMotPasse = "pass"
strCheminBd = "c:\test.mdb"
'Définit la chaine de connexion permettant la liaison des tables
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=" & strCheminBd
'Instancie l'objet Database de la base courante
Set oDb = CurrentDb
'Instancie l'objet Database de la base protégée
Set oDbSource = DBEngine.OpenDatabase(strCheminBd, True, True, strConnect)

'Parcours l'ensemble des tables de la base de données protégée
'et stocke leur nom
For Each oTblSource In oDbSource.TableDefs
    'ignore les tables system
    If (oTblSource.Attributes And dbSystemObject) = 0 Then
        strTemp = strTemp & oTblSource.Name & "|"
    End If
Next
'Ferme la base de données sources (impératif pour la liaison)
oDbSource.Close: Set oDbSource = Nothing
'parcours le tableau de noms de tables
strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
For i = 0 To UBound(strNomsTables)
  'Crée une nouvelle table dans la base de données courante
  Set oTbl = oDb.CreateTableDef(strNomsTables(i))
  'Lie les deux tables
  oTbl.Connect = strConnect
  oTbl.SourceTableName = strNomsTables(i)
  'Ajoute la table à la base de données
  oDb.TableDefs.Append oTbl
Next i

'Rafraichit la liste des tables
oDb.TableDefs.Refresh
End Sub 
lien : faq Comment avec l'API GetOpenFileNameA ouvrir plusieurs fichiers à la fois ?
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?
lien : fr Comment utiliser une application en mode multi-utilisateurs par Dolphy35

Comment savoir quelle valeur vient de prendre un champ NuméroAuto après l'ajout d'un enregistrement ?
auteur : Petogaz
Vous venez d'ajouter un enregistrement et vous voulez avoir le numéroauto qui vient de s'incrémenter. L'obtention de ce numéro est différent selon qu'il s'agisse de la méthode DAO ou ADO.
Sous DAO le numéro est disponible immédiatement après l'appel de AddNew.exemple (pour obtenir le code de la ville) :

Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
rst.AddNew

Debug.print rst("Code Ville")<---'vous obtenez le code qui est un numéroauto
'Ajout d'autres infos
rst("Nom Ville") = "TEST"
rst("Code postal") = "57000"
rst.Update
par contre avec la methode ADO le code est disponible après l'appel de Update. exemple :

Pour exécuter ce code il faut activer les références : Microsot ADO Ext 2.X for dll and security et Microsof ActiveX Data Object 2.X Library
rst.AddNew
rst("Nom Ville") = "TEST"
rst("Code postal") = "57000"
rst.Update
Debug.Print rst("Code ville")
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Comment créer son propre numéroAuto ?
auteur : User
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library

Une table Table1 avec un champ num (clé primaire) de type Long Integer.

Un formulaire Form1 lié à la Table1 avec un contrôle Num (verrouillé) lié au champ Num de table1:

Et sur l'évènement BeforeInsert du form:
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)

   If rs.EOF Then
   Me!Num = 1
   Else
   rs.MoveLast
   Me!Num = rs!Num + 1
   End If

rs.Close
Set rs = Nothing

End Sub
et pour réinitialiser les numéroAuto :
Public Function Init_numeroAuto()
Dim rs As DAO.Recordset
Dim i As Long

On Error Resume Next

Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)

i = 1

   While Not (rs.EOF)
   rs.Edit
   rs!Num = i
   rs.Update
   
   rs.MoveNext
   i = i + 1
   Wend

rs.Close
Set rs = Nothing

End Function
ATTENTION : Ces fonctions sont valables pour des applications monopostes. Attention en réseau aux accès concurrents et simultanés.

lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Est-il possible de changer le nom d'une table, champ ou requête et que chaque partie de code basé sur un de ces éléments soit automatiquement mis à jour ?
auteur : Papy Turbo
Il faut cocher l'option l'option : Outils > Options > onglet Général > Correction automatique de nom, Access fera la mise à jour dans la base en cours.
Ça veut dire hélas, que si vos tables sont dans une base séparée, seule cette base sera mise à jour, pas l'application. C'est un problème qu'on souhaite voir résolu dans une prochaine version d'Access.
Une alternative :
Dans le code, une recherche/remplacement globale permet de tout remplacer d'un coup, mais faut chercher dans chaque requête, formulaire, c'est un travail assez pénible.


Comment récupérer la valeur du dernier numéro auto inséré dans une table ?
auteur : Frank
Première solution, on cherche tout simplement le numéro auto le plus élevé :

Select Max(monchampsAuto) From matable;
Cette seconde solution ne fonctionnera qu'à partir d'Access 2000.

Select @@identity From maTable;
Info : La variable @@IDENTITY est une variable globale SQL qui permet de retrouver la dernière valeur utilisée pour un numéro automatique d'une table.


Comment réinitialiser un champ de type numéro Auto ?
auteur : Tofalu
Il vous suffit pour cela de vider la table en question et de la compacter.
Mettez par exemple les enregistrements dans une table temporaire.

lien : faq Comment supprimer les trous des champs NuméroAuto ?

Comment vider les tables d'erreurs ?
auteur : Cafeine
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
Function PurgeErreurs()
 
Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
 If InStr(tbl.Name, "importerrors") or Instr(tbl.Name, "PasteErrors") Then
    Debug.Print "Effacement de " & tbl.Name
    CurrentDb.TableDefs.Delete tbl.Name
 End If
Next tbl
 
Set tbl = Nothing
 
End Function
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com