2013-12-11 173 views
0

在创建我的程序时,我发现为包提供本地数据库将更可靠,而不是连接到每个实例的远程数据库。更新远程访问服务器

下面是我的想法如何做到这一点,但我希望它自动发生每个不同的主机,它发现,而不是选择每个成员,并按下按钮。这是我不知道如何实现的。

Imports System.Data.OleDb 

Public Class Form1  
Dim con as oledbconnection = new oledbconnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='.\localDB.accdb'") 
Dim rem as oledbconnection = new oledbconnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='\\server\remote.accdb'") 
dim da as new oledbdataadaptor 
dim dt as new datatable 
dim dt2 as new datatable 
Dim Str as string 
Dim cmd as new oledbcommand(str, con) 

Private Sub Form1_load 
con.open() 
da.SelectCommand = New OleDbCommand("select distinct Host from Logs") 
da.fill(dt) 
con.close 

Combobox1.datasource = dt 
Combobox1.displaymember = "Host" 

End Sub 

Private Sub button1_click 
con.open() 
Dim cmd As New OleDbCommand("select * from local where [email protected];", con) 
cmd.parameters.addwithvalue("@host", combobox1.text.tostring) 
da.fill(dt2) 
con.close() 

rem.open() 
Dim cmd1 As New OleDbCommand("update remote set [email protected] where [email protected];", con) 

cmd1.parameters.addwithvalue("@col1", dt2.rows(0).item(1).tostring) 
cmd1.parameters.addwithvalue("@ID", dt2.rows(0).item(0).tostring) 
rem.close() 

End Sub 
End Class 

任何想法的将不胜感激。 *作为说明,我知道JET提供了同步功能,但是数据库必须采用2007-10格式,所以ACE是唯一的选择。

+0

我想你会发现这确实起作用。 http://stackoverflow.com/questions/19979758/access-update-with-visual-basic-sql?rq=1如果你想看看这里。 – Tad

+0

我以我会这样做的方式纠正了您的代码。在答案中看到我的更新 – equisde

+0

但您没有阅读或确认这个问题。我要求一种方法(如果有的话)自动更新从日志中提取的每条不同记录。你所做的一切都是用更多的行重写我的代码。 – Tad

回答

0

首先OleDbCommand不接受命名参数,所以您需要引用它们与?并按照它们出现的顺序传递参数。

Dim cmd As New OleDbCommand("select * from local where host = ?", con) 
cmd.parameters.Add(combobox1.Text.ToString) 

一旦这样做,你需要填写DataSet与SQL语句的结果

Dim DA As New OleDbDataAdapter(cmd) 
    Dim DS As New DataSet 
    DA.Fill(DS, "hosts") 

UPDATE

为了有一个等效的代码是你的,我会做这样的事情

Imports System.Data.OleDb 

Public Class Form1 

Dim con as oledbconnection = new oledbconnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='.\localDB.accdb'") 
Dim rem as oledbconnection = new oledbconnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='\\server\remote.accdb'") 

dim dt as New DataTable 
Dim Str as String 
Dim cmd as New OleDbCommand(str, con) 


Private Sub Form1_load 

con.open() 
da.SelectCommand = New OleDbCommand("select distinct Host from Logs") 
da.fill(dt) 
con.close 


For Each DR as DataRow In DT.Rows 

con.open() 
Dim cmd As New OleDbCommand("select * from local where host= ? ", con) 
cmd.Parameters.Add(DR.Item(0)) 
Dim DA As New SqlClient.SqlDataAdapter(cmd) 
Dim DS As New DataSet 
da.Fill(DS,"hosts") 
con.close() 

rem.open() 
Dim cmd As New OleDbCommand("update remote set col1=? where ID=?", rem) 

cmd.Parameters.Add(DS.Tables("hosts").Rows(0).Item(1).ToString) 
cmd.Parameters.Add(DS.Tables("hosts").Rows(0).Item(0).ToString) 
cmd.ExecuteNonQuery() 
rem.close() 

Next 

End Sub 
End Class 
+0

我想你会发现这确实起作用。 http://stackoverflow.com/questions/19979758/access-update-with-visual-basic-sql?rq=1如果你想看看这里。你要求我改变的是如何引用named参数,你也不会删除所需的值。 – Tad

+0

您是否在跳入之前阅读过该问题?*更正了*我的代码? – Tad

+0

您是否在考虑'For Each ... Next'指令? – equisde