Write back not working

HELP  Any reason this is not writing back to the lines?  It thinks it writing.

oSEC = oSS.nSetProgram(oSS.nLookupTask("SO_SalesOrder_ui_ui"))
Set o = oScript.NewObject("SO_SalesOrder_bus", oSS)


    r = o.oLines.nMoveFirst()
Do Until o.oLines.nEOF = 1
    r = o.oLines.nGetValue("SalesOrderNo$", OrderNo)
    r = o.oLines.nGetValue("ItemCode$", ItemCode)
    r = o.oLines.nGetValue("WarehouseCode$", Warehouse)
    If ItemCode >= "A" Then
    Debug.Print "Read Order " & OrderNo & " Item " & ItemCode & " Whse " & Warehouse
    r = o.oLines.nSetValue("WarehouseCode$", "001")
    r = o.oLines.nSetValue("CommentText$", "Write")
    r = o.oLines.nWrite()
    Else
    Debug.Print "not updated " & ItemCode
    End If
    If OrderNo <> PreOrderno Then
    PreOrderno = OrderNo
    r = o.nWrite()
        If r <> 0 Then
      MsgBox "no write"
       Else
       End If
    End If
    r = o.oLines.nMoveNext()
 Loop
  ' Done with the Order line object
    r = o.DropObject()
    o = 0