SQL với hàm nội tại.

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Mình đọc rất nhiều tài liệu nói tới SQL với hàm nội tại, VD:
SELECT SUM(so_tien) FROM DATA WHERE ma="Hanoi"
Nhưng chưa biết cách sử dụng như thế nào ? Giả sử mình muốn lấy kết quả đưa vào ô textbox có tên là sum_tien thì lệnh gán ra sao? Các bạn hướng dẫn mình với.
Many thanks.

Xin lỗi cho mình hỏi mình gửi bài đã hợp lệ chưa, có vấn đề gì mình rút kinh nghiệm cho các lần sau, chứ mỗi làm vào xem có ai giúp không thì không thấy bài của mình đâu cả. Như vậy thì ai biết mà giúp được. Mong BQT diễn đàn thông cảm.
 
Mình đọc rất nhiều tài liệu nói tới SQL với hàm nội tại, VD:
SELECT SUM(so_tien) FROM DATA WHERE ma="Hanoi"
Nhưng chưa biết cách sử dụng như thế nào ? Giả sử mình muốn lấy kết quả đưa vào ô textbox có tên là sum_tien thì lệnh gán ra sao? Các bạn hướng dẫn mình với.
Many thanks.

Bạn xem ví dụ này nhé!

Mã:
    Dim oConn As New ADODB.Connection
    Dim oRS As New ADODB.Recordset

.....

Set oRS = oConn.Execute("SELECT SUM(so_tien) FROM DATA WHERE ma='Hanoi' ")

sum_tien = ors.Fields(0).Value
 
Upvote 0
Bạn xem ví dụ này nhé!

Mã:
    Dim oConn As New ADODB.Connection
    Dim oRS As New ADODB.Recordset

.....

Set oRS = oConn.Execute("SELECT SUM(so_tien) FROM DATA WHERE ma='Hanoi' ")

sum_tien = ors.Fields(0).Value
Nếu mình dùng trong excel thì sao nhỉ. bởi lúc này table va field sẽ la thế nào?
 
Upvote 0
Mình đã làm SQL trong Excel để trích dữ liệu cũng rất hay. Để hiểu bạn thử Record Macro rồi nghiên cứu VBA viết câu lệnh cho bạn. Trình tự như sau: Menu Data-->Import External Data-->New Database Query-->Theo hướng dẫn là có thể trích từ tệp mình đang làm hay bất cứ tệp nào khác (Nhưng SQL với hàm nội tại thì mình chưa làm đwợc), Sau đó sửa đôi chút trong Macro để nhận thông số và gọn gàng lại . Nói thật, mình đang tìm hiểu để áp dụng vào quản lý kế toán. Bạn biết đấy, khi làm thử dữ liệu ít thì ngon lành lắm, nhưng với dữ liệu 1 năm thì Excel không còn bình thường nữa thậm chí còn bị treo đơ nữa. Vậy mình chia các tệp Kế toán bằng Exc thành nhiều phần và dùng SQL để rút dữ liệu:
-Tệp phát sinh
-Tệp báo cáo
-Tệp sổ sách
-Tệp quản trị
-Tệp main (chỉ có 1 sheet để kết nối các tệp)
Khi chạy chỉ mở 1 tệp main dung lượng rất nhỏ và 1 tệp cần làm việc. Như vậy sẽ giải quyết được khâu tốc độ và tính toán trong Excel.

Rất mong được sự tham vấn của các bạn
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu mình dùng trong excel thì sao nhỉ. bởi lúc này table va field sẽ la thế nào?

Dùng SQL trong Excel có 3 cách là:

1) Vào menu Data-->Import External Data-->New Database Query.... Theo cách này thì chỉ là trích lọc ra bảng giá trị theo ngôn ngữ SQL cơ bản.

2) Viết VBA (các bạn hay gọi là Macro đó). Có thể dùng đối tượng ADODB để làm việc với SQL.

3) Nếu không muốn lập trình (không dùng VBA), sử dụng các hàm gọi SQL trực tiếp trên bảng tính thì dùng A-Tools. A-Tools làm việc với ngôn ngữ SQL, cung cấp các hàm hỗ trợ để trích lọc, thống kê,....cho phép tạo ra sổ/báo cáo động.

BS_SQL_Demo.gif


Tham khảo thêm tại đây:
http://www.bluesofts.net/Products/AddIns/A-Tools/Index.htm
 
Upvote 0
Cám ơn TuanVNUNI, thực sự A-tools là rất hay và nhanh. Nó tránh việc phải gắn kết dữ liệu sheet nguồn và sheet báo cáo bằng công thức nên chương trình nhẹ đi nhiều. Câu lệnh trong A-tool thân thiện hơn, nhưng khi mở fíle ở máy không có A-tool thì kg được.
Bạn chỉ mình cách lấy kết quả của SQL với hàm nội tại trong Excel với, mình mày mò mãi không được. Nếu được nó có thể thay thế cái hàm mảng SUMPRODUCT vốn chậm và nặng trong Excel. Vì ở với Excel thì phải tìm mọi cách "sống chung với lũ" thôi.
Mình nêu cách ghi Macro trong bài để Manhhung12 tham hkảo câu lênh liên quan SQL. Còn liên kết thì khai báo như bạn hướng dẫn dùng ADODB là hay nhất, nó không tạo thêm file liên kết nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không hiểu ý của bạn lắm về "Hàm nội tại" ?

Hiện Excel không cung cấp các hàm làm việc với SQL, chỉ có thể cài thêm Add-In mà thôi. Ta có thể dùng VBA để viết ra.

