Ne pouvez pas modifier le type de données sous MS Access 2007
J'ai une énorme base de données (800 MO), qui se compose d'un champ appelé "Date de la Dernière modification" à l'heure actuelle, ce champ est entré comme un type de données texte, mais le besoin de le changer pour un champ de Date/Heure pour mener à bien certaines requêtes.
J'ai une autre exactement la même base de données, mais avec seulement 35 MO de données à l'intérieur et quand j'ai changer le type de données qu'il fonctionne bien, mais quand j'ai essayer de changer le type de données de grande base de données il me donne une erreur:
Micorosoft Office Access can't change the data type.
There isn't enough disk space or memory
Après avoir fait quelques recherches, certains sites de modifier le fichier de registre (MaxLocksPerFile) essayé ça aussi, mais pas de chance 🙁
Quelqu'un peut-il aider s'il vous plaît?
désolé de ne pas tout à fait sûr de ce que vous entendez par index :s les données sont dans un fichier CSV que j'ai utilisé pour importer dans Access et il na pas permettez-moi de définir le type de données puis, même problème lors de l'importation.
Si vous ne savez pas ce qu'est un index est probablement que vous n'en avez pas 🙂 Merci de poster deux ou trois dates pour afficher le format, merci.
OriginalL'auteur Khalid Fazeli | 2010-03-11
Vous devez vous connecter pour publier un commentaire.
Relativement fastidieux (mais simple) solution serait de briser le gros de la base de données en petites bases de données, de faire la conversion sur la plus petite des bases de données, puis de recombiner entre eux.
Cela a un avantage que si, par hasard, le texte est une date non valide dans un morceau, il sera plus facile à trouver (en raison de la plus petite des tailles de segment).
En supposant que vous avez une sorte de clé entière sur la table, allant de 1 à (dire) 10000000, vous pouvez simplement faire des requêtes comme
etc.
Assurez-vous de saisir et d'exécuter ces requêtes séparément, car il semble que l'Accès vous donnera une erreur de syntaxe si vous essayez d'exécuter plus d'un à la fois.
Si vos clés sont quelque chose d'autre, vous pouvez faire le même genre de chose, mais vous devrez être un peu plus compliqué à propos de votre OÙ l'une des clauses.
Bien sûr, une dernière chose à considérer si vous pouvez le swing, c'est de migrer vers une autre base de données qui a un peu plus de puissance. Je devine que vous avez des raisons pour lesquelles ce n'est pas facile, mais avec la quantité de données que vous parlez, vous aurez probablement être en cours d'exécution dans d'autres problèmes que vous continuez à utiliser l'Accès.
MODIFIER
Depuis que vous rencontrez toujours des problèmes, voici un peu plus en détail dans l'espoir que vous verrez quelque chose que je n'ai pas de décrire assez bien avant:
Ici, vous pouvez voir que j'ai créé une table "OutputIDrive" semblable à ce que vous décrivez. J'ai une plaque d'identification, si je n'ai que trois entrées.
le texte d'alt http://www.freeimagehosting.net/uploads/2829dbd2d3.png
Ici, j'ai créé une requête, disparu en mode SQL, et entra dans la appropriée de l'instruction SQL. Dans mon cas, parce que ma requête ne récupère que la valeur >= 0 et < 2, nous allons obtenir une ligne...l'un avec l'ID = 1.
le texte d'alt http://www.freeimagehosting.net/uploads/16e6e0dbc2.png
Quand je clique sur le bouton exécuter, je reçois un message qui dit/me prévient de ce qui va arriver...il va mettre une ligne dans une table. C'est bon...c'est ce que nous recherchons. Je clique sur "OK".
le texte d'alt http://www.freeimagehosting.net/uploads/319e58d763.png
Maintenant notre nouvelle table a été créée, et quand je clique dessus, nous pouvons voir que notre une ligne de données avec l'ID = 1 a été copiée sur cette nouvelle table.
le texte d'alt http://www.freeimagehosting.net/uploads/f7fd0aad82.png
Maintenant, vous devriez être en mesure de simplement modifier le nom de la table et le nombre de valeurs dans la requête SQL, et de l'exécuter à nouveau.
J'espère que cela va vous aider avec quoi que ce soit déclenché.
EDIT 2:
Aha! C'est le truc. Vous devez saisir et d'exécuter les instructions SQL une à une dans l'Accès. Si vous essayez de mettre plusieurs instructions dans et de les exécuter, vous obtiendrez cette erreur. Afin d'exécuter le premier, puis l'effacer et exécuter la seconde, et ainsi de suite. et vous devriez être bien. Je pense que cela va le faire! J'ai édité le ci-dessus pour le rendre plus clair.
OriginalL'auteur Beska
Comme John W. Vinson dit ici, le problème que vous rencontrez est que l'Accès veut conserver une copie de la table, alors qu'il a fait les changements, et qui l'amène à dépasser la taille maximale d'un fichier d'Accès. Le compactage et de réparation pourrait aider à obtenir le fichier sous la limite de taille, mais il ne fonctionne pas pour moi.
Si, comme moi, vous avez beaucoup de relations complexes et des rapports sur la vieille table que vous ne voulez pas avoir à le refaire, essayez cette variation sur @user292452 la solution de la place:
'YourTable'
) puis collez Seulement la Structure de l'arrièredans votre base de données avec un nom différent (c'est à dire
'YourTable_new'
).YourTable
de nouveau, et collez-ajouter les données àYourTable_new
.(Pour la pâte-ajouter, collez d'abord, et sélectionnez Ajouter les Données à une
Table.)
juste au cas où quelque chose va mal avec la partie suivante.
YourTable
à l'aide d'une requête suppression---sélectionner toutles champs, en utilisant l'astérisque, puis exécuter avec les paramètres par défaut.
YourTable
au besoin et enregistrezde nouveau.
YourTable_new
àYourTable
, et de vérifierqu'il n'y a pas d'erreur de conversion de type, longueur, etc.
YourTable_new
.merci---maintenant fixé.
OriginalL'auteur caedocyon
je viens d'avoir ce problème.
de l'espace disque et la mémoire disponible étaient très bien.
problème a disparu après un "pacte et de réparation."
coïncidence?
e.
OriginalL'auteur exotericist
Adapté de Karl Donaubauer réponse sur MSDN post:
Exécutez l'instruction suivante:
DBEngine.SetOption dbMaxLocksPerFile, 200000
Microsoft a un Article de base de connaissances qui traite de ce problème directement et explique la cause:
La base de connaissances l'article dit qu'il s'applique à l'Accès de 2002 et de 2003, mais il a travaillé pour moi lors de la modification d'un champ dans une .mdb à partir d'Access 2013.
OriginalL'auteur mwolfe02
Il est tout à fait possible que, dans une base de données de cette taille, vous avez des données de texte qui ne va pas se convertir à une Date/Heure valide.
Je dirais (et vous pouvez me détester pour cela) que vous exportez tous ceux prospective des valeurs de date de "Gros" et passer à travers eux (peut-être dans Excel) pour voir ceux qui ne sont pas formatés de la façon dont vous le souhaitez.
Puis-je suggérer la migration de données Access vers SQL Express ou quelque chose? C'est un fou énorme quantité de données à faire confiance à l'Accès.
Ce serait une bonne idée, mais je suis un novice complet quand il s'agit de toute autre base de données Access, mais si il y a une simple étape de la conversion de cette base de données en SQL il serait grand.
L'accès a une limite de 2 go, 800 mo n'est pas une quantité folle de données. Je pense qu'il est plus sûr de rester avec Accès si familier, à moins que vous khalidfazeli, attendre la quantité de données à plus du double.
pas de la quantité de données ne plus rien faire à partir de maintenant, seulement besoin d'un peu de requêtes, ce qui ne devrait pas ajouter plus de 200 mo.
OriginalL'auteur Phil.Wheeler
En supposant que le message d'erreur est exact, vous êtes en cours d'exécution à l'encontre d'un disque ou d'une limitation de la mémoire. En supposant que vous avez plus de quelques go d'espace libre sur votre disque dur, ma meilleure supposition est que la reconstruction de la table, se mettre la base de données (y compris l'espace de travail) de plus de 2 go par fichier limiter l'Accès.
Si c'est le cas, vous aurez besoin de:
Décharger les données dans certains format pratique et la charge dans une base de données vide avec un déjà existant, définition de la table.
Déplacer un sous-ensemble de données dans une table plus petite, modifier le type de données dans la table plus petite, compacte et réparer la base de données, et répétez jusqu'à ce que toutes les données sont converties.
Si le message d'erreur n'est PAS correct (ce qui est possible), la cause la plus probable est une mauvaise ou en dehors de la plage de la date dans votre texte-la colonne de la date.
OriginalL'auteur Larry Lustig
Copie de la table (c'est à dire 'YourTable') puis la coller juste sa structure dans votre base de données avec un nom différent (c'est à dire 'YourTable_new').
Modifier les champs dans le nouveau tableau de ce que vous voulez et sauvegarder.
Créer une requête ajout et de copier toutes les données de votre ancien tableau dans le nouveau.
Espérons-le, l'Accès sera automatiquement convertir l'ancien champ de texte directement à la valeur correcte pour le nouveau champ de Date/Heure. Si non, vous pourriez avoir à effacer l'ancien la table, et ajouter toutes les données et d'utiliser une chaîne en fonction de la date de convertir un champ lorsque vous ne l'append.
Aussi, si il y a un champ numéroauto dans la vieille table cela ne fonctionne pas, car il n'y a aucun moyen de s'assurer que l'ancienne numérotation automatique des valeurs de la ligne avec la nouvelle numérotation automatique des valeurs qui sont attribuées.
OriginalL'auteur
Vous avez été d'offrir tout un tas de façons différentes pour obtenir autour de l'espace disque message d'erreur.
Avez-vous essayé d'ajouter un nouveau champ à votre table en utilisant le type de données de Date et de mettre à jour le champ avec la valeur de la chaîne existante champ date? Si cela fonctionne, vous pouvez alors supprimer l'ancien champ et renommez le nouveau à l'ancien nom. Qui prendrait probablement moins de temp de l'espace que de faire une conversion directe de chaîne à ce jour sur un seul champ.
Si cela ne fonctionne toujours pas, vous pouvez être en mesure de le faire avec un sceond tableau avec deux colonnes, la première de type entier long (il est la clé primaire), la seconde, date. Puis ajouter la PK et de la chaîne de champ de date pour cette table vide. Puis ajoutez un nouveau champ de date à la table existante, et à l'aide d'une jointure, mise à jour de la nouvelle zone avec les valeurs du tableau à deux colonnes.
Cela peut exécuter dans le même problème. Il dépend du nombre de choses internes à la Jet/ACE moteur de base de données sur lesquels nous n'avons aucun contrôle réel.
OriginalL'auteur David-W-Fenton