Here is some of my code, but it's quite long.  I've trimmed it to just the sections 
that deal with data reading and writing, as I'm pretty confident that the error is in 
there somewhere.

NOTE:  SchedBox(col,row) is an array of custom control that is similar to a cell in a 
grid.

Quick List of subroutines and functions:

Sub             OpenSession                     Opens Session to Unidata
Sub             CloseSession            Closes Session to Unidata
Sub             SelectRecords           Selects Records in Unidata File
Sub             FillDataTable           Fills the 'Schedule1' DataTable
Sub             Sched_Text_Changed      Called when scheduling text is changed in text 
boxes in custom control
Sub             Changed_Cust_Info               Called when customer text is changed 
in a text box in custom control
Function        GetNewID                        Returns 'NewCounter'
Sub             WriteData                       Writes a Record to Unidata File
Function        LoadSchedFileData               Returns 'OkToWrite'

Thanks for any help you may have.
- Dave

---------------------------------------------------------------------------------

     Public Sub OpenSession()
        '
        ' Create a session to work with
        ' 
        Session = CreateObject(UV_SESSION_OBJECT)
        If Session Is Nothing Then
            ' NB.  Errors will be reported by Visual Basic
            Exit Sub    ' End program
        End If
        Session.HostName = "<hostname>"
        Session.AccountPath = "<accountpath>"
        Session.UserName = "<username>"
        Session.Password = "<password>"
        '
        Session.Connect()
        If Session.isactive Then
            ' Continue with the program, then close the session.
            If Session.HostType = UVT_UNIX Then
                'MsgBox("You are connected to the UNIX server")
            End If
        Else
            ' Check for session errors - display dialog box with error code
            If Session.error <> UVE_NOERROR Then
                MsgBox("Unable to open connection due to error#: " & Session.error)
            End If
        End If
    End Sub

    Public Sub CloseSession()
        SchedFile.CloseFile()
        SchedFile = Nothing
        Session.Disconnect()
        If Session.isactive Then
            ' Continue with the program, then close the session.
            MsgBox("You are still connected.  Attempting one last time to disconnect.")
            Session.disconnect()
        End If
    End Sub

    Public Sub SelectRecords()
        ' Open a Select List
        SchedFile = Session.OpenFile("SCHED_DATA")
        SelectListObj = Session.SelectList(0)
        Session.Command.Text = "SSELECT SCHED_DATA BY DEL_DATE BY SEQ_NO"
        Session.command.exec()
        Session.command.text = "SAVE-LIST SD.JUNK"
        Session.command.exec()
        SelectListObj.GetList("SD.JUNK")
    End Sub

    Public Sub FillDataTable()
        Dim SchedRec As Object
        SchedFile.RecordID = SelectListObj.Next
        Do While Not SelectListObj.LastRecordRead
            ' Read a record and check for errors
            SchedFile.Read()
            If SchedFile.Error <> UVE_NOERROR Then
                MsgBox("Error reading from file (" & SchedFile.Error & ")")
                Exit Do
            End If
            ' Load the Schedule1 table
            '
            SchedRec = SchedFile.Record
            Dim anyRow As DataRow = Schedule1.NewRow
            anyRow("ID") = SchedFile.RecordID
            anyRow("JOB_NO") = SchedRec.Field(1).StringValue
            If SchedRec.Field(2).StringValue <> "" Then
                anyRow("DEL_DATE") = 
