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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 |
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" <NOSPAM_p_mackay@hotmail.com> a écrit dans le message de news:
u9gRGfZtGHA.3240@TK2MSFTNGP03.phx.gbl...
| 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
|
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 |
...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 |
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]" <xyzofficesystem.accessxyz@free.fr> a écrit dans le message
de news: OGtHa5ZtGHA.4080@TK2MSFTNGP03.phx.gbl...
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" <NOSPAM_p_mackay@hotmail.com> a écrit dans le message de
news:
u9gRGfZtGHA.3240@TK2MSFTNGP03.phx.gbl...
| 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
|
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 |
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
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" <NOSPAM_p_mackay@hotmail.com> a écrit dans le message de news:
ejFvuFatGHA.3240@TK2MSFTNGP03.phx.gbl...
| 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
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