OVH Cloud OVH Cloud

Modification Taille de champ

4 réponses
Avatar
Fred87
Bonjour =E0 tous,

Je suis confront=E9 =E0 un petit PB.
Je cherche =E0 modifier la taille d'un champ TXT d'une table=20
=E0 l'aide de la m=E9thode DAO, sachant que la methode SQL=20
avec "ALTER TABLE" ne fonctionne pas car l'instruction=20
SQL "MODIFY COLUMN" n'est pas accept=E9 par ACCESS.

Si quelqu'un peut m'aider , merci d'avance.

Fred

4 réponses

Avatar
michel
Bonjour
Il me semble que c'est impossible
La propriéte size est en lecture seule pour un champ existant
HTH
Michel
"Fred87" a écrit dans le message de
news: 027901c3acef$f7dd42e0$
Bonjour à tous,

Je suis confronté à un petit PB.
Je cherche à modifier la taille d'un champ TXT d'une table
à l'aide de la méthode DAO, sachant que la methode SQL
avec "ALTER TABLE" ne fonctionne pas car l'instruction
SQL "MODIFY COLUMN" n'est pas accepté par ACCESS.

Si quelqu'un peut m'aider , merci d'avance.

Fred
Avatar
Jean Jacques
bonjour Fred

dans un module ou une fonction tu mets cette ligne

If ChangeFieldSize("tatable", "tonchamp", tataille) = False Then GoTo
tagestionerreur

tu ajoute cette fonction

Function ChangeFieldSize(TableName As String, FieldName As String, Size
As Long) As Boolean
'JJH adaptation d'une fonction de Douglas T. Ware
Dim tdef As TableDef 'Table to modify
Dim fldOld As Field 'Field to modify
Dim fldNew As Field 'Destination field
Dim Property As Property 'Field property
Dim strSQL As String 'SQL string to move the data

'Temp error states
Dim tError As Long
Dim tErrorDescription As String

On Error GoTo Err_Handler

'Get the table definition
Set tdef = db.TableDefs(TableName)

'Get the original field
Set fldOld = tdef.Fields(FieldName)

'Create the new field
Set fldNew = tdef.CreateField

'Copy all the old field's property's
With fldOld
On Error Resume Next
For Each Property In .Properties
fldNew.Properties(Property.Name) = Property.Value
Next
On Error GoTo Err_Handler
End With

'Set the new values
With fldNew
.Size = Size
.Name = "_" & .Name
End With

'Append the field
tdef.Fields.Append fldNew

' pour éviter le problème d'ordre des colonnes dans la feuille de
données
tdef.Fields.Refresh

'Copy the data
strSQL = "UPDATE " & TableName & " Set " & TableName & _
".[_" & FieldName & "] = [" & FieldName & "]"
db.Execute strSQL, dbFailOnError

'Delete the original field
tdef.Fields.Delete FieldName

'Rename the new field
fldNew.Name = FieldName
ChangeFieldType = True

Err_Out:
'Clean up the object ref's
On Error Resume Next
Set fldOld = Nothing
Set fldNew = Nothing
Set tdef = Nothing

'Check for error and raise if found
If tError <> 0 Then
On Error GoTo 0
Err.Raise Number:=Err.Number, Description:=tErrorDescription
End If
Exit Function

Err_Handler:
tError = Err.Number
tErrorDescription = Err.Description
ChangeFieldType = False
Resume Err_Out
End Function

et ça roule
bonne journée

jjh


Bonjour à tous,

Je suis confronté à un petit PB.
Je cherche à modifier la taille d'un champ TXT d'une table
à l'aide de la méthode DAO, sachant que la methode SQL
avec "ALTER TABLE" ne fonctionne pas car l'instruction
SQL "MODIFY COLUMN" n'est pas accepté par ACCESS.



Avatar
Jean Jacques
oups!!!

lamentable erreur de ma part

Function ChangeFieldSize(TableName As String, FieldName As String, Size
As Long) As Boolean

'Rename the new field
fldNew.Name = FieldName
ChangeFieldType = True ICI C'EST ChangeFieldSize


Err_Handler:
tError = Err.Number
tErrorDescription = Err.Description
ChangeFieldType = False ICI AUSSI C'EST ChangeFieldSize
Resume Err_Out
End Function

jjh


Avatar
Merci jean Jacques

En fait j'étais en train d'effectuer la même manipulation
(Copier les données aprés création d'un nouveau champ etc
etc..) mais je bloquais sur le renommage du champ.

Merci beaucoup de ton aide..

A charge de revanche

Trés cordialement

Fred