| 
 
 |  |  | auteur : Team Access |  | Il faut utiliser un champ de type mémo, celui-ci accepte jusqu'à 65 535 caractères. 
 | 
|  |  | auteur : xp |  | Vous voulez un numéro automatique de format 00001 par exemple ?
 
 Dans la structure de tables, il faut taper dans la propriété format du numéro auto : 00000.
 
 | 
|  |  | auteur : Maxence HUBICHE |  | Cette question est étrange en elle-même, car cela ne convient pas, dans une base de données.Lorsqu'on crée une clé primaire en NuméroAuto, c'est pour éviter d'avoir à créer des identifiants.
 
 
Ces identifiants sont créés automatiquement ;Ils ne sont pas "porteurs d'information" ;Il ne s'agit pas d'un compteur. "Combler les trous dans un numéroAuto" est tout simplement une aberration. 
 Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library 
 Maintenant, si vous avez un champ numérique, vous pouvez combler les trous dans la numérotation en récupérant le premier numéro libre grâce à la fonction suivante : | FunctionNextID(LeChampAsString, LaTableAsString)AsLongDimsSQLAsStringDimrsAsDAO.RecordsetDimnAsLong 
    
    
    sSQL="Select Min(["&LECHAMP&"]-1) As NextID From "&LATABLE&" As T1 "sSQL=sSQL&"Where (((["&LECHAMP&"]-1)>0) And (((Select ["&LECHAMP&"] "sSQL=sSQL&"From "&LATABLE&" T2 "sSQL=sSQL&"Where T2.["&LECHAMP&"]=T1.["&LECHAMP&"]-1)) Is Null));"Setrs=CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot) 
    
    n=DCount("["&LeChamp&"]","["&LaTable&"]")Ifn=0ThenNextID=1ElseIfIsNull(rs(0))ThenNextID=DMax("["&LeChamp&"]","["&LaTable&"]")+1ElseNextID=rs(0)EndIfEndFunction
 | 
 |  | lien :  Comment réinitialiser un champ de type numéro Auto ? lien :
  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : FRED.G |  | Il faut créer dans la table un index multichamp et définir sa propriété unique à "oui". 
Pour créer l'index :
 1) Afficher la table en mode création
 2) Menu Affichage >> Index
 3) Sélectionner dans la colonne "Nom du champ", tous les champs concernés en laissant vides les champs de la colonne "Nom de l'index", sauf le premier champ, celui où commence la liste car il faut y inscrire le nom de l'index multichamp.)
 
 | 
|  |  | auteur : Drosera |  | | FunctionModifTable()OnErrorGoToGestionErreur
 
DoCmd.EchoFalseDoCmd.OpenTable"maTable", acViewDesign
 
CurrentDb.TableDefs("maTable")("colonne2").Properties("caption").Value="nouvelle légende"DoCmd.CloseacTable,"maTable", acSaveYesExit_function:
DoCmd.EchoTrueExitFunctionGestionErreur:MsgBoxErr.DescriptionResumeExit_functionEndFunction
 | 
 | 
|  |  | auteur : Team Access |  | Il vous faut utiliser ALTER en SQL.
 | Alter Table [TABLE] Alter Column [NOMCHAMP] [Type];
 | 
 | 
|  |  | auteur : Tofalu |  | Tout d'abord ajouter les références suivantes dans votre projet :
Microsot ADO Ext 2.X for dll and security
Microsof ActiveX Data Object 2.X Library
Puis dans un module, écrire le code suivant :
 | FunctionRenommerChamp(NomTableAsString, AncienAsString, NouveauAsString)AsBooleanOnErrorGoToerr:DimMCatAsNewADOX.CatalogDimMTableAsADOX.TableDimMFieldAsADOX.ColumnSetMCat.ActiveConnection=CurrentProject.ConnectionSetMTable=MCat.Tables(NomTable)SetMField=MTable.Columns(Ancien)
MField.Name=Nouveau
RenommerChamp=Trueerr:SetMCat=NothingSetMTable=NothingSetMField=NothingEndFunction
 | 
