ReadXML after File Copy

  • Thread starter Thread starter Hans Munich
  • Start date Start date
H

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
 
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
..
 
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
 
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" <[email protected]> schreef in bericht
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
 
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
 
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
 
Back
Top