OVH Cloud OVH Cloud

probleme d'importation

3 réponses
Avatar
...Patrick
Bonsoir,
suite au changement de structure conseillé ici pour gagner du poids au
fichier, j'ai le problème suivant:
j'importe dans une table provisoire comme ceci:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97,
"T_arecevoirNEW", _
"c:\arece.xls", True, "Feuil1!"
CurrentDb.Execute "Delete from t_arecevoir"
CurrentDb.Execute "Insert Into t_arecevoir Select * from t_arecevoirNEW"

mais quand je veux importer dans la bonne table après effacement des records
access refuse car les champs ont été redefinis point de vue longueur
surtout.
Comment contourner ce problème ?

Merci

3 réponses

Avatar
Raymond [mvp]
Bonjour.

J'ai relu tes derniers messages et je pense qu'il y a confusion ou mauvaise
interprétation. En effet,
- les champs de la table t_arecevoir peuvent avoir des longueurs
différentes (champs texte) des champs de la table t_arecevoirNEW sans que
cela gêne access. Mais, ce qui est obligatoire, c'est que les champs de la
table t_arecevoir doivent tous contenir les valeurs des champs
correspondants de la table t_arecevoirNEW, sous peine que access refuse
l'ajout de la table. Dans ton cas, tu dois avoir une donnée de la table
t_arecevoirNEW qui est plus longue que la valeur maxi définie dans la table
t_arecevoir. Il serait bon de faire une requête sur la table t_arecevoirNEW
pour afficher la plus grande longueur de donnée possible de chaque champ
texte et d'ajuster la définition en rajoutant une petite marge.
- Par ailleurs, il faut bien penser aux spécifications des tables access:
Nombre de champs dans une table 255
Nombre de caractères dans un champ Texte 255
Nombre de caractères dans un enregistrement (à l'exclusion des champs
Mémo et Objet OLE) 2 000
Comment peut-on faire entrer 255 champs de 255 caractères dans une
enregistrement de 2000 caractères ? tout simplement que ce n'est pas la
longueur maxi qui compte mais la longeur réelle des champs.
les erreurs de dépassement des 2000 caractères ne seront déclenchées que
lorsque la longueur réelle d'un seul enregisterment dépassera 2000
caractères, ce qui peut demander plusieurs mois ou années. C'est pour ça
qu'il faut bien déclarer la longueur maxi, dès la création de la table.
donc si l'ensemble des caractères d'un enregistrement ne dépassent pas 2000,
les champs à 255 ne provoquent pas d'erreur.
- les enregistrements d'une table ne sont pas stockés d'après la longueur
déclarée mais d'après la longueur réelle, ce qui a pour effet que quelle que
soit la longueur maxi déclarée des champs texte, la table ne prend pas plus
de place dans une cas que dans l'autre.

désolé d'avoir été aussi long.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/


"...Patrick" a écrit dans le message de news:

| Bonsoir,
| suite au changement de structure conseillé ici pour gagner du poids au
| fichier, j'ai le problème suivant:
| j'importe dans une table provisoire comme ceci:
|
| DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97,
| "T_arecevoirNEW", _
| "c:arece.xls", True, "Feuil1!"
| CurrentDb.Execute "Delete from t_arecevoir"
| CurrentDb.Execute "Insert Into t_arecevoir Select * from t_arecevoirNEW"
|
| mais quand je veux importer dans la bonne table après effacement des
records
| access refuse car les champs ont été redefinis point de vue longueur
| surtout.
| Comment contourner ce problème ?
|
| Merci
|
Avatar
...Patrick
Merci Raymond,
non ce n'est pas long, c'est pédagogique...
mon probleme est que j'ai mis dans la bonne table les longueurs de champs
qui sont les bonnes mais le provisoire qui vient d'excel aura chaque fois
des tailles maxi..
Je vais donc mesurer les champs à l'etat, brut si tu me dis comment faire
( len ou nbcar et où le faire)

Merci par avance

Patrick

"Raymond [mvp]" a écrit dans le message
de news:
Bonjour.

J'ai relu tes derniers messages et je pense qu'il y a confusion ou
mauvaise
interprétation. En effet,
- les champs de la table t_arecevoir peuvent avoir des longueurs
différentes (champs texte) des champs de la table t_arecevoirNEW sans que
cela gêne access. Mais, ce qui est obligatoire, c'est que les champs de la
table t_arecevoir doivent tous contenir les valeurs des champs
correspondants de la table t_arecevoirNEW, sous peine que access refuse
l'ajout de la table. Dans ton cas, tu dois avoir une donnée de la table
t_arecevoirNEW qui est plus longue que la valeur maxi définie dans la
table
t_arecevoir. Il serait bon de faire une requête sur la table
t_arecevoirNEW
pour afficher la plus grande longueur de donnée possible de chaque champ
texte et d'ajuster la définition en rajoutant une petite marge.
- Par ailleurs, il faut bien penser aux spécifications des tables access:
Nombre de champs dans une table 255
Nombre de caractères dans un champ Texte 255
Nombre de caractères dans un enregistrement (à l'exclusion des champs
Mémo et Objet OLE) 2 000
Comment peut-on faire entrer 255 champs de 255 caractères dans une
enregistrement de 2000 caractères ? tout simplement que ce n'est pas la
longueur maxi qui compte mais la longeur réelle des champs.
les erreurs de dépassement des 2000 caractères ne seront déclenchées que
lorsque la longueur réelle d'un seul enregisterment dépassera 2000
caractères, ce qui peut demander plusieurs mois ou années. C'est pour ça
qu'il faut bien déclarer la longueur maxi, dès la création de la table.
donc si l'ensemble des caractères d'un enregistrement ne dépassent pas
2000,
les champs à 255 ne provoquent pas d'erreur.
- les enregistrements d'une table ne sont pas stockés d'après la longueur
déclarée mais d'après la longueur réelle, ce qui a pour effet que quelle
que
soit la longueur maxi déclarée des champs texte, la table ne prend pas
plus
de place dans une cas que dans l'autre.

désolé d'avoir été aussi long.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/


"...Patrick" a écrit dans le message de
news:

| Bonsoir,
| suite au changement de structure conseillé ici pour gagner du poids au
| fichier, j'ai le problème suivant:
| j'importe dans une table provisoire comme ceci:
|
| DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97,
| "T_arecevoirNEW", _
| "c:arece.xls", True, "Feuil1!"
| CurrentDb.Execute "Delete from t_arecevoir"
| CurrentDb.Execute "Insert Into t_arecevoir Select * from
t_arecevoirNEW"
|
| mais quand je veux importer dans la bonne table après effacement des
records
| access refuse car les champs ont été redefinis point de vue longueur
| surtout.
| Comment contourner ce problème ?
|
| Merci
|





Avatar
Raymond [mvp]
fais une requête comme ceci, en changeant les noms par les tiens et en
rajoutant tous les champs :
SELECT Max(Len([CHAMP1])) AS LGCHAMP1, Max(Len([CHAMP2])) AS LGCHAMP2 FROM
matable;
et tu obtiendras une seule ligne avec toutes les longueurs maxi des champs
de ta table.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/


"...Patrick" a écrit dans le message de news:

| Merci Raymond,
| non ce n'est pas long, c'est pédagogique...
| mon probleme est que j'ai mis dans la bonne table les longueurs de champs
| qui sont les bonnes mais le provisoire qui vient d'excel aura chaque fois
| des tailles maxi..
| Je vais donc mesurer les champs à l'etat, brut si tu me dis comment faire
| ( len ou nbcar et où le faire)
|
| Merci par avance
|
| Patrick