台灣最大程式設計社群網站
線上人數
1397
 
會員總數:242767
討論主題:187734
歡迎您免費加入會員
討論區列表 >> VB.NET >> VB.NET+MySQL不使用DataGridView抓資料
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
VB.NET+MySQL不使用DataGridView抓資料
價值 : 50 QP  點閱數:601 回應數:16

樓主

培根
門外漢
0 30
515 90
發送站內信

各位高手們! 請教一個問題
一直以來我都是用連上MYSQL後在給DataGridView資料的方式
把我要的資料放在Textbox
有沒有方法可以連上MYSQL之後 找到我要的一筆資料 再給Textbox呢?

搜尋相關Tags的文章: [ VB.NET+MySQL不使用DataGridView抓資料 ] ,
本篇文章發表於2018-01-09 16:52
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
您的題目可以多寫一下敍述嗎? ,題目比答案難很多。

您在給 datagridview 前的資料結構是什麼? 如何下指令的

方法很多
1.指令由 Select * from table1 where AAA='bbb' 條件 子句 即可取得您要的資料了。

2.在取得的 datatable 用 dt1.select (條件) 某筆資料 ROW 再將某欄資料 放到 TEXTBOX1 就可以了

本篇文章回覆於2018-01-09 21:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

培根
檢舉此回應
真抱歉 我敘述不清楚
我平常都是用 這樣的方式來取得資料 以下


我目前所遇到的困難是,當資料庫"行"非常多時100左右,在讀取跟新增資料的時候就變慢了
一剛開始讀取慢一點,還不影響,可是新增資料跟更新資料後,我都會在執行一次Load2()的動作,所以整體感覺很慢

我想說在多建一個資料庫來解決這問題
textt2分50資料,textt2用DataGridView顯示
例:ID text1 text2 text3 .......text49
textt3分50資料,textt3則不用
例:ID2 text50 text51 text52 .....text100
而ID=ID2
而我又不想再多使用一個DataGridView,因為整體會變得很大感覺很佔空間
而我的想法是 利用ID2找到textt3的資料
給Public i(50) As String
MySQK找到資料給i(50)
再分給Textbox(i)

而我目前就卡在textt3的部分
不知道我的想法可不可行,實不實用,能不能解決變慢的問題??

本篇文章回覆於2018-01-09 22:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

小魚
檢舉此回應
你有試圖去發現,
最花時間的步驟在哪裡嗎?
我覺得花時間的地方應該不是在抓資料的地方,
才100筆資料而已...
本篇文章回覆於2018-01-10 12:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

培根
檢舉此回應
我重複試了好幾次
我在想因該是
adpt.Fill(ds, "Emp")
DataGridView1.DataSource = ds.Tables(0)
這兩段 我猜
我忘記在哪個文章看到
它說adpt.Fill(ds, "Emp") 沒記錯似乎是記憶體位子,我有把"Emp"刪掉過
置於DataGridView1.DataSource = ds.Tables(0)我把它拿掉後,載入form的速度明顯有變快
所以我在想因該是它的問題
本篇文章回覆於2018-01-10 12:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

培根
檢舉此回應
我找了很多網頁
https://stackoverflow.com/questions/14475918/vb-net-load-data-from-a-mysql-database-into-a-datagridview-control
https://www.youtube.com/watch?v=AOLb-nfYdIw
https://www.youtube.com/watch?v=BxjY1kIPy_4
https://www.youtube.com/watch?v=AOLb-nfYdIw
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/06f366fd-67b6-4cf6-9f0e-f6bb0d540735/vbnet-print-datagridviewconnected-to-mysql-database?forum=vbgeneral
很還有其它的
我每個網頁都有測試過 感覺速度都差不多
本篇文章回覆於2018-01-10 14:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

培根
檢舉此回應
目前我已經最簡話我的程式碼

但還是沒有找到 讀取變快的方法
我修正一下 我的資料庫目前有218行
本篇文章回覆於2018-01-10 14:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

P陳
檢舉此回應
DataGridView1.DataSource = table <----- 這句有可能會出問題
如果有設 AutoSizeColumn =allcells 的話會變很慢 設為 NONE 試一下吧
autosize 共有2句