CDate(Session.Oconv(SchedRec.Field(2).StringValue, "D2/"))
            Else
                anyRow("DEL_DATE") = System.DBNull.Value
            End If
            '
            anyRow("CUST_NAME") = SchedRec.Field(3).StringValue
            anyRow("CITY") = SchedRec.Field(4).StringValue
            anyRow("STATE") = SchedRec.Field(5).StringValue
            anyRow("SEQ_NO") = SchedRec.Field(6).StringValue
            If SchedRec.Field(7).StringValue <> "" Then
                anyRow("PRM_DATE") = Session.Oconv(SchedRec.Field(7).StringValue, 
"D2/")
            Else
                anyRow("PRM_DATE") = System.DBNull.Value
            End If
            If SchedRec.Field(8).StringValue <> "" Then
                anyRow("PRM_TIME") = SchedRec.Field(8).StringValue
            Else
                anyRow("PRM_TIME") = System.DBNull.Value
            End If
            anyRow("TYPE") = SchedRec.Field(9).StringValue
            anyRow("HOURS") = SchedRec.Field(10).StringValue
            anyRow("CODE") = SchedRec.Field(11).StringValue
            anyRow("COLOR") = SchedRec.Field(12).StringValue
            anyRow("SYMBOL") = SchedRec.Field(13).StringValue
            anyRow("EMP") = SchedRec.Field(14).StringValue
            anyRow("REL_NO") = SchedRec.Field(15).StringValue
            anyRow("PRIORITY") = SchedRec.Field(16).StringValue
            anyRow("TRK_NO") = SchedRec.Field(17).StringValue
            Schedule1.Rows.Add(anyRow)
            '
            '
            SchedFile.RecordID = SelectListObj.Next     ' Get the next record ID
        Loop

    End Sub

   Private Sub Sched_Text_Changed(ByVal sender As Object, ByVal e As System.EventArgs)
        '
        Dim x As Integer
        Dim TempBox As TextBox
        Dim CustomerName, City, ReleaseNo As String
        TempBox = CType(sender, TextBox)
        FromBox = TempBox.Parent
        If FromBox.PrmDtInfo.Text <> "" Or FromBox.PrmTmInfo.Text <> "" Then
            SchedBox(FromBox.Column, FromBox.Row).PrmDtInfo.BackColor = Color.Red
            SchedBox(FromBox.Column, FromBox.Row).PrmTmInfo.BackColor = Color.Red
        Else
            SchedBox(FromBox.Column, FromBox.Row).PrmDtInfo.BackColor = Color.White
            SchedBox(FromBox.Column, FromBox.Row).PrmTmInfo.BackColor = Color.White
        End If
        '
        For x = 0 To Schedule1.Rows.Count - 1
            If Schedule1.Rows(x).Item("ID") = SchedBox(FromBox.Column, FromBox.Row).ID 
Then
                Schedule1.Rows(x).Item("CUST_NAME") = SchedBox(FromBox.Column, 
FromBox.Row).CustName
                Schedule1.Rows(x).Item("CODE") = SchedBox(FromBox.Column, 
FromBox.Row).CodeInfo.Text
                Schedule1.Rows(x).Item("PRIORITY") = SchedBox(FromBox.Column, 
FromBox.Row).PriorityInfo.Text
                Schedule1.Rows(x).Item("CITY") = SchedBox(FromBox.Column, 
FromBox.Row).City
                Schedule1.Rows(x).Item("PRM_DATE") = SchedBox(FromBox.Column, 
FromBox.Row).PrmDtInfo.Text
                Schedule1.Rows(x).Item("PRM_TIME") = SchedBox(FromBox.Column, 
FromBox.Row).PrmTmInfo.Text
                Schedule1.Rows(x).Item("TYPE") = SchedBox(FromBox.Column, 
FromBox.Row).TypeInfo.Text
                Schedule1.Rows(x).Item("HOURS") = SchedBox(FromBox.Column, 
FromBox.Row).HoursInfo.Text
                Schedule1.Rows(x).Item("EMP") = SchedBox(FromBox.Column, 
FromBox.Row).EmpInfo.Text
                Schedule1.Rows(x).Item("REL_NO") = SchedBox(FromBox.Column, 
FromBox.Row).RelNo
                Schedule1.Rows(x).Item("TRK_NO") = SchedBox(FromBox.Column, 
FromBox.Row).TruckInfo.Text
                '
                WriteData(SchedBox(FromBox.Column, FromBox.Row).ID)
            End If
        Next
    End Sub

    Public Sub Change_Cust_Info(ByVal sender As Object, ByVal e As 
System.Windows.Forms.MouseEventArgs)
        Dim testbox As TextBox
        Dim NewCustomer, NewCity, NewState, NewRelNo As String
        testbox = CType(sender, TextBox)
        FromBox = testbox.Parent
        If FromBox.CustInfo.Text <> "" Then
            If IsDBNull(SchedBox(FromBox.Column, FromBox.Row).CustName) Then
                NewCustomer = InputBox("State: ", "Enter Customer Name Here")
            Else
                NewCustomer = InputBox("Customer: ", SchedBox(FromBox.Column, 
FromBox.Row).CustName)
            End If
            If NewCustomer <> "" Then
                SchedBox(FromBox.Column, FromBox.Row).CustName = NewCustomer
            End If
            '
            If IsDBNull(SchedBox(FromBox.Column, FromBox.Row).City) Then
                NewCity = InputBox("City: ", "Town")
            Else
                NewCity = InputBox("City: ", SchedBox(FromBox.Column, 
FromBox.Row).City)
            End If
            If NewCity <> "" Then
                SchedBox(FromBox.Column, FromBox.Row).City = NewCity
            End If
            '
            If IsDBNull(SchedBox(FromBox.Column, FromBox.Row).State) Then
                NewState = InputBox("State: ", "STATE")
            Else
                Try
                    NewState = InputBox("State: ", SchedBox(FromBox.Column, 
FromBox.Row).State)
                Catch
                    NewState = InputBox("State: ", "STATE")
                End Try
            End If
            If NewState <> "" Then
                SchedBox(FromBox.Column, FromBox.Row).State = NewState
            End If
            '
            If IsDBNull(SchedBox(FromBox.Column, FromBox.Row).RelNo) Then
                NewState = InputBox("Release Number: ", "00000000000")
            Else
                NewRelNo = InputBox("Release Number: ", SchedBox(FromBox.Column, 
FromBox.Row).RelNo)
            End If
            If NewRelNo <> "" Then
                SchedBox(FromBox.Column, FromBox.Row).RelNo = NewRelNo
            End If
            '
            SchedBox(FromBox.Column, FromBox.Row).CustInfo.Text = 
