écriture SQL pour faire cela va devenir très compliqué très rapidement, avec un tas de fonctions imbriquées Mid() et InStr(). Au lieu de cela, je le ferais avec une fonction utilisant Split().
Public Function SplitField(varInput As Variant, strDelimiter As String, lngItemRequested As Long) As Variant
Dim varTemp As Variant
Dim arrInput() As String
varTemp = varInput
If Left(varTemp, 1) = strDelimiter Then
varTemp = Mid(varTemp, 2)
End If
If right(varTemp, 1) = strDelimiter Then
varTemp = Left(varTemp, Len(varTemp) - 1)
End If
arrInput = Split(varTemp, strDelimiter)
If lngItemRequested - 1 <= UBound(arrInput()) Then
SplitField = arrInput(lngItemRequested - 1)
If SplitField = vbNullString Then
SplitField = Null
End If
Else
SplitField = Null
End If
End Function
Ensuite, dans SQL, vous appelleriez ainsi:
INSERT INTO TargetTable(Field1, Field2, Field3, Field4)
SELECT SourceTable.SourceField, SplitField([SourceField],"|",1),
SplitField([SourceField],"|",2),
SplitField([SourceField],"|",3),
SplitField([SourceField],"|",4)
FROM SourceTable
Notez que la fonction que j'ai écrit peut être utilisé même quand il y a un nombre variable de sous-parties dans le champ source. C'est-à-dire que si certains ont 4 parties et d'autres 2, cela n'a pas d'importance, car la fonction renvoie Null pour les parties qui ne sont pas présentes.
Quel SGBD utilisez-vous? – Matt
accès actuallllllllllly –
Y a-t-il une raison pour laquelle vous ne voulez pas utiliser une virgule? – FrustratedWithFormsDesigner