chỉ giúp mình cách update liên tục data trong excel to sql server (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

yanbi22895

Thành viên mới
Tham gia
25/1/14
Bài viết
5
Được thích
0
-Hiện mình đang có 1 file excel như file đính kèm có 2 cột là output và value (cột A và B) và có 8 hàng (từ B1->B8) và 1 table trong database trên SQL server giống như file excel
-file excel mình luôn ở chế độ running và các giá trị trong cột value thay đổi liên tục vì vậy khi giá trị cột value thay đổi mình muốn data trên sql cũng thay đổi theo nhưng chưa bik làm thế nào mong các bạn viết dùm mình 1 macro để mình có thể update liên tục data trên sql server với :D
-Hiện mình đang dùng excel 2003
Thân và cảm ơn các bạn :D
 

File đính kèm

Lần chỉnh sửa cuối:
Cách giải quyết như sau:
1. Tạo timer để nó tự chạy ngầm lệnh sau một khoảng thời gian
Bạn tìm các bài viết liên quan đến Application.OnTimer hoặc hàm API setTimer, dùng API là tốt nhất
2. Viết thủ tục update dữ liệu lên server. Lưu ý chỉ thực hiện với những dòng dữ liệu thay đổi mà thôi.
 
Upvote 0
Cách giải quyết như sau:
1. Tạo timer để nó tự chạy ngầm lệnh sau một khoảng thời gian
Bạn tìm các bài viết liên quan đến Application.OnTimer hoặc hàm API setTimer, dùng API là tốt nhất
2. Viết thủ tục update dữ liệu lên server. Lưu ý chỉ thực hiện với những dòng dữ liệu thay đổi mà thôi.
-Mình hiện đang dùng delphi để lập trình phần mềm nên chỉ mới bik đến VBA trong excel thôi nên cũng chưa bik cách viết macro về phần kết nối với SQL server :( bạn viết giúp mình macro này với :D tks bạn
 
Lần chỉnh sửa cuối:
Upvote 0
-Mình hiện đang dùng delphi để lập trình phần mềm nên chỉ mới bik đến VBA trong excel thôi nên cũng chưa bik cách viết macro về phần kết nối với SQL server :( bạn viết giúp mình macro này với :D tks bạn

Kết nối trong VBA là dùng ConnectionString. Vậy bạn biết Delphi thì cứ đưa code Delphi lên tôi sẽ đưa về VBA cho bạn và hơn chút nữa để chạy được.
 
Upvote 0
-Mình hiện đang dùng delphi để lập trình phần mềm nên chỉ mới bik đến VBA trong excel thôi nên cũng chưa bik cách viết macro về phần kết nối với SQL server :( bạn viết giúp mình macro này với :D tks bạn
Mã:
Public cnPubs As ADODB.Connection
Public rsPubs As ADODB.Recordset
Const connstr = "Provider=SQLOLEDB;Initial Catalog=[COLOR=#ff0000]TenfiledatabasetrongSQLserver[/COLOR];User ID=[COLOR=#ff0000]IDdangnhapSQLserver[/COLOR];Password=[COLOR=#ff0000]Passdangnhap[/COLOR]"    

Private Sub Workbook_Open()
    Set cnPubs = New ADODB.Connection
    Set rsPubs = New ADODB.Recordset
    ThisWorkbook.cnPubs.Open connstr
    MsgBox "da ket noi sever"
End Sub
code trên cho vào thisworkbook : mục đích mở file lên là kết nối với sqlserver trên máy của bạn
Mã:
Sub updateData()
    dim arr
    arr= sheet1.range("A2:B8")
    For i = 1 To ubound(arr)
        chedo = arr(i, 1)
        value = arr(i,2)
        lenh = "update [COLOR=#ff0000]TenbangtrongSQLserver[/COLOR] set [COLOR=#ff0000]Tentruongtuongung2[/COLOR]=" & value  Where [COLOR=#ff0000]Tentruongtuongung1[/COLOR] =" & chedo
        With ThisWorkbook.rsPubs
            .ActiveConnection = ThisWorkbook.cnPubs
            .Open lenh
        End With
    Next
End Sub
code trên cho vào modul
Tiếp tục bạn viết code cho sự kiện change "hay dùng ONTIME như anh TUAN "nếu có sự thay đổi trong cột value của ban trên exxel thì chạy thủ lục updateData
vì không có điều kiện thử code nên không biết sao nữa!
CÁC CHỖ MÀU ĐỎ BẠN TÙY BIẾN THEO CSDL CỦA BẠN
 
Lần chỉnh sửa cuối:
Upvote 0
File của Office/Excel có khả năng bảo mật kém. Muốn code Excel update được Db của SQL Server thì phải mở giới hạn, cho phép code này nhiều quyền hạn mà bình thường người quản lý Db rất ít khi cho. Kết nối OLEDB thì phải nhét Password vào chuỗi kết nối.

Nếu không encode chuỗi kết nối thì Db chỉ chờ ngày nát bung!

Bạn nào muốn theo cách này thì nên vào SQL Server, giới hạn cái UserID kết nối này:
- Chỉ cho phép update bảng này, và chỉ bảng này mà thôi.
- Che tất cả các thứ còn lại, không cho truy vấn bất cứ cái gì khác.
- Lưu ý là câu lệnh truy vấn thực hiện bằng cách ghép chuỗi sẽ dễ bị SQL injection (gú gồ từ khoá này thử xem). Bình thường, để update bảng trên SQL Server, người ta dùng Stored Procedure.

Tôi chi nhắc cho những bạn nhìn thấy code hay, muốn theo. Còn chủ thớt là dân chuyên nghiệp code Delphi rồi, tự động biết bảo mật CSDL.
 
Upvote 0
File của Office/Excel có khả năng bảo mật kém. Muốn code Excel update được Db của SQL Server thì phải mở giới hạn, cho phép code này nhiều quyền hạn mà bình thường người quản lý Db rất ít khi cho. Kết nối OLEDB thì phải nhét Password vào chuỗi kết nối.

Nếu không encode chuỗi kết nối thì Db chỉ chờ ngày nát bung!

Bạn nào muốn theo cách này thì nên vào SQL Server, giới hạn cái UserID kết nối này:
- Chỉ cho phép update bảng này, và chỉ bảng này mà thôi.
- Che tất cả các thứ còn lại, không cho truy vấn bất cứ cái gì khác.
- Lưu ý là câu lệnh truy vấn thực hiện bằng cách ghép chuỗi sẽ dễ bị SQL injection (gú gồ từ khoá này thử xem). Bình thường, để update bảng trên SQL Server, người ta dùng Stored Procedure.

Tôi chi nhắc cho những bạn nhìn thấy code hay, muốn theo. Còn chủ thớt là dân chuyên nghiệp code Delphi rồi, tự động biết bảo mật CSDL.

tks bác đã góp ý :D em cũng chỉ là mới bik làm sơ sơ delphi thôi bác :D
 
Upvote 0
@maytinhvp01 : bạn cho mình xin yahoo or facebook để có j` mình ko hiểu chỗ nào trao đổi cho tiện nha bạn :D tks bạn nhiều
 
Upvote 0
Kết nối trong VBA là dùng ConnectionString. Vậy bạn biết Delphi thì cứ đưa code Delphi lên tôi sẽ đưa về VBA cho bạn và hơn chút nữa để chạy được.

-mình kết nối được connectionstring với file excel trong delphi thông qua ADOtable và xuất ra = DBgrid rồi nhưng bị 1 cái là khi mình chạy chương trình thì ko thể mở file excel lên đc ( mà file excel mình phải mở 24/24--vì yêu cầu kết nối của thiết bị ngoài :( )...còn khi mình mở file excel trước rồi chạy phần mềm thì phần mềm ko đọc đc file excel đang mở :(( hic hic
-mình cũng chỉ mới tập tành delphi thôi :D ... hiện h mình thấy có 2 hướng để update data là code query trên SQL ( cách này hạn chế là khi chuyển phần mềm qua máy tính khác là phải bỏ vào đúng địa chỉ như máy lập trình :( ) và viết code VBA trong file excel để file excel update = macro sẽ khắc phục đc vấn đề trên :D
-Có chỗ nào mình sai mong mọi người góp ý thêm :D
-Mình đang tìm hiểu và viết phần mềm cho kịp để đầu tháng 3 báo cáo và bảo vệ mong mọi người giúp đỡ mình với :D trc' h dùng delphi nên qua VBA là 1 ngôn ngữ mới nên còn gặp nhiều khó khăn :(
Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Làm như thế này thì bất cứ người nào biết code VBA là có thể capture cái file này, copy password và phá nát cái Db.

Mặt khác hầu hết các kỹ thuật dùng API để đọc file Excel đang mở đều có thể bị vướng tình trạng chảy bộ nhớ (memory leak).

Khi cần update csdl từ các nguồn kết nối qua giao diện thiết bị, cách an toàn hơn là dùng batch process. Giao diện thiết bị ghi dữ liệu vào một batch file. Phần mềm nào đó chạy ở background, đọc batch file và update csdl.
 
Upvote 0
Nếu bạn đã biết Delphi thì tôi khuyên nên dùng Delphi chứ không dùng VBA vì bảo mật tốt hơn. Trong Delphi có component TExcelWorkbook để làm việc với file Excel. Lưu ý là Open file Excel trước rồi mới dùng ADO kết nối.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom