cs_cybercorp
Messages postés44Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention16 août 2009
-
20 oct. 2007 à 13:00
cs_cybercorp
Messages postés44Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention16 août 2009
-
20 oct. 2007 à 22:23
Bonjour
J'ai une table qui me permet d'importer des données d'une feuile excel. Lors de chaque importation je dois vider ma table avant de la récupération(environ 3400 lignes)
Mon problème c'est que la clé primaire ne se réinitialise pas et que j'ai maintenant des numéros a 220 000 a force de faire des importations.
J'ai essayé de compacté ma table, mais ça ne marche pas.
Celui qui ajoute de nouvelles connaissances aux anciennes est le véritable professeur.(Confucius)
cs_cybercorp
Messages postés44Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention16 août 2009 20 oct. 2007 à 22:23
Merci pour vos réponses.
Mon problème venait d'une erreur de code
Pour vider ma table j'utilise une requete nommée DeleteCg créée avec le générateur de requêtes
DELETE FROM TCNat WHERE (Nom <> "'')
StrFilePath =
My.Application.Info.DirectoryPath
Me.TCNatTableAdapter.DeleteCg()
CompactAndRepair(StrFilePath &
"\CG.mdb", StrFilePath)
CompactAndRepair est une fonction que j'ai trouvé il y a quelques temps. Je le remet ici car ça peut toujours servir.
Public
Function CompactAndRepair(
ByVal DbPath
As
String,
ByVal TmpFolder
As
String)
As
Boolean
Dim Oparams
As
Object
Dim OJro
As
Object = Activator.CreateInstance(Type.GetTypeFromProgID(
"Jro.JetEngine"))
Dim StrLblPath
As
String
If
Not File.Exists(DbPath)
Then
MessageBox.Show(
"Base de donnée non trouvée.",
"Administrateur", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
"lbd"
If File.Exists(StrLblPath)
Then
MessageBox.Show(
"La base de données est déjà ouverte",
"Administrateur", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 20 oct. 2007 à 13:33
Salut,
Il y aurais peut-être une solution, c'est d'exporter tes donner de ta table existante dans une nouvelle table, ainsi, tu auras le numéro auto en chrono à chaque fois...
JPGVB
Messages postés96Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention10 mars 20112 20 oct. 2007 à 18:16
Bonjour, microsoft.support dit:
Lorsque vous développez une application, et que vous créez des
enregistrements bidons pour tester celle-ci, les tables contenant un
champ compteur incrémentent celui-ci au fur et à mesure de la saisie de
nouveaux enregistrements.
Ainsi même si vous supprimez vos 20 enregistrements de test, un nouvel
enregistrement aura comme valeur dans le champ compteur 21.
Pour réinitialiser ce champ, vous devez supprimer tous les
enregistrements de la table sans exceptions. Fermez ensuite votre base de
données. Compactez alors la base de données en sélectionnant le menu
Fichier puis la commande Compacter une base de données. Vous pouvez
maintenant réouvrir votre base et la table précédente. Créez un nouvel
enregistrement, le champ compteur démarre bien à 1.
REMARQUES :
Lorsque vous compactez votre base de données Access vous demande de
renommer votre base. Aussi avant d'effectuer la manipulation de
compactage, basculez sous le gestionnaire de fichier et renommez votre
base en BASETEMP.MDB. Vous n'avez plus alors qu'à redonner son nom
original lors de l'opération de compactage.
Cette manipulation permet de réinitialiser le champ compteur, uniquement
si la table ne contient pas d'enregistrements. Dans le cas contraire,
vous devez supprimer le champ compteur (si ce champ constitue la clé
primaire vous devez préalablement supprimer la clé primaire) puis le
recréer ( et éventuellement recréer la clé primaire) cf FT N° 463204 (http://support.microsoft.com/kb/463204/FR/). Mais attention, ceci n'est réalisable que si il n'y a aucunne relation
basée sur ce champ, sinon utilisez un compteur de type personnalisé cd FT
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 20 oct. 2007 à 19:26
Le plus simple c'est de re-créer une table temporaire à chaque fois, et l'effacer en fin d'utilisation. Pour cela voir du coté des objets ADOX .
Ajouter au projet la référence "Microsoft ADO Ext. 2.8 for DDL and security" (msADOX.dll)
Pour créer une table temporaire
'Ceci crée une table et ajoute un champ en clé primaire et auto-incrément, un champ de type Integer, et un autre champ de type String.
Sub createTable
Dim cat as ADOX.catalog
Dim tbl as new ADOX.Table
Dim i as single
Set cat = New ADOX.Catalog
cat.create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "\MyDB.mdb"
With tbl
.Name = "NomdemaTable"
Set .ParentCatalog = cat
.Columns.Append "MonChampID", adInteger
.Columns("MonChampID").Properties("AutoIncrement") = True
.Columns.Append "MonChamp1", adInteger, 20
.Columns.Append "MonChamp2", adVarWChar, 50
End With
cat.Tables.Append tbl
tbl.Keys.Append "ClePrimaire", adKeyPrimary, ""MonChampID"
End Sub
'Cette fonction efface la table "TableName" de la base de donnée
Function DeleteTable(TableName As String) As Boolean
On Error GoTo DeleteTable_Error
Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "\MyDB.mdb"
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = cn
DeleteTable = True
cat.Tables.Delete TableName
On Error GoTo 0
Set cat = Nothing
cn.Close
Set cn = Nothing
Exit Function
DeleteTable_Error:
DeleteTable = False
Resume Next
Set cat = Nothing
cn.Close
Set cn = Nothing