Utilisation :
 | MsgBoxRenommerChamp("produit2","stock","Stock1")
 | 
Renomme le champ stock de la table produit en stock1 et affiche true si l'opération a réussie, false sinon.  
 |  | lien :  Tutoriel de JM Rabilloud sur ADOX 
 | 
|  |  | auteur : Tofalu |  | Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library 
 Dans un module placer le code suivant : | PublicsubRenommerChamp(PTableasstring,POldasstring,PNewasString)Onerrorgotoerr:DimVTableasDAO.TabledefDimVFieldasDAO.FieldsetVTable=currentDb.TableDefs(PTable)setVField=VTable.Fields(POld)
VField.Name=PNewsetVField=NothingsetVTable=Nothingexitsuberr:msgbox"L\'action  renommer le champ a échouée"EndSub
 | 
Voici comment renommer le champ test de la table MaTable en essai | RenommerChamp "MaTable","test","essai"
 | 
 |  | lien : Comment renommer un champ en SQL ? lien :
  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : Tofalu |  | Tout d'abord ajouter les références suivantes dans votre projet :Microsot ADO Ext 2.X for dll and security
 Microsof ActiveX Data Object 2.X Library
Puis dans un module, écrire le code suivant :
 | FunctionSupprimerChamp(NomTableAsString, NomChamp)AsStringOnErrorGoToerrDimMCatAsNewADOX.CatalogSetMCat.ActiveConnection=CurrentProject.ConnectionMCat.Tables(NomTable).Columns.Delete(NomChamp)
SupprimerChamp=Trueerr:SetMCat=NothingEndFunction
 | 
Utilisation :
 | MsgBoxSupprimerChamp("Produit","C1")
 | 
Ceci affiche true si le champ C1 a été corectement supprimé de la table Produit.  
 |  | lien :  Tutoriel de JM Rabilloud sur ADOX 
 | 
|  |  | auteur : Lucifer |  | En règle générale on utilise du numérique lorsqu'on a des calculs à faire dessus (quantité, prix, compteur, ...), sinon on utilise du texte.
Donc ici, le code postal se mettra au format texte.
 
 | 
|  |  | auteur : Tofalu |  | Tout d'abord ajouter les références suivantes dans votre projet : 
 Microsot ADO Ext 2.X for dll and security
Microsof ActiveX Data Object 2.X Library
 | FunctionExisteChamp(NomTableAsString, NomChampAsString)AsBooleanOnErrorGoToerr:DimMCatAsNewADOX.CatalogDimMTableAsADOX.TableDimMFieldAsADOX.ColumnSetMCat.ActiveConnection=CurrentProject.ConnectionSetMTable=MCat.Tables(NomTable)SetMField=MTable.Columns(NomChamp)
ExisteChamp=Trueerr:SetMCat=NothingSetMTable=NothingSetMField=NothingEndFunction
 | 
Utilisation : | Debug.printExisteChamp("Produit","stock")
 | 
Affiche dans la fenêtre de debogage True si le champ existe dans la table Produit , false sinon.  
 |  | lien :  Tutoriel de JM Rabilloud sur ADOX 
 | 
|  |  | auteur : Drosera |  | Il faut utiliser la propriété InputMask du champ, exemple : 
 | Forms!MonFormulaire!Téléphone.InputMask="##-##-##-##-##"
 | 
 | 
|  |  | auteur : Maxence HUBICHE |  | Vous ne pouvez pas mettre de champs calculé dans une table Access. La maintenance de ces derniers n'est pas toujours efficace.
 Vous devez donc faire une requête.
 Dans cette requête, prenez tous les champs de la table et faites un champ calculé (ex : Select Champ1 + Champ2 From ...). Utilisez également la fonction vraifaux() si besoin est (afin de ne pas diviser par 0 par exemple).
 
 
 | 
