Home All Groups Group Topic Archive Search About

ReadXML after File Copy

Author
4 May 2006 1:58 PM
Hans Munich
Szenario:

User selects a XML File ("products.xml") to import newest Data.
Data should replace Data in an existing Acess File which is connected
via Dataadapter (daadaptFLR). Bevore the Existing Data are deleted with
RunSQL("DELETE * From Tbl_Fl_Rundleitung").

Function the Works:
If I copy the File from the directory of the Application.exe then it
works fine.

Funktion Bugy:
If I select the same file from another directory, the
UpdateTable(dalForm.daadaptFLR, dsNew.Tbl_Fl_Rundleitung) Function
fails. With following Error: Please remove Index or Constrains to
prevent doubled Values. My Dataset seems to be loaded when i give it to
a datagrid. And i can see a red attention hint with the same Error in
first Line of Datagrid.

I'll be thankfull for any kind of Help.

Greetz from Munich



Private Sub btOFD_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btOFD.Click
        Dim ofd As New OpenFileDialog
        ofd.ShowDialog()
        Try
            File.Copy(ofd.FileName, Application.StartupPath() +
"\products.xml", True)
            pnStatus.BackColor = System.Drawing.Color.Green
        Catch ex As Exception
            pnStatus.BackColor = System.Drawing.Color.Red
        End Try
    End Sub

    Private Sub checkGeneratedXML()
        Dim dsNew As New dsPreise
        Dim dsHolder As New dsPreise
        Dim fstream As FileStream
        Dim dalForm As New frmPreise

        RunSQL("DELETE * From Tbl_Fl_Rundleitung")
        RunSQL("DELETE * From Tbl_Flexibel")
        RunSQL("DELETE * From Tbl_Front_St_Mdl")
        RunSQL("DELETE * From Tbl_Klm_Block")
        RunSQL("DELETE * From Tbl_Zubehoer")

        'DAten aus XML einlesen
        dsNew.Clear()
        dsNew.ReadXml(Application.StartupPath() + "\products.xml")
'XmlReadMode.DiffGram , XmlReadMode.ReadSchema

        dgLoadTEst.DataSource = dsNew

        UpdateTable(dalForm.daadaptFLR, dsNew.Tbl_Fl_Rundleitung)
        UpdateTable(dalForm.daadaptFlexibel, dsNew.Tbl_Flexibel)
        UpdateTable(dalForm.daadaptFrontsteckmodul,
dsNew.Tbl_Front_St_Mdl)

        'initSavedDetailsList()

        'MsgBox("OK")
        'Return dsNew
        'End If
    End Sub

  Private Sub UpdateTable(ByVal daAdapt As Data.OleDb.OleDbDataAdapter,
ByVal dt As DataTable)
        Dim ModifiedChildRecords As DataTable = dt
        For Each ro As DataRow In dt.Rows
            'MsgBox(ro.RowState)
        Next
        Try
            If Not ModifiedChildRecords Is Nothing Then
                daAdapt.Update(ModifiedChildRecords)
                ModifiedChildRecords.Dispose()
            End If
        Catch ex As Exception
            ' Update error, resolve and try again
            MsgBox("update Tab" + ex.Message + dt.TableName)
        End Try

    End Sub

Author
5 May 2006 8:23 AM
Cor Ligthert [MVP]
Hans,

From where you got that RunSQL  I would expect OleDBcommand.executenonquery

As well is my idea the command to remove all rows "Delete Table", I am not
so sure however from Jet (access) in that..

While this one will probably as well don't do very much well.
   ModifiedChildRecords.Dispose()

Or have you created your own wrapper and than we will find it of course
never.

I don't understand this.

