2016-08-08 17 views
0

ich einige Codes leite einen Schrägstrich getrenntes Feld in mehrere Zeilen aufgeteilt, aber der erste Wert in der Reihe trägt nicht vorbei. Weiß jemand, was ich vermisse? Auch Zeilen, die nur einen Datensatz enthalten, werden nicht übertragen.Split unberechenbar Länge Komma getrennt Feld nimmt nicht ersten Datensatz in Serie

Public Sub ReformatTable() 

Dim db   As DAO.Database 
Dim rs   As DAO.Recordset 
Dim rsADD  As DAO.Recordset 

Dim strSQL  As String 
Dim strMPG, strBusinessName, strCustomerNumber, strCustomerName, strCountStartDate, strCCStatus As String 
Dim strSplitMPG As String 
Dim varData  As Variant 
Dim i   As Integer 

Set db = CurrentDb 

' Select all eligible fields (have a comma) and unprocessed (SPLIT_MPG is Null) 
strSQL = "SELECT BUSINESS_NAME, CUSTOMER_NUMBER, CUSTOMER_NAME, COUNT_START_DATE, CC_STATUS, MPG, SPLIT_MPG FROM [tmStarCycleCountStatuses_SlashesforCommas] WHERE ([MPG] Like ""*/*"") AND ([SPLIT_MPG] Is Null)" 

Set rsADD = db.OpenRecordset("tmStarCycleCountStatuses_SlashesforCommas", dbOpenDynaset, dbAppendOnly) 

Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
With rs 
    While Not .EOF 
     strMPG = !MPG 
     strBusinessName = !BUSINESS_NAME 
     strCustomerNumber = !CUSTOMER_NUMBER 
     strCustomerName = !CUSTOMER_NAME 
     strCountStartDate = !COUNT_START_DATE 
     strCCStatus = !CC_STATUS 
     varData = Split(strMPG, "/") ' Get all comma delimited fields 

     ' Update First Record 
     .Edit 
     !SPLIT_MPG = Trim(varData(0)) ' remove spaces before writing new fields 
     .Update 

     ' Add records with same first field 
     ' and new fields for remaining data at end of string 
     For i = 1 To UBound(varData) 
      With rsADD 
       .AddNew 
       !MPG = strMPG 
       !SPLIT_MPG = Trim(varData(i)) ' remove spaces before writing new fields 
       !BUSINESS_NAME = strBusinessName 
       !CUSTOMER_NUMBER = strCustomerNumber 
       !CUSTOMER_NAME = strCustomerName 
       !COUNT_START_DATE = strCountStartDate 
       !CC_STATUS = strCCStatus 
       .Update 
      End With 
     Next 
     .MoveNext 
    Wend 

    .Close 
    rsADD.Close 

End With 

Set rsADD = Nothing 
Set rs = Nothing 
db.Close 
Set db = Nothing 

End Sub

ich keine Bilder noch aufgrund Ruf Verengungen veröffentlichen können, aber hier sind einige Links.

Hier ist der mehrfach nach dem Code: https://s9.postimg.org/fn3u70b5b/Multiple.jpg

Hier die einzelnen Datensätze nach Ausführung von Code: https://s10.postimg.org/bfq9z4snt/Singles.jpg

Ich fühle mich wie etwas super einfach es ist, dass ich hier bin fehlt, aber es sieht aus wie ich bin schon mit der MPG beschäftigt, also bin ich neugierig, warum ich nicht die Single oder die erste der Serie bekomme. Jede Hilfe wäre willkommen! Vielen Dank.

+0

'tmStarCycleCountStatuses_SlashesforCommas' ist eine Tabelle, nicht wahr? Von den Screenshots scheint es keinen Primärschlüssel zu geben. Was schlecht ist. Dies kann in Kombination mit zwei Recordsets, die auf derselben Tabelle arbeiten, dazu führen. – Andre

Antwort

0

Es sieht richtig zu mir, mit der Ausnahme, dass Sie so erklären müssen:

Dim strMPG As String 
Dim strBusinessNames As String 
Dim strCustomerNumbers As String 
Dim strCustomerNames As String 
Dim strCountStartDates As String 
Dim strCCStatus As String 

Ich denke, Sie werden einige Linien mit Debug.Print .. einsetzen müssen, um die Ereignisse zu verengen.

+0

Die Aufteilung der Deklarationen in separate Zeilen hat keine Auswirkungen. –

+0

Nein, das habe ich mir gedacht. Aber dennoch. Nun, was könnte 'Debug.Print' erzählen? – Gustav

+0

Das gleiche in meinem Beitrag. Es fehlen die ersten Werte. –

0

Verstanden. Hat meine Einstellung geändert. Dieser Code wird funktionieren. Das Muster, unabhängig von der Länge, würde immer gleich sein, so habe ich eine Rechts/Links-Combo und ganze Zahlen

Public Sub ReformatmStarCycleCountStatusesTable() 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim strSQL As String 
Dim strMPG As String 
Dim strBusinessName As String 
Dim strCustomerNumber As String 
Dim strCustomerName As String 
Dim dteCountStartDate As Date 
Dim strCCStatus As String 
Dim strSplitMPG As String 
Dim intRemainingLength As Integer 
Dim intInitialLength As Integer 
Dim intStartPoint As Integer 
Dim varData As Variant 

Set db = CurrentDb 
DoCmd.SetWarnings False 

' Select all eligible fields (have a comma) 
strSQL = "SELECT * FROM [mStar Cycle Count Statuses] WHERE [PRODUCT_FILTER_VALUE] is not null" 

Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
With rs 
    While Not .EOF 
     strMPG = !PRODUCT_FILTER_VALUE 
     strBusinessName = !BUSINESS_NAME 
     strCustomerNumber = !CUSTOMER_NUMBER 
     dteCountStartDate = !COUNT_START_DATE 
     strCCStatus = !Status 

     intInitialLength = Len(strMPG) 
     intRemainingLength = intInitialLength 

     intStartPoint = 2 

     Do While intRemainingLength > 0 

      strSQL = "INSERT INTO tmStarCycleCountStatuses VALUES ('" & strBusinessName & "', '" & strCustomerNumber _ 
        & "', #" & dteCountStartDate & "#, '" & strCCStatus & "', '" & Right(Left(strMPG, intStartPoint), 2) & "')" 
      DoCmd.RunSQL (strSQL) 

      intStartPoint = intStartPoint + 3 
      intRemainingLength = intRemainingLength - 3 

     Loop 

     intStartPoint = 1 
     .MoveNext 

    Wend 

    .Close 

End With 

DoCmd.SetWarnings True 
Set rs = Nothing 
db.Close 
Set db = Nothing 

End Sub