我创建了一个应用程序,以允许用户浏览我的数据库中的数据。该代码有效,但是唯一的问题是加载搜索结果花了很多时间。这是由于Access数据库的每个表中都有大约一百万行数据。加载窗口表单还需要一些时间...有人知道如何缩短数据搜索时间吗?
Private Sub MovieBrowser_Load(sender As Object, e As EventArgs) Handles MyBase.Load
conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1MDb.accdb;Persist Security Info=False;")
strSQL = "SELECT m.primaryTitle AS MovieTitle, m.startYear AS StartYear, m.runtimeMinutes AS Runtime, m.genres AS Genre, d.primaryName AS Director, c.writers AS Writer, r.averageRating AS Rating, d.primaryProfession AS Profession, ('www.imdb.com/title/' + m.tconst) AS URL From Movie m, Director d, Crew c, Rating r WHERE m.tconst=c.tconst AND d.nconst = c.directors AND r.tconst=m.tconst"
conn.Open()
da = New OleDbDataAdapter(strSQL, conn)
Dim ds As New DataSet("Movies1")
'fills the dataset with data
da.Fill(ds, "Movies1")
'assign the datasource to the DataGridView
DataGridView1.DataSource = ds.Tables("Movies1")
conn.Close()
txtSrchbar.Focus()
End Sub
答案 0 :(得分:0)
拉整个桌子毫无意义。
银行机器不会加载每个帐户,然后您可以进行搜索。
网络浏览器无法加载整个Internet,然后您可以进行搜索。
一百万行对于Access来说不是很多数据。
简单地在窗体顶部放置一些文本框或类似的框。
让用户输入发票编号或其他条件,然后加载表格。
您不想使用网格进行搜索,而只想显示数据。
因此,假设我们要搜索给定年份的电影。
您可能在顶部有一个名为零件号的文本框。 usr输入部件号,或说电影年份,则您的sql变为:
strSQL = "your sql”
strSQL = strSQL & " AND MovieYear = " & me.txtMyear
' code to fill the grid.
现在,网格将仅加载该年的电影。您可以添加其他搜索框。
确保您搜索的任何列都存在索引。
即使具有100万行,拉出并限制发送到网格的结果也应该非常快。对于这种操作,访问数据引擎非常快。