Cor
..
Show quoteHide quote
"Hans Munich" <goo***@munixmember.de> schreef in bericht
news:1146751133.923509.69200@g10g2000cwb.googlegroups.com...
> Szenario:
>
> User selects a XML File ("products.xml") to import newest Data.
> Data should replace Data in an existing Acess File which is connected
> via Dataadapter (daadaptFLR). Bevore the Existing Data are deleted with
> RunSQL("DELETE * From Tbl_Fl_Rundleitung").
>
> Function the Works:
> If I copy the File from the directory of the Application.exe then it
> works fine.
>
> Funktion Bugy:
> If I select the same file from another directory, the
> UpdateTable(dalForm.daadaptFLR, dsNew.Tbl_Fl_Rundleitung) Function
> fails. With following Error: Please remove Index or Constrains to
> prevent doubled Values. My Dataset seems to be loaded when i give it to
> a datagrid. And i can see a red attention hint with the same Error in
> first Line of Datagrid.
>
> I'll be thankfull for any kind of Help.
>
> Greetz from Munich
>
>
>
> Private Sub btOFD_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles btOFD.Click
>        Dim ofd As New OpenFileDialog
>        ofd.ShowDialog()
>        Try
>            File.Copy(ofd.FileName, Application.StartupPath() +
> "\products.xml", True)
>            pnStatus.BackColor = System.Drawing.Color.Green
>        Catch ex As Exception
>            pnStatus.BackColor = System.Drawing.Color.Red
>        End Try
>    End Sub
>
>    Private Sub checkGeneratedXML()
>        Dim dsNew As New dsPreise
>        Dim dsHolder As New dsPreise
>        Dim fstream As FileStream
>        Dim dalForm As New frmPreise
>
>        RunSQL("DELETE * From Tbl_Fl_Rundleitung")
>        RunSQL("DELETE * From Tbl_Flexibel")
>        RunSQL("DELETE * From Tbl_Front_St_Mdl")
>        RunSQL("DELETE * From Tbl_Klm_Block")
>        RunSQL("DELETE * From Tbl_Zubehoer")
>
>        'DAten aus XML einlesen
>        dsNew.Clear()
>        dsNew.ReadXml(Application.StartupPath() + "\products.xml")
> 'XmlReadMode.DiffGram , XmlReadMode.ReadSchema
>
>        dgLoadTEst.DataSource = dsNew
>
>        UpdateTable(dalForm.daadaptFLR, dsNew.Tbl_Fl_Rundleitung)
>        UpdateTable(dalForm.daadaptFlexibel, dsNew.Tbl_Flexibel)
>        UpdateTable(dalForm.daadaptFrontsteckmodul,
> dsNew.Tbl_Front_St_Mdl)
>
>        'initSavedDetailsList()
>
>        'MsgBox("OK")
>        'Return dsNew
>        'End If
>    End Sub
>
>  Private Sub UpdateTable(ByVal daAdapt As Data.OleDb.OleDbDataAdapter,
> ByVal dt As DataTable)
>        Dim ModifiedChildRecords As DataTable = dt
>        For Each ro As DataRow In dt.Rows
>            'MsgBox(ro.RowState)
>        Next
>        Try
>            If Not ModifiedChildRecords Is Nothing Then
>                daAdapt.Update(ModifiedChildRecords)
>                ModifiedChildRecords.Dispose()
>            End If
>        Catch ex As Exception
>            ' Update error, resolve and try again
>            MsgBox("update Tab" + ex.Message + dt.TableName)
>        End Try
>
>    End Sub
>
Author
6 May 2006 9:08 PM
Hans Munich
What you are mssing is the following, and you are right.
But it isnt my Problem, i think. The Problem is that it works completly
with a file located in the same physikal directory as the executing
Application. If my importet .xml File first is copied from another
directory it fails.

    Public Sub RunSQL(ByVal sql As String)
        'SQL Befehl ausführen.
        Dim conn As New OleDbConnection(DBConnectionString)
        Dim adapter As New OleDbDataAdapter
        Try
            conn.Open()
            adapter.InsertCommand = New OleDbCommand(sql, conn)
            adapter.InsertCommand.ExecuteNonQuery()
            conn.Close()
        Catch ex As Exception
            MsgBox(sql + "---" + ex.Message)
        End Try
    End Sub
Author
7 May 2006 4:59 AM
Cor Ligthert [MVP]
Hans,

You write that you read it from the application folder, how you do that from
another one?

     dsNew.ReadXml(Application.StartupPath() + "\products.xml")
'XmlReadMode.DiffGram , XmlReadMode.ReadSchema

Cor

"Hans Munich" <goo***@munixmember.de> schreef in bericht
news:1146949733.718015.302090@j33g2000cwa.googlegroups.com...
What you are mssing is the following, and you are right.
But it isnt my Problem, i think. The Problem is that it works completly
with a file located in the same physikal directory as the executing
Application. If my importet .xml File first is copied from another
directory it fails.

    Public Sub RunSQL(ByVal sql As String)
        'SQL Befehl ausführen.
        Dim conn As New OleDbConnection(DBConnectionString)
        Dim adapter As New OleDbDataAdapter
        Try
            conn.Open()
            adapter.InsertCommand = New OleDbCommand(sql, conn)
            adapter.InsertCommand.ExecuteNonQuery()
            conn.Close()
        Catch ex As Exception
            MsgBox(sql + "---" + ex.Message)
        End Try
    End Sub
Author
7 May 2006 2:01 PM
Hans Munich
With the File Copy Function...

Private Sub btOFD_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btOFD.Click
        Dim ofd As New OpenFileDialog
        ofd.ShowDialog()
        Try
            File.Copy(ofd.FileName, Application.StartupPath() +
"\products.xml", True)
            pnStatus.BackColor = System.Drawing.Color.Green
        Catch ex As Exception
            pnStatus.BackColor = System.Drawing.Color.Red
        End Try
    End Sub

Hans
Author
7 May 2006 3:15 PM
Cor Ligthert [MVP]
Hans,

Are you sure you are not trying with this to copy the file to the area where
the enduser has no rights to do. I would just change the path where you are
reading and not use that application
startuppath.

This is normally the programdirectory Bin of your application, it should be
a closed area.

Just my idea

Cor

Show quoteHide quote
"Hans Munich" <goo***@munixmember.de> schreef in bericht
news:1147010516.560300.13920@g10g2000cwb.googlegroups.com...
> With the File Copy Function...
>
> Private Sub btOFD_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles btOFD.Click
>        Dim ofd As New OpenFileDialog
>        ofd.ShowDialog()
>        Try
>            File.Copy(ofd.FileName, Application.StartupPath() +
> "\products.xml", True)
>            pnStatus.BackColor = System.Drawing.Color.Green
>        Catch ex As Exception
>            pnStatus.BackColor = System.Drawing.Color.Red
>        End Try
>    End Sub
>
> Hans
>