changer la taille d'un champ text dans une table par du code
1 réponse
michel_bdx
bonjour
voila j'ai une table dans une base de données du style pomme_data.mdb
dans cette base j'ai une table "rubrique" avec un champ "code" de type
'text' que j'ai limité a 3 caractères mais maintenant je voudrais le passer à
5 caracteres mais par du code et à partir d'une base applicative du genre
pomme_appi.mdb
et tout cela sans perdre mes données qui se trouvent dans ce champ
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
CErnst
La taille d'un champ une fois défini est en lecture seule. La procédure consiste donc à créer un nouveau champ ayant un nom quelconque "Codexyz" par exemple et les caractéristique du nouveau champ Puis par une requête, vous remplissez "Champxyz" par les valeurs du champ "Code" Vous pouvez alors supprimer le champ "Code" puis renommer "Champxyz" en "Code"
Mais attention, si le champ "Code" entre dans des relations entre tables, il faut d'abord supprimer ces relations puis effectuer la procédure de part et d'autre de la relation et enfin refaire la relation...
Sub vChgField(tblName As String, fldName As String, fldType As String, fldLenght As Long, Ajout As Boolean) 'Modification d'un champ Dim dft As TableDef Set dft = DbTo.TableDefs(tblName) 'Creation d'un champ Call vCreateField(tblName, fldName & "xyz", fldType, fldLenght, True) DbTo.Execute "UPDATE [" & tblName & "] Set [" & fldName & "xyz] = [" & fldName & "]" dft.Fields.Delete fldName dft.Fields(fldName & "xyz").Name = fldName dft.Fields.Refresh End Sub
Sub vCreateField(tblName As String, fldName As String, fldType As String, fldLenght As Long, Ajout As Boolean) 'Creation d'un champ
Dim dft As TableDef, chp As Field Set dft = DbTo.TableDefs(tblName)
Select Case fldType Case "dbBoolean": Set chp = dft.CreateField(fldName, dbBoolean) Case "dbByte": Set chp = dft.CreateField(fldName, dbByte) Case "dbInteger": Set chp = dft.CreateField(fldName, dbInteger) Case "dbLong": Set chp = dft.CreateField(fldName, dbLong) Case "dbCurrency": Set chp = dft.CreateField(fldName, dbCurrency) Case "dbSingle": Set chp = dft.CreateField(fldName, dbSingle) Case "dbDouble": Set chp = dft.CreateField(fldName, dbDouble) Case "dbDate": Set chp = dft.CreateField(fldName, dbDate) Case "dbText": Set chp = dft.CreateField(fldName, dbText, fldLenght): dft.CreateProperty Case "dbLongBinary": Set chp = dft.CreateField(fldName, dbLongBinary) Case "dbMemo": Set chp = dft.CreateField(fldName, dbMemo) Case "dbGUID": Set chp = dft.CreateField(fldName, dbGUID) End Select If Ajout = True Then dft.Fields.Append chp Else 'dft.Fields(1).Type = dbLong chp.Type = dbLong dft.Fields.Refresh End If dft.Fields.Refresh End Sub
"michel_bdx" a écrit dans le message de news:
bonjour
voila j'ai une table dans une base de données du style pomme_data.mdb dans cette base j'ai une table "rubrique" avec un champ "code" de type 'text' que j'ai limité a 3 caractères mais maintenant je voudrais le passer à 5 caracteres mais par du code et à partir d'une base applicative du genre pomme_appi.mdb et tout cela sans perdre mes données qui se trouvent dans ce champ
merci pour votre aide
michel
La taille d'un champ une fois défini est en lecture seule.
La procédure consiste donc à créer un nouveau champ ayant un nom quelconque
"Codexyz" par exemple et les caractéristique du nouveau champ
Puis par une requête, vous remplissez "Champxyz" par les valeurs du champ
"Code"
Vous pouvez alors supprimer le champ "Code" puis renommer "Champxyz" en
"Code"
Mais attention, si le champ "Code" entre dans des relations entre tables, il
faut d'abord supprimer ces relations puis effectuer la procédure de part et
d'autre de la relation et enfin refaire la relation...
Sub vChgField(tblName As String, fldName As String, fldType As String,
fldLenght As Long, Ajout As Boolean)
'Modification d'un champ
Dim dft As TableDef
Set dft = DbTo.TableDefs(tblName)
'Creation d'un champ
Call vCreateField(tblName, fldName & "xyz", fldType, fldLenght, True)
DbTo.Execute "UPDATE [" & tblName & "] Set [" & fldName & "xyz] = [" &
fldName & "]"
dft.Fields.Delete fldName
dft.Fields(fldName & "xyz").Name = fldName
dft.Fields.Refresh
End Sub
Sub vCreateField(tblName As String, fldName As String, fldType As String,
fldLenght As Long, Ajout As Boolean)
'Creation d'un champ
Dim dft As TableDef, chp As Field
Set dft = DbTo.TableDefs(tblName)
Select Case fldType
Case "dbBoolean": Set chp = dft.CreateField(fldName,
dbBoolean)
Case "dbByte": Set chp = dft.CreateField(fldName, dbByte)
Case "dbInteger": Set chp = dft.CreateField(fldName,
dbInteger)
Case "dbLong": Set chp = dft.CreateField(fldName, dbLong)
Case "dbCurrency": Set chp = dft.CreateField(fldName,
dbCurrency)
Case "dbSingle": Set chp = dft.CreateField(fldName, dbSingle)
Case "dbDouble": Set chp = dft.CreateField(fldName, dbDouble)
Case "dbDate": Set chp = dft.CreateField(fldName, dbDate)
Case "dbText": Set chp = dft.CreateField(fldName, dbText,
fldLenght): dft.CreateProperty
Case "dbLongBinary": Set chp = dft.CreateField(fldName,
dbLongBinary)
Case "dbMemo": Set chp = dft.CreateField(fldName, dbMemo)
Case "dbGUID": Set chp = dft.CreateField(fldName, dbGUID)
End Select
If Ajout = True Then
dft.Fields.Append chp
Else
'dft.Fields(1).Type = dbLong
chp.Type = dbLong
dft.Fields.Refresh
End If
dft.Fields.Refresh
End Sub
"michel_bdx" <michelbdx@discussions.microsoft.com> a écrit dans le message
de news: AC75DBD4-A680-4FD0-92D3-178840BAF452@microsoft.com...
bonjour
voila j'ai une table dans une base de données du style pomme_data.mdb
dans cette base j'ai une table "rubrique" avec un champ "code" de type
'text' que j'ai limité a 3 caractères mais maintenant je voudrais le
passer à
5 caracteres mais par du code et à partir d'une base applicative du genre
pomme_appi.mdb
et tout cela sans perdre mes données qui se trouvent dans ce champ
La taille d'un champ une fois défini est en lecture seule. La procédure consiste donc à créer un nouveau champ ayant un nom quelconque "Codexyz" par exemple et les caractéristique du nouveau champ Puis par une requête, vous remplissez "Champxyz" par les valeurs du champ "Code" Vous pouvez alors supprimer le champ "Code" puis renommer "Champxyz" en "Code"
Mais attention, si le champ "Code" entre dans des relations entre tables, il faut d'abord supprimer ces relations puis effectuer la procédure de part et d'autre de la relation et enfin refaire la relation...
Sub vChgField(tblName As String, fldName As String, fldType As String, fldLenght As Long, Ajout As Boolean) 'Modification d'un champ Dim dft As TableDef Set dft = DbTo.TableDefs(tblName) 'Creation d'un champ Call vCreateField(tblName, fldName & "xyz", fldType, fldLenght, True) DbTo.Execute "UPDATE [" & tblName & "] Set [" & fldName & "xyz] = [" & fldName & "]" dft.Fields.Delete fldName dft.Fields(fldName & "xyz").Name = fldName dft.Fields.Refresh End Sub
Sub vCreateField(tblName As String, fldName As String, fldType As String, fldLenght As Long, Ajout As Boolean) 'Creation d'un champ
Dim dft As TableDef, chp As Field Set dft = DbTo.TableDefs(tblName)
Select Case fldType Case "dbBoolean": Set chp = dft.CreateField(fldName, dbBoolean) Case "dbByte": Set chp = dft.CreateField(fldName, dbByte) Case "dbInteger": Set chp = dft.CreateField(fldName, dbInteger) Case "dbLong": Set chp = dft.CreateField(fldName, dbLong) Case "dbCurrency": Set chp = dft.CreateField(fldName, dbCurrency) Case "dbSingle": Set chp = dft.CreateField(fldName, dbSingle) Case "dbDouble": Set chp = dft.CreateField(fldName, dbDouble) Case "dbDate": Set chp = dft.CreateField(fldName, dbDate) Case "dbText": Set chp = dft.CreateField(fldName, dbText, fldLenght): dft.CreateProperty Case "dbLongBinary": Set chp = dft.CreateField(fldName, dbLongBinary) Case "dbMemo": Set chp = dft.CreateField(fldName, dbMemo) Case "dbGUID": Set chp = dft.CreateField(fldName, dbGUID) End Select If Ajout = True Then dft.Fields.Append chp Else 'dft.Fields(1).Type = dbLong chp.Type = dbLong dft.Fields.Refresh End If dft.Fields.Refresh End Sub
"michel_bdx" a écrit dans le message de news:
bonjour
voila j'ai une table dans une base de données du style pomme_data.mdb dans cette base j'ai une table "rubrique" avec un champ "code" de type 'text' que j'ai limité a 3 caractères mais maintenant je voudrais le passer à 5 caracteres mais par du code et à partir d'une base applicative du genre pomme_appi.mdb et tout cela sans perdre mes données qui se trouvent dans ce champ