+Nếu hàm trả về kết quả cho một ô thì có thể dùng hàm (Function)

Mã:
'On Worksheet, formula is
'=GetBySQL("SELECT SUM(so_tien) FROM DATA WHERE ma='Hanoi' ")
Function GetBySQL(ByVal SQLText As String) As Double
    Dim oConn As New ADODB.Connection
    Dim oRS As ADODB.Recordset
    .....
    Set oRS = oConn.Execute(SQLText)
    .....
    GetBySQL = oRS.Fields(0).Value
    
    .....
End Function

+ Nếu kết quả trả về một bảng (mảng giá trị) thì dùng thủ tục (Sub).
Mã:
Sub DoFillRangeBySQL(ByVal CellResult As Range, ByVal SQLText As String)
    Dim oConn As New ADODB.Connection
    Dim oRS As ADODB.Recordset
    
    .....
    Set oRS = oConn.Execute(SQLText)
    .....
    CellResult.CopyFromRecordset oRS
    .....
End Sub
'-------------------------------------------------
Sub DoReport1()
    DoFillRangeBySQL Range("A1"), "SELECT * FROM NKC WHERE DVKH = 'KH001' "
End Sub

Những hàm chuẩn có thể sử dụng trong khai báo SQL

+ Hàm thống kê: SUM, COUNT, AVG/AVERAGE, MIN, MAX
+ Hàm chuỗi: LCASE/LOWER, UCASE/UPPER, LEFT, RIGHT, MID, LEN, ...
+ Hàm logic: IIF (cách làm việc giống hàm IF của Excel, hàm này không dùng với CSDL SQL Server, thay thế là CASE..WHEN...),...
+...
 
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi bạn mình dùng theo cách gọi trong 1 số sách về VBA (Bạn thông cảm vì mình chưa được học 1 lớp nào về tin học cả mà chỉ học hỏi qua sách báo thôi) Hàm nội tại là hàm sẵn có của VB hay VBA ví dụ: SUM, COUNT, MAX...
Ờ nhỉ, viết 1 hàm đưa câu lệnh vào đó hàm trả về kết quả. Mình về làm lại xem sao, nếu được nó ngang với hàm DSum, DCount trong MS Access cho phép ta sử dụng nhiều điều kiện.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu cần làm 1 cái gì đó trong Exel mà hiệu quả như Access thay thế cho sumproduct tức là đang nói tới Query. Bạn hãy tham khảo bài viết của mình về Database Query lấy từ Data - Import External Data - New Query xem có dùng được không. Các bài đó ở đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=7358
 
Upvote 0
Mình đã làm SQL trong Excel để trích dữ liệu cũng rất hay. Để hiểu bạn thử Record Macro rồi nghiên cứu VBA viết câu lệnh cho bạn. Trình tự như sau: Menu Data-->Import External Data-->New Database Query-->Theo hướng dẫn là có thể trích từ tệp mình đang làm hay bất cứ tệp nào khác (Nhưng SQL với hàm nội tại thì mình chưa làm đwợc), Sau đó sửa đôi chút trong Macro để nhận thông số và gọn gàng lại . Nói thật, mình đang tìm hiểu để áp dụng vào quản lý kế toán. Bạn biết đấy, khi làm thử dữ liệu ít thì ngon lành lắm, nhưng với dữ liệu 1 năm thì Excel không còn bình thường nữa thậm chí còn bị treo đơ nữa. Vậy mình chia các tệp Kế toán bằng Exc thành nhiều phần và dùng SQL để rút dữ liệu:
-Tệp phát sinh
-Tệp báo cáo
-Tệp sổ sách
-Tệp quản trị
-Tệp main (chỉ có 1 sheet để kết nối các tệp)
Khi chạy chỉ mở 1 tệp main dung lượng rất nhỏ và 1 tệp cần làm việc. Như vậy sẽ giải quyết được khâu tốc độ và tính toán trong Excel.

Rất mong được sự tham vấn của các bạn
Mình nghĩ nếu dùng sql trong excel được thi tuyệt vời cho việc trích lọc và tìm kiếm ->tốc độ sẽ được cải thiện hơn rất nhiều so với khi dùng vòng lặp.
Mình sẽ thử dùng.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình nghĩ nếu dùng sql trong excel được thi tuyệt vời cho việc trích lọc và tìm kiếm ->tốc độ sẽ được cải thiện hơn rất nhiều so với khi dùng vòng lặp.
Mình sẽ thử dùng.
Tôi thấy dùng Advance Filter hay Pivot cũng trích lọc tốt chớ bộ. Tạo 1 macro cho vấn đề này. Nó chạy cũng nhanh lắm.
 
Upvote 0
Tôi thấy dùng Advance Filter hay Pivot cũng trích lọc tốt chớ bộ. Tạo 1 macro cho vấn đề này. Nó chạy cũng nhanh lắm.

Anh ơi, Advance Filter và Pivot ...trong Excel chỉ trích lọc dữ liệu trên một table thôi, nó không trích lọc và gộp nhóm được (Subtotal là dạng khác).

Trong quan hệ CSDL thì dữ liệu từ một table này móc nối với table kia và khi cần người ta sẽ truy vấn chúng thành một table với các điều kiện linh động, có thể sử dụng các hàm thống kê SUM, COUNT,...để gộp nhóm lại. Để làm việc này thì hiện nay chỉ có giải pháp SQL là tốt nhất.
 
Upvote 0
Web KT

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

Back
Top Bottom