|  |  | auteur : FRED.G |  | Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library | 
DimdbAsDAO.Database, tdfAsDAO.TableDef, fldAsDAO.FieldDimstrDescriptionAsStringSetdb=CurrentDbOnErrorGoToGestionErreurForEachtdfIndb.TableDefsForEachfldIntdf.FieldsstrDescription=fld.Properties("Description")IfMsgBox("Nom : "&fld.Name&vbCrLf&vbCrLf&_"Description : "&strDescription, _vbOKCancel, _"Champs de la table : "&tdf.Name)=vbCancelThenExitSubNextfldNexttdfSetfld=NothingSettdf=NothingSetdb=NothingExitSubGestionErreur:SelectCaseErr.NumberCase3270strDescription=""ResumeNextCaseElseMsgBox"Erreur inconnue.",vbCriticalSetfld=NothingSettdf=NothingSetdb=NothingexitsubEndSelect
 | 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : Tofalu |  | Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library 
 Ben le soucis c'est que une clé primaire peut être composée.
 
 
 Sinon, si tu souhaites connaitre le nom de la clé primaire, je doit bien avoir ça quelque part...
 
 
 Puis dans un module :
 
 | 
PublicFunctionNomClePrimaire(NomTableAsString)AsStringOnErrorGoToerrDimoIndAsDAO.IndexDimoDbAsDAO.databaseDimoTblAsDAO.tabledefDimoFldAsDAO.FieldSetoDb=CurrentDbSetoTbl=oDb.TableDefs(NomTable)ForEachoIndInoTbl.IndexesIfoInd.PrimaryThenForEachoFldInoInd.FieldsNomClePrimaire=NomClePrimaire&oFld.Name&","NextoFldExitForEndIfNextoInd
NomClePrimaire=Left(NomClePrimaire,Len(NomClePrimaire)-1)ExitFunctionerr:EndFunction
 | 
Utilisation :
 
 | 
MsgboxNomClePrimaire("MaTable")
 | 
Dans le cas de clés primaires composées, cela retourne le nom des champs séparés par des virgules.
 
 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : fdraven |  | 
Dans la table, quand vous sélectionnez le champ qui doit être numérique, vous devez avoir :
 
 
taille du champ : réel simpleFormat : standardDécimal : 3 
 Ainsi, si le nombre stocké est 16, il sera affiché : 16.000.
 
 | 
|  |  | auteur : cakeke |  | | 
ALTER TABLE <table1>ALTER COLUMN<champ1><typeChamp1>DEFAULT<valeurParDéfaut>
 | 
 | 
|  |  | auteur : Tofalu |  | 
	Il faut ajouter la référence Microsoft ADO Ext. For DDL and Security à votre projet puis travailler avec les objets ADOX.Key.
 
 
	Exemple :
 | 
SubPrimaryKeyADO()DimoCatAsADOX.CatalogDimoTblAsADOX.TableDimoKeyAsADOX.KeySetoCat=NewADOX.CatalogSetoCat.ActiveConnection=CurrentProject.ConnectionSetoTbl=oCat.Tables("MaTable")SetoKey=NewADOX.KeyWithoKey.Name="PK_MaTable".Type=adKeyPrimaryWith.Columns.Append"champ1".Append"champ2".Append"champ3"EndWithEndWithoTbl.Keys.AppendoKeyEndSub
 | 
 | 
|  |  | auteur : Tofalu |  | Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library puis travailler avec les objets DAO.Index. 
 Exemple :
 
 | 
SubPrimaryKey()DimoDbAsDAO.DatabaseDimoTblAsDAO.TableDefDimoIdxAsDAO.IndexSetoDb=CurrentDbSetoTbl=oDb.TableDefs("MaTable")SetoIdx=oTbl.CreateIndex("PK_MaTable")WithoIdx.Fields.Append.CreateField("Champ1").Fields.Append.CreateField("Champ2").Fields.Append.CreateField("Champ3").Primary=True.Required=TrueEndWithoTbl.Indexes.AppendoIdxEndSub
 | 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : Tofalu |  | 
	Si votre champ est de type numérique entier long, vous pouvez utiliser une méthode peu documentée du moteur Jet : la fonction GenUniqueIdCréer votre champ, définissez son type et fixer sa valeur par défaut à :
 =GenUniqueId()
 
 | 
