Có nhất thiết phải đóng kết nối ADO.connect trong sub???

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Cho mình hỏi là với code sau:
Mã:
Private Sub Form_Load()
  Dim cn As Object
  Dim rs As Object
  Dim tt As String
  Set cn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")
  cn.Provider = "Microsoft.ACE.OLEDB.12.0"
  cn.ConnectionString = "Data Source= " & App.Path & "/KH.xlsm; Extended Properties=""Excel 12.0;HDR=Yes;"";"
  cn.CursorLocation = 3
  cn.Open
  rs.Open "SELECT * FROM [DM$] WHERE Nh_sx is not null", cn, 3, 1
  Set DataGrid1.DataSource = rs
 
End Sub
Kết thúc sub rồi mà không đóng kết nối thì có ảnh hưởng tới lần kết nối khác không ( cùng tới 1 file.
Mã:
cnn.Close
các sự kiện gần như kết nối tới file excel là liên tục.
 
Mình không rành lắm về loại này; Nhưng theo mình hễ là biến đối tượng mà không tiếp tục xài nữa ta nên đóng nó lại

Tiết kiệm là quốc sách!
 
Upvote 0
Cho mình hỏi là với code sau:
Mã:
Private Sub Form_Load()
  Dim cn As Object
  Dim rs As Object
  Dim tt As String
  Set cn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")
  cn.Provider = "Microsoft.ACE.OLEDB.12.0"
  cn.ConnectionString = "Data Source= " & App.Path & "/KH.xlsm; Extended Properties=""Excel 12.0;HDR=Yes;"";"
  cn.CursorLocation = 3
  cn.Open
  rs.Open "SELECT * FROM [DM$] WHERE Nh_sx is not null", cn, 3, 1
  Set DataGrid1.DataSource = rs
 
End Sub
Kết thúc sub rồi mà không đóng kết nối thì có ảnh hưởng tới lần kết nối khác không ( cùng tới 1 file.
Mã:
cnn.Close
các sự kiện gần như kết nối tới file excel là liên tục.

Bạn mở kết nối khi mở form, nếu trường hợp thao tác trên form, truy vấn nhiều bảng khác nhau ở cùng 1 database thì không cần phải đóng vội vì nếu mỗi lần truy vấn thì phải kết nối lại thì tốc độ sẽ chậm đấy. Do vậy trong trường hợp tôi đề cập là nên đóng khi thoát form.
 
Upvote 0
Cho mình hỏi là với code sau:
Mã:
Private Sub Form_Load()
  Dim cn As Object
  Dim rs As Object
  Dim tt As String
  Set cn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")
  cn.Provider = "Microsoft.ACE.OLEDB.12.0"
  cn.ConnectionString = "Data Source= " & App.Path & "/KH.xlsm; Extended Properties=""Excel 12.0;HDR=Yes;"";"
  cn.CursorLocation = 3
  cn.Open
  rs.Open "SELECT * FROM [DM$] WHERE Nh_sx is not null", cn, 3, 1
  Set DataGrid1.DataSource = rs
 
End Sub
Kết thúc sub rồi mà không đóng kết nối thì có ảnh hưởng tới lần kết nối khác không ( cùng tới 1 file.
Mã:
cnn.Close
các sự kiện gần như kết nối tới file excel là liên tục.

Khi xong xuôi hết mọi thứ --> tức là đã tới kết quả cuối cùng --> bạn nên giải phóng và đóng kết nối connection !
tô ví dụ như thế này !
bạn kết nối bằng ADODB.connection tới file abc.xlsx --> :
* Trong code của bạn không có câu lệnh cnn.close--> bằng cách thông thường là click chuột phải và file abc.xlsx --> thì bạn sẽ không thể delete hay rename file abc.xlsx
 
Upvote 0
Bạn mở kết nối khi mở form, nếu trường hợp thao tác trên form, truy vấn nhiều bảng khác nhau ở cùng 1 database thì không cần phải đóng vội vì nếu mỗi lần truy vấn thì phải kết nối lại thì tốc độ sẽ chậm đấy. Do vậy trong trường hợp tôi đề cập là nên đóng khi thoát form.
Mình đang viết ứng dụng trên VB6 lấy excel làm database.
Đọc bài của bạn mình hiểu thế này: Trên ứng dụng của mình có nhiều form, form nào mà có thao tác cần kết nối database thì cho nó kết nối luôn khi mở form và đóng kết nối khi thoát form phải không bạn?. Hơn nữa là các biến "cn", "rs" phải khai báo ở đầu dòng code trong code form để dùng chung cho các sub trong form. Khi thoát sẽ đóng kết nối và giải phóng biến. Mình hiểu thế có đúng không vây?

Mình không rành lắm về loại này; Nhưng theo mình hễ là biến đối tượng mà không tiếp tục xài nữa ta nên đóng nó lại

Tiết kiệm là quốc sách!
Với bài của bạn thì mình lại thảo luận thế này:
Theo mình nghĩ thì các biến "connection" trong code mình đưa lên là nằm trong 1 sub tuy mình không đóng kết nối nhưng kết thúc form mình nghĩ là các biến tự giải phóng nghĩa là kết nối cũng đã đươch đóng rồi phải không bạn?
Nhưng có bài của bạn HAI LUA MIEN TAY #3 thì rất hữu ích : trong một form có thể việc kết nối là lặp lại liên tục trong quá trình thao tác nên ta nên làm theo HAI LUA là mở khi chạy form và đóng khi thaot form ( mình bổ xung them là các biến connection khai báo ở đầu code form để dùng chung cho tất cả các sub trong form cần kết nối )BẠN CHO Ý KIẾN!!!

Hungpecc1 :Khi xong xuôi hết mọi thứ --> tức là đã tới kết quả cuối cùng --> bạn nên giải phóng và đóng kết nối connection !
tô ví dụ như thế này !
bạn kết nối bằng ADODB.connection tới file abc.xlsx --> :
* Trong code của bạn không có câu lệnh cnn.close--> bằng cách thông thường là click chuột phải và file abc.xlsx --> thì bạn sẽ không thể delete hay rename file abc.xlsx
Mình kết nối trong một sub, khi kết thúc sub các kết nối cũng không đóng lại hả bạn? ( mình nghĩ là đóng lại rồi chứ vì các biến trong sub tự giải phóng khi kết thúc sub mà) không biết mình hiểu thế có đúng không?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Với bài của bạn thì mình lại thảo luận thế này:
Theo mình nghĩ thì các biến "connection" trong code mình đưa lên là nằm trong 1 sub tuy mình không đóng kết nối nhưng kết thúc form mình nghĩ là các biến tự giải phóng nghĩa là kết nối cũng đã đươch đóng rồi phải không bạn?
Nhưng có bài của bạn HAI LUA MIEN TAY #3 thì rất hữu ích : trong một form có thể việc kết nối là lặp lại liên tục trong quá trình thao tác nên ta nên làm theo HAI LUA là mở khi chạy form và đóng khi thaot form ( mình bổ xung them là các biến connection khai báo ở đầu code form để dùng chung cho tất cả các sub trong form cần kết nối )BẠN CHO Ý KIẾN!!!
Nếu làm việc với nhiều form, nhiều bảng trong cùng 1 csdl thì người ta tạo 1 form cha để chứa form con, tạo biến dạng public và kết nối ngoài module, khi mở form cha sẽ tạo kết nối đến csdl, vậy sau này mở các form con sẽ không cần kết nối. Khi thoát form cha thì đóng kết nối.
 
Upvote 0
Web KT
Back
Top Bottom