SchedBox(FromBox.Column, FromBox.Row).CustName & vbCrLf & SchedBox(FromBox.Column, 
FromBox.Row).City & ", " & SchedBox(FromBox.Column, FromBox.Row).State & vbCrLf & 
SchedBox(FromBox.Column, FromBox.Row).RelNo & " - " & SchedBox(FromBox.Column, 
FromBox.Row).ID
            '
            Sched_Text_Changed(sender, System.EventArgs.Empty)
        Else
                MsgBox("Invalid Cell." & vbCrLf & "Please select another." & vbCrLf & 
"Thank you.", MsgBoxStyle.Information, "Cell Modification Error")
            End If
    End Sub


    Public Function GetNewID(ByVal NewCounter)
        Dim SchedDictFile As Object
        Dim counter As Integer
        '
        OpenSession()
        '
        SchedDictFile = Session.OpenFile("DICT SCHED_DATA")
        SchedDictFile.RecordID = "COUNTER"
        SchedDictFile.Read()
        '
        counter = SchedDictFile.record.field(1).stringvalue
        counter += 1
        SchedDictFile.record.field(1).stringvalue = counter
        '
        SchedDictFile.write()
        '
        SchedDictFile.CloseFile()
        SchedDictFile = Nothing
        Session.Disconnect()
        If Session.isactive Then
            ' Continue with the program, then close the session.
            MsgBox("You are still connected.  Attempting one last time to disconnect.")
            Session.disconnect()
            If Session.isactive Then
                ' Continue with the program, then close the session.
                MsgBox("After an attempt to disconnect, you are still connected.  
Please alert Amy to fix this problem.")
            Else
                MsgBox("You are now disconnected.")
            End If
        End If
        '
        NewCounter = counter
        '
        Return NewCounter
    End Function


    Public Sub WriteData(ByVal RecID As String)
        Dim SchedRec As Object
        Dim dtModifiedData As DataTable
        Dim Row As Integer
        Dim ThisRow As Integer
        Dim OkToWrite As Boolean = False
        Dim anyRow As DataRow = Schedule1.NewRow
        ' Open the session
        OpenSession()
        ' Update the DataSource
        SchedFile = Session.OpenFile("FURN_SCHED_DATA")
        SchedFile.RecordID = RecID

        ' Load the Schedule1 table
        OkToWrite = False
        Try
            OkToWrite = LoadSchedFileData(RecID)
        Catch
            anyRow("ID") = RecID
            anyRow("JOB_NO") = SchedBox(0, 0).JobNo
            anyRow("DEL_DATE") = System.DBNull.Value
            anyRow("CUST_NAME") = SchedBox(0, 0).CustName
            anyRow("CITY") = SchedBox(0, 0).City
            anyRow("STATE") = ""
            anyRow("SEQ_NO") = "0"
            anyRow("PRM_DATE") = System.DBNull.Value
            anyRow("PRM_TIME") = System.DBNull.Value
            anyRow("TYPE") = System.DBNull.Value
            anyRow("HOURS") = "0h"
            anyRow("CODE") = System.DBNull.Value
            anyRow("COLOR") = System.DBNull.Value
            anyRow("SYMBOL") = System.DBNull.Value
            anyRow("EMP") = "1"
            anyRow("REL_NO") = SchedBox(0, 0).RelNo
            anyRow("PRIORITY") = "N"
            anyRow("TRK_NO") = System.DBNull.Value
            Schedule1.Rows.Add(anyRow)
            '
            OkToWrite = LoadSchedFileData(RecID)
        End Try
        '
        If OkToWrite Then
            Try
                SchedFile.Write()
            Catch
                MsgBox("WriteData Subroutine:" & vbCrLf & "Could not write 
SchedFile.Record.ID# " & RecID & " to the Database")
            End Try
        End If
        If SchedFile.error <> 0 Then
            MsgBox("An error has occurred in the WriteData subroutine." & vbCrLf & 
"Could not update changed record." & vbCrLf & "Error# (" & SchedFile.error & ")" & 
vbCrLf & "Please notify system administrator immediately.", MsgBoxStyle.Critical, 
"Update Status")
        Else
            'MsgBox("SchedFile.Error = " & SchedFile.Error)
        End If
        ' Close the session
        CloseSession()
    End Sub

    Public Function LoadSchedFileData(ByVal RecId As String)
        Dim ThisRow As Integer
        Dim Flag As Boolean = False
        For ThisRow = 0 To Schedule1.Rows.Count
            If CInt(Schedule1.Rows(ThisRow).Item("ID")) = CInt(RecId) Then

                ' Job Number
                SchedFile.Record.field(1).stringvalue = 
Schedule1.Rows(ThisRow).Item("JOB_NO")

                ' Delivery Date
                If IsDBNull(Schedule1.Rows(ThisRow).Item("DEL_DATE")) Then
                    SchedFile.record.field(2).stringvalue = ""
                Else
                    SchedFile.Record.field(2).stringvalue = 
CStr(Session.Iconv(Schedule1.Rows(ThisRow).Item("DEL_DATE"), "D2/"))
                End If

                ' Customer Name
                If IsDBNull(Schedule1.Rows(ThisRow).Item("CUST_NAME")) Then
                    SchedFile.record.field(3).stringvalue = ""
                Else
                    SchedFile.Record.field(3).stringvalue = 
Schedule1.Rows(ThisRow).Item("CUST_NAME")
                End If

                ' City
                If IsDBNull(Schedule1.Rows(ThisRow).Item("CITY")) Then
                    SchedFile.record.field(4).stringvalue = ""
                Else
                    SchedFile.Record.field(4).stringvalue = 
Schedule1.Rows(ThisRow).Item("CITY")
                End If

                ' State
                If IsDBNull(Schedule1.Rows(ThisRow).Item("STATE")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(5).stringvalue = 
Schedule1.Rows(ThisRow).Item("STATE")
                End If

                ' Sequence Number
                Try
                    SchedFile.Record.field(6).stringvalue = 
Schedule1.Rows(ThisRow).Item("SEQ_NO")
                Catch
                    SchedFile.record.field(6).stringvalue = Nothing
                End Try

                ' Promised Date
                If IsDBNull(Schedule1.Rows(ThisRow).Item("PRM_DATE")) Then
                    SchedFile.record.field(7).stringvalue = ""
                Else
                    SchedFile.Record.field(7).stringvalue = 
Session.Iconv(Schedule1.Rows(ThisRow).Item("PRM_DATE"), "D2/")
                End If

                ' Promised Time
                If IsDBNull(Schedule1.Rows(ThisRow).Item("PRM_TIME")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(8).stringvalue = 
Schedule1.Rows(ThisRow).Item("PRM_TIME")
                End If

                ' Type
                If IsDBNull(Schedule1.Rows(ThisRow).Item("TYPE")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(9).stringvalue = 
Schedule1.Rows(ThisRow).Item("TYPE")
                End If

                ' Hours
                If IsDBNull(Schedule1.Rows(ThisRow).Item("HOURS")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(10).stringvalue = 
Schedule1.Rows(ThisRow).Item("HOURS")
                End If

                ' Code
                If IsDBNull(Schedule1.Rows(ThisRow).Item("CODE")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(11).stringvalue = 
Schedule1.Rows(ThisRow).Item("CODE")
                End If

                ' Color
                If IsDBNull(Schedule1.Rows(ThisRow).Item("COLOR")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(12).stringvalue = 
Schedule1.Rows(ThisRow).Item("COLOR")
                End If

                ' Symbol
                If IsDBNull(Schedule1.Rows(ThisRow).Item("SYMBOL")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(13).stringvalue = 
Schedule1.Rows(ThisRow).Item("SYMBOL")
                End If

                ' Employees
                If IsDBNull(Schedule1.Rows(ThisRow).Item("EMP")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(14).stringvalue = 
Schedule1.Rows(ThisRow).Item("EMP")
                End If

                ' Release (Picker) Number
                If IsDBNull(Schedule1.Rows(ThisRow).Item("REL_NO")) Then
                    SchedFile.record.field(15).stringvalue = ""
                Else
                    SchedFile.Record.field(15).stringvalue = 
Schedule1.Rows(ThisRow).Item("REL_NO")
                End If

                ' Priority
                If IsDBNull(Schedule1.Rows(ThisRow).Item("PRIORITY")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(16).stringvalue = 
Schedule1.Rows(ThisRow).Item("PRIORITY")
                End If

                ' Truck Number
                If IsDBNull(Schedule1.Rows(ThisRow).Item("TRK_NO")) Then
                    SchedFile.record.field(8).stringvalue = ""
                Else
                    SchedFile.Record.field(17).stringvalue = 
Schedule1.Rows(ThisRow).Item("TRK_NO")
                End If

                '
                Flag = True
                Exit For
            End If
        Next
        '
        Return Flag
    End Function

-----Original Message-----
I'm having trouble with a scheduling program I'm writing in VB.net, on a
WinXPpro system, using UniObjects, that extracts and writes data to a file
in our Unidata 6.0.3 system on an AIX 5.1L system.

The trouble that I'm having is that the data is getting corrupted.  As the
screen doesn't rebuild after a data save, I don't 'see' the problem until I
restart the program the next time around, and data is re-read from the
database.  

I've been through my program 3 times, and can't find an error.  I'm assuming
at this point that the error is outside my program, as I ran the same test
data through the program 5 times, and it only corrupted the data 3 times.
The other two it worked flawlessly.  If it was an error in my program, it
shouldn't ever work right, should it?

Also, the program treats every record equally, but the data is
intermittently corrupted, some records process fine, others get corrupted.
Some fields are lost all together.

Fortunately it's still in test mode, so we haven't lost any real data yet.

The data is doing things like this:

                Record 1:       Record 2:
DelDate:        03/18/04        03/18/04         <--OK
SeqNo:  3               3                <--OK
Type:           F               0               <----These two are mixed
together (* see below)
Hours:  0h              hF              <---/
Code:           -                                <===== This one is GONE!!!!
Color:  Blue            WBlu            <----These two are mixed together (*
see below)
Symbol: W               e               <---/
Emp:            1                                <===== This one is
GONE!!!!!
RelNo:  01234567001     N0123456700     <----These two are mixed together (*
see below)
Priority:       N               1               <---/

(* HERE!)  
At first, I thought that the data was being broken up at the wrong points,
but after a closer look, it appears that this is happening.  In each three
line group:
Line1:  Starts with the first character of line two, and loses it's last
character.
Line2:  Loses it's first character to line 1, and gains the last character
of line 1 at the end of it's data.
Line3:  Data is gone (unless it's a <space> character)

It's really crazy.

Anyone have any ideas for this one?  If so, any help is appreciated.

Thanks,
Dave

Notice of Confidentiality:  
The information included and/or attached in this electronic mail transmission may 
contain confidential or privileged information and is intended for the addressee.
Any unauthorized disclosure, reproduction, distribution or the taking of action in 
reliance on the contents of the information is prohibited.
If you believe that you have received the message in error, please notify the sender 
by reply transmission and delete the message without copying or disclosing it.
Thank you.
--
u2-users mailing list
[EMAIL PROTECTED]
http://www.oliver.com/mailman/listinfo/u2-users

Reply via email to