|  |  | auteur : loufab |  | La propiété Valeur par défaut directement dans les propriétés du champ, dans la structure de la table. 
 | 
|  |  | auteur : Cafeine |  | Il n'est pas possible de créer un champ de type hypertexte via un SQL ALTER, puisqu'à ma connaissance les possibilités sont "réduites" à cela : | Texte : VARCHAR (255 caractères), CHAR(n) ou TEXT(n) (n caractères), LONGTEXT (mémo, 32K max.) ;
Fichier binaire : LONGBINARY (Objet OLE) ;
Compteur : COUNTER (NuméroAuto).Booléen : BIT ;
Nombre entier : SHORT (entier), SMALLINT (entier), LONG (entier long), INTEGER (entier long), BYTE (octet) ;
Nombre réel : SINGLE (réel simple), DOUBLE (réel double), NUMERIC (réel double) ;
Monétaire : CURRENCY, MONEY ;
Date/Heure : DATE, TIME, DATETIME ;
 | 
Pour faire cela je vous renvoi vers le tuto DAO de Tofalu dans la partie 4 au paragraphe 4.4.2. 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu 
 | 
|  |  | auteur : Tofalu |  | c'est une des impossibilités avec DAO.seul remède : ADO
 
 Pour ce code il est nécéssaire de mettre les références => Microsot ADO Ext 2.X for dll and security et Microsoft ActiveX Data Object 2.X Library | CurrentProject.Connection.Execute"ALTER TABLE TABLE1 ADD COLUMN ESSAI3 DECIMAL(18,0)"
 | 
 | 
|  |  | auteur : Meduse |  | l'erreur 3314 nous indique qu'on essaie de remplir un enregistrement alors qu'un des champs (voir plusieurs) de la table ne peut être null.
 
 En VBA ça correspond à la propriété Required de l'objet Field : si Required = True, le champ ne peut pas accepter de Null.
 | SubNoNull()DimdbAsDAO.Database, tdfAsDAO.TableDef, fldAsDAO.FieldDimstrDescriptionAsStringSetdb=CurrentDbSettdf=db.TableDefs("maTABLE")ForEachfldIntdf.FieldsIffld.Required=TrueThenIfIsNull(Me.Controls(fld.Name))ThenMsgBox"REMPLISSEZ MOI LE CHAMP"&fld.NameEndIfNextfldSetfld=NothingSettdf=NothingSetdb=NothingExitSub
 | 
 | 
|  |  | auteur : Tofalu |  | Quand vous disposez d'une grande table, il est parfois nécessaire de trier les champs par ordre alphabétique pour s'y retrouver facilement. 
 Cela peut être fait en VBA avec DAO en attribuant la même propriété OrdinalPosition à tous les champs. 
 Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library | Subranger()DimdbAsDAO.DatabaseDimfldAsDAO.FieldDimtblAsDAO.TableDefSetdb=CurrentDbSettbl=db.TableDefs("essai")ForEachfldIntbl.Fieldsfld.OrdinalPosition=1NextEndSub
 | 
En utilisant plusieurs valeurs de OrdinalPosition, il est possible de créer des groupes. Exemple pour afficher les clés primaires en haut de la liste des champs : | Subranger()DimdbAsDAO.DatabaseDimfldAsDAO.FieldDimtblAsDAO.TableDefSetdb=CurrentDbSettbl=db.TableDefs("essai")ForEachfldIntbl.FieldsIfIsPrimary(fld, tbl)Thenfld.OrdinalPosition=1Elsefld.OrdinalPosition=2EndIfNextEndSubFunctionIsPrimary(fldAsDAO.Field, tblAsDAO.TableDef)AsBooleanOnErrorGoToerrDimindAsDAO.IndexDimtfldAsDAO.FieldForEachindIntbl.IndexesIfind.PrimaryThenSettfld=ind.Fields(fld.Name)
IsPrimary=TrueEndIfNextinderr:EndFunction
 | 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
 
 
						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. |