Hoi iedereen,
Hier ben ik weer met een groot vraagteken.
Eerst ff een beetje de achtergrond uitleggen:
In een db (ooit opgezet door iemand die al lang weg is) wordt een .txt file ingelezen, deze txt file bevat verschillende lijnen die apart moeten ingelezen worden en kunnen herkend worden aan de 4 éérste karakters in zo'n lijn.
Vb van de 2 verschillende records:
702050000100018329268690326/04/201000:01:0026/04/2010 23/04/201000:00186801B0100012010000024003L0025/04/201020:09:06
Dit is een lijn die begint met 7020
702150000100018329268690000000000283086524690926 0 000000100000000100000000000SP00000000000000010000 0000000000000000000000000000 0000000000000000000000000000 000000000000000000000000000000060000000600000006000000000000000000000000000000000000000000000000000008005LP000000180 000000000016289598 000000000000000000
Dit is een lijn die begint met 7021
Het verschil om in te lezen wordt opgevangen met een Select Case en is geen enkel probleem.
Het probleem is dat ik bij Case 7021 wil uitsluiten dat in het Field.(Referentie) een getal komt onder 99999.
Ik heb al geprobeerd met CancelUpdate maar toch ben ik hier niet zeker van en misschien is er een betere manier.
Als er een lijn komt met bijv.0006651 mag deze niet weggeschreven worden in de recordset en de teller mag niet verhogen.
Zulke lijnen moeten als het ware deleted worden.
Dit is de code:
Ik kan de db niet meesturen want die is gigantisch groot.
Groetjes,
Ambertje
ja ik ben met veel tegelijk bezig
Hier ben ik weer met een groot vraagteken.
Eerst ff een beetje de achtergrond uitleggen:
In een db (ooit opgezet door iemand die al lang weg is) wordt een .txt file ingelezen, deze txt file bevat verschillende lijnen die apart moeten ingelezen worden en kunnen herkend worden aan de 4 éérste karakters in zo'n lijn.
Vb van de 2 verschillende records:
702050000100018329268690326/04/201000:01:0026/04/2010 23/04/201000:00186801B0100012010000024003L0025/04/201020:09:06
Dit is een lijn die begint met 7020
702150000100018329268690000000000283086524690926 0 000000100000000100000000000SP00000000000000010000 0000000000000000000000000000 0000000000000000000000000000 000000000000000000000000000000060000000600000006000000000000000000000000000000000000000000000000000008005LP000000180 000000000016289598 000000000000000000
Dit is een lijn die begint met 7021
Het verschil om in te lezen wordt opgevangen met een Select Case en is geen enkel probleem.
Het probleem is dat ik bij Case 7021 wil uitsluiten dat in het Field.(Referentie) een getal komt onder 99999.
Ik heb al geprobeerd met CancelUpdate maar toch ben ik hier niet zeker van en misschien is er een betere manier.
Als er een lijn komt met bijv.0006651 mag deze niet weggeschreven worden in de recordset en de teller mag niet verhogen.
Zulke lijnen moeten als het ware deleted worden.
Dit is de code:
Code:
Private Function fSD_inlezen()
Dim txt As TextStream
Set txt = fso.OpenTextFile(strBestand)
Dim rst7020 As DAO.Recordset, lng7020 As Long
Dim rst7021 As DAO.Recordset, lng7021 As Long
Dim strLijn As String
Set rst7020 = CurrentDb.OpenRecordset("SELECT * FROM Tbl_SD_7020 WHERE Code_Import=" & lngCodeImport)
Set rst7021 = CurrentDb.OpenRecordset("SELECT * FROM Tbl_SD_7021 WHERE Code_Import=" & lngCodeImport) [COLOR="darkgreen"]' & "And (Referentie > '99999')") werkt niet[/COLOR]
Dim strVeld As String
With txt
Do Until .AtEndOfStream
strLijn = .ReadLine
Select Case VBA.Left(strLijn, 4)
Case "7020"
With rst7020
lng7020 = lng7020 + 1
.AddNew
.Fields("ID_7020").Value = lng7020
.Fields("Code_import").Value = lngCodeImport
strVeld = VBA.Mid(strLijn, 5, 2)
.Fields("DC").Value = VBA.CByte(strVeld)
strVeld = VBA.Mid(strLijn, 24, 2)
.Fields("WH").Value = VBA.CByte(strVeld)
strVeld = VBA.Mid(strLijn, 7, 8)
.Fields("Customer_ID").Value = VBA.CLng(strVeld)
strVeld = VBA.Mid(strLijn, 44, 10)
.Fields("Deldate").Value = fString_To_Date(strVeld)
strVeld = VBA.Mid(strLijn, 104, 4)
.Fields("OrderType").Value = strVeld
.Update
End With
Case "7021"
With rst7021
strVeld = VBA.Mid(strLijn, 42, 18)
lng7021 = lng7021 + 1
.AddNew
.Fields("ID_7020").Value = lng7020
.Fields("ID_7021").Value = lng7021
.Fields("Code_import").Value = lngCodeImport
strVeld = VBA.Mid(strLijn, 42, 18)
[B][COLOR="navy"] If strVeld > 99999 Then [/COLOR][/B]
.Fields("Referentie").Value = VBA.Trim(strVeld)
strVeld = VBA.Mid(strLijn, 24, 18)
.Fields("PalletNumber").Value = VBA.Trim(strVeld)
strVeld = VBA.Mid(strLijn, 63, 9)
.Fields("Qty_Ordered").Value = VBA.CLng(strVeld) / 100
strVeld = VBA.Mid(strLijn, 72, 9)
.Fields("Qty_Shipped").Value = VBA.CLng(strVeld) / 100
strVeld = VBA.Mid(strLijn, 81, 9)
.Fields("Qty_NotShipped").Value = VBA.CLng(strVeld) / 100
strVeld = VBA.Mid(strLijn, 90, 2)
.Fields("ReasonCode").Value = strVeld
strVeld = VBA.Mid(strLijn, 253, 9)
.Fields("Case_Weight").Value = VBA.CDbl(strVeld) / 1000
.Update
[B][COLOR="navy"] Else
rst7021.CancelUpdate
End If[/COLOR][/B]
End With
End Select
Loop
.Close
End With
Set txt = Nothing
Set fso = Nothing
rst7020.Close
Set rst7020 = Nothing
rst7021.Close
Set rst7021 = Nothing
End Function
Ik kan de db niet meesturen want die is gigantisch groot.
Groetjes,
Ambertje
ja ik ben met veel tegelijk bezig
Laatst bewerkt: