giúp lấy dữ liệu từ SQL trả về Excel

Liên hệ QC

o0khatvong0o

Thành viên mới
Tham gia
17/4/10
Bài viết
26
Được thích
8
Nhờ các thầy chỉ giúp.
Công việc của em thường xuyên phải lấy cơ sở dữ liệu từ SQL rồi phải cop vào Excel để chỉnh sửa tính toán.
em lại chưa biết gì về VB và ADO thành ra công việc mất rất nhiều thời gian do hạn chế về kiến thức.
đành nhờ các thầy chỉ giúp cho. em mới đang bắt đầu tự học về cái này.

File đính kèm em có viết lệnh dùng trong SQL để tra cứu. em cần làm cho File Excel có thể tự lấy dữ liệu trong SQL về và trả về ô A2 trong sheet2 với điều kiện của lệnh tra cứu có thể điều chỉnh được trong Sheel1 và chỉ chạy khi nhấn vào nút bên cạnh.

Vì kiến thức còn hạn chế thành ra tham gia diễn đàn toàn hỏi chứ chưa có giúp trả lời được ai mong mọi người thông cảm và giúp đỡ.

Em cảm ơn rất nhiều.
 

File đính kèm

  • Lay CSDL tu SQL.7z
    118.7 KB · Đọc: 148
  • Lay CSDL tu SQL.rar
    133.3 KB · Đọc: 246
Lần chỉnh sửa cuối:
ADO là công cụ cho người không làm việc với SQL Server mà muốn lấy dữ liệu từ nơi này. Bạn là người sử dụng SQL Server thì dùng các công cụ có sẵn của nó.

Cách nhanh nhất hiện tại là dùng công cụ BCP của SQL Server mà export kết quả câu truy vấn ra csv.
 
Mình cũng đã viết Code dùng ADO lấy dữ liệu từ SQL nhưng lâu rồi không dùng nên chẳng nhớ nữa.
Mình giới thiệu bạn 1 nơi có sử dụng ADO để xây dựng Hàm lấy dữ liệu từ ADO về Excel bạn tham khảo nha

http://www.ezsoft.vn/forum/showthread.php?t=1624
 
ADO là công cụ cho người không làm việc với SQL Server mà muốn lấy dữ liệu từ nơi này. Bạn là người sử dụng SQL Server thì dùng các công cụ có sẵn của nó.

Cách nhanh nhất hiện tại là dùng công cụ BCP của SQL Server mà export kết quả câu truy vấn ra csv.
Cảm ơn bạn.
Thực tế mình vẫn dùng công cụ sẵn có để lấy dữ liệu từ SQL. Tuy nhiên việc thao tác cũng hơi rườm rà.
cũng một phần mình muốn tìm hiểu cách có thể lấy trực tiếp vào Excel vừa để học vừa phục vụ làm các tiện ích cho công việc sẽ tiện lợi hơn rất nhiều.
Tuy vậy cũng rất cảm ơn về lời khuyên của bạn.
 
Mình cũng đã viết Code dùng ADO lấy dữ liệu từ SQL nhưng lâu rồi không dùng nên chẳng nhớ nữa.
Mình giới thiệu bạn 1 nơi có sử dụng ADO để xây dựng Hàm lấy dữ liệu từ ADO về Excel bạn tham khảo nha

http://www.ezsoft.vn/forum/showthread.php?t=1624
Rất hữu ích.
cảm ơn bạn rất nhiều.
Mình đang tham khảo. hi vọng mình có thể hiểu và ứng dụng được.
có kết quả mình sẽ Post lên nhờ mọi người check giùm và cho ý kiến.
xin cảm ơn sự giúp đỡ của mọi người.
 
Cảm ơn bạn.
Thực tế mình vẫn dùng công cụ sẵn có để lấy dữ liệu từ SQL. Tuy nhiên việc thao tác cũng hơi rườm rà.
cũng một phần mình muốn tìm hiểu cách có thể lấy trực tiếp vào Excel vừa để học vừa phục vụ làm các tiện ích cho công việc sẽ tiện lợi hơn rất nhiều.
Tuy vậy cũng rất cảm ơn về lời khuyên của bạn.

Rườm rà là tĩnh từ mang tính chất tương đối.

Từ Excel, dùng ADO để lấy dữ liệu của SQL Server thì phải mở đường kết nối. SQL Server bắt buộc phải thả lỏng bảo mật cho cái ActiveX này. Làm việc trên máy của mình thì còn tạm chấp nhận được. Nhưng nếu SQL Server nằm trên máy mạng thì thằng Database Admin nào cho phép làm như thế là tự rước hoạ vào thân.

Tóm lại, chỉ có Database Admin hoặc Server Admin mới làm công việc này. Nếu trong máy mình thì mình cũng chính là Server Admin.
 