本篇文章回覆於2018-01-10 21:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

P陳
檢舉此回應
最近我查了約 3000 多筆,要等約2分鐘才會顯示出來
改成 NONE 後,是立即顯示的

您的例子不經 datagridview 當然可以
本篇文章回覆於2018-01-10 21:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

培根
檢舉此回應
陳P所說的是datagridview 裡面的屬性吧?
AutoSizeColumnsMode跟AutoSizeRowsMode嗎?
他們的預設值是NONE
如果是DataGridView1.DataSource = table 有問題
我要怎麼改比較好?有沒有一個方向可以參考
因為我GOOGLE跟YOUTUBE了很多都是那樣寫
本篇文章回覆於2018-01-10 21:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

Ader Chen
檢舉此回應
如果要用 DataGridView 顯示大量資料的話, 可以使用虛擬模式, 效能較好.
"虛擬模式被專供非常大型的存放區的資料" https://msdn.microsoft.com/zh-tw/library/system.windows.forms.datagridview.virtualmode(v=vs.110).aspx
不過需要多寫一些程式, 尤其是要增/刪/改資料的話.
而您的資料量不過才兩三百筆, 又不是兩三萬筆, 沒必要用虛擬模式,
所以上面僅供參考.

只有兩三百筆卻很慢, 猜測可能是資料欄太多(?)
若是, 建議不要 SELECT * FROM `20177` 傳回所有欄位, 盡量只專注必要欄位,
例如 SELECT 欄位1, 欄位2 FROM `20177`
參考看看.
本篇文章回覆於2018-01-10 23:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
最有價值解答

Ader Chen
檢舉此回應
另外, 參考:
MySQL 性能優化的最佳20多條經驗分享:
https://read01.com/7Oy8e4.html#.WlYya6iWZkg

或許您需要考慮其中的第 16. 垂直分割.

本篇文章回覆於2018-01-10 23:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

培根
檢舉此回應
多謝Ader Chen
裡面的觀念,值得我去思考,不過要按照他的觀念下去寫程式的話,我想我的程式可能要大改
他跟您一樣 少用* ,而我用*的主要原因是因為我可以把我要的東西先存到全域變數,就可以很方便地給其他form
如果不用*,我開啟其他form就要在抓一次MySQL的資料,我想因該會比較快,在程式方面我可以就要再思考了
而第16點的垂直分割.示例二
因為每次更新一定都會清空緩存,所我我的想法沒錯的話他因該是使用2個DataGridView,如果我沒想錯的話
我看目前我最主要的是少用*,而我程式要大改了!
但是陳P說的 DataGridView1.DataSource = table可能出問題
我知道那可能是我變慢的主因之一
但是還有甚麼其他寫法嗎??
我到現在還是不太懂呢
本篇文章回覆於2018-01-11 13:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

P陳
檢舉此回應
DataGridView1.DataSource = Dt1
這個會可能變慢的前題
是 autosize 有設成 Allcells 但您是設成 none 的
再來就是 欄位真的太多了,這也不太可能,再來原因就可能猜不到了
本篇文章回覆於2018-01-11 21:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

培根
檢舉此回應
恩恩~ 我了解了
謝謝您
本篇文章回覆於2018-01-12 01:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

Ader Chen
檢舉此回應

您可以先測試看看, 若只 SELECT 10 個欄位時, 會不會比 SELECT * 快很多, 以疑清原因.
假如真的差很多的話再繼續下面建議,
考慮正規化, 將超多欄位的資料表拆分為多個專屬資料表,
例如 Form1 只處理 Table1 的資料、Form2 只處理 Table2 的資料,
開啟 Form1 時不需要讀取所有的資料(原先的 Table1+2),
Table2 只在有需要時(開啟 Form2 時) 才讀取.
假如怕 Table2 關閉/開啟太頻繁, 不想每次都連線撈資料,
可以把第一次撈的資料存入 DataTable 全域變數,
開啟 Form 時判斷是要重連線撈資料或是取用已有資料的 DataTable.
以上供參考, 實際還是需視您的專案評估測試.

本篇文章回覆於2018-01-12 09:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.