Rườm rà là tĩnh từ mang tính chất tương đối.

Từ Excel, dùng ADO để lấy dữ liệu của SQL Server thì phải mở đường kết nối. SQL Server bắt buộc phải thả lỏng bảo mật cho cái ActiveX này. Làm việc trên máy của mình thì còn tạm chấp nhận được. Nhưng nếu SQL Server nằm trên máy mạng thì thằng Database Admin nào cho phép làm như thế là tự rước hoạ vào thân.

Tóm lại, chỉ có Database Admin hoặc Server Admin mới làm công việc này. Nếu trong máy mình thì mình cũng chính là Server Admin.
SQL Server nằm trong mạng lan nội bộ.
Server này thu thập toàn bộ data sản xuất từ các máy trạm là các máy POP trong mạng lưới.
về vấn đề bảo mật của cái này thì khỏi phải bàn vì tây nó làm bạn à.
hiện tại chỗ mình cũng có công cụ hỗ trợ được viết bằng VBA phục vụ cho việc phân tích và đưa ra báo cáo.
tuy nhiên các File này không được chuyên biệt hoá cho công việc cụ thể.
cái mình muốn là lấy dữ liệu từ đó về để tự mình tạo các bản phân tích.
việc kết nối thì đã có user và pas được cấp rồi mà.
vấn đề là mình chưa biết làm thế nào có thể kết nối được với Database của SQL này thôi mới nhờ mọi người chỉ giúp
cảm ơn ý kiến của bạn.
 
SQL Server nằm trong mạng lan nội bộ.
Server này thu thập toàn bộ data sản xuất từ các máy trạm là các máy POP trong mạng lưới.
về vấn đề bảo mật của cái này thì khỏi phải bàn vì tây nó làm bạn à.
hiện tại chỗ mình cũng có công cụ hỗ trợ được viết bằng VBA phục vụ cho việc phân tích và đưa ra báo cáo.
tuy nhiên các File này không được chuyên biệt hoá cho công việc cụ thể.
cái mình muốn là lấy dữ liệu từ đó về để tự mình tạo các bản phân tích.
việc kết nối thì đã có user và pas được cấp rồi mà.
vấn đề là mình chưa biết làm thế nào có thể kết nối được với Database của SQL này thôi mới nhờ mọi người chỉ giúp
cảm ơn ý kiến của bạn.
Câu lệnh SQL bạn đã có bạn chỉ thiếu ngay chỗ where với điều kiện được tra từ bảng điểu kiện A9:G23? khi bạn nhập vào điều kiện nào thì SQL sẽ theo điều kiện đó? tức là điều kiện luôn thay đổi? Vậy bạn kết hợp câu lệnh SQL của bạn với đoạn code này xem sao chỉ thay đổi chỗ where thôi nhen
[GPECODE=vb]
Sub SQLGPE()
Dim rng As Range
Set rng = Application.InputBox("Chon O dieu kien", , , , , , , 8)
where lot_no = rng.Value And work_ord_no = "%" & rng.Offset(, 1).Value
End Sub


[/GPECODE]
 
Theo như bạn nói thì trình độ T-SQL của bạn cũng có ghnagj. Cách thành lập câu truy vấn thì cũng tương tự như cách thành lập câu SQL động trong SQL Server. Hoàn toàn nằm trong khả năng của bạn.

Trong góc này, đọc xuống cách đây vài ngày, bạn sẽ thấy có một thớt hỏi về đề tài kết nối OLEDB. Bạn chỉ cần đọc trong đó để lấy ý tuởng về cách kết nối.

Trong câu truy vấn, bạn sửa câu
Where work_ord_no like '%31205'

Thành ra
Where work_ord_no like '%<thamSo>'

Sửa định dạng ô A11 thành text. Ghi trọn cả câu truy vấn vào đó - không nên chứa câu truy vấn trong nhiều ô, rắc rối không cần thiết.

Khi cần truy vấn thì click để chọn ô dữ liệu (cột G).

Code:
sqlStr = Replace(Range("$A$11).Value, "<thamSo>", Selection.Value)

tb. Mấy thằng Tây chủ DB dỏm. Nếu mở cho truy vấn - intranet hay internet gì cũng vậy - thì nguời ta chỉ mở view để có thể giới hạn số dữ liệu. Chả ai mở luôn cả bảng cho đọc cả. Vả lại khi cần cung cấp dữ liệu cho thân chủ, stored procedure luôn luôn là cách đảm bảo nhất.
 
Thêm một chút:
Hình như kết nối thẳng qua TCP/IP thì dùng port 1433 và Network Library=DBMSSOCN thì phải.

Đại khái:
".........Provider=sqloledb;Network Library=DBMSSOCN;Data Source=172.17.110.3,1433;Initial Catalogg=Newpop;........."
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom