PROGRAMMING WORKSHOP

Skip Navigation Links. Skip Navigation Links.

COMAddIns | VSTO - UserForm Control의 활용_2

앞페이지에서 DB를 읽어서 만든 UserForm 콘트롤을 크릭하면
해당버튼에 관련된 DB작업을 해 보도록 하자
우선 어떤 정보를 갖여 올지 SQL문을 작성하는 것이 중요할 것이다
아래의 그림과같이 갖고 오고 싶은 정보를 억세스의 쿼리디자인창에서
마우스로 끌어서 만든후 결과를 확인하고 자동작성된 SQL문을 복사하여
갖여다 사용하면 된다
몇가지 요령만 알면 되는데..조금 딜다보기 귀찮아서 중요한 것을 모르고 산다



직원이름을 조건으로 하여 제품분류별 판매회수와 판매액 두개의 정보를
갖여 오도록 한 디자인이다, 얻어온 SQL문은 아래와 같다

SELECT Categories.CategoryName, Sum([order details].[unitprice]*[quantity]*(1-[discount])) AS total,
 Count(Orders.OrderID) AS [number]
FROM (Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID) 
INNER JOIN ((Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID) 
INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID) 
ON Products.ProductID = [Order Details].ProductID
WHERE (((Employees.FirstName)="kim so mi"))
GROUP BY Categories.CategoryName;

무지하게 복잡해 보이는데 따지면 별로 어려운 것이 없다
uno_weekly의 vb.net시리즈나 혹은 워크샵의 DB코너를 차근차근 보시고 계신다면,
정말 어렵지 않다
위의 SQL문으로 몇줄 처리하면 아래와 같이 버튼을 크릭하면
해당 직원의 매출실적을 갖여 온다



Public Class myButton
    Public WithEvents btnX As Microsoft.Vbe.Interop.Forms.CommandButton
    Dim rRange As Excel.Range
    Sub New(ByVal bQ As Microsoft.Vbe.Interop.Forms.CommandButton, ByVal rTarget As Excel.Range)
        btnX = bQ
        rRange = rTarget
    End Sub
    Private Sub btnX_Click() Handles btnX.Click
	'복잡한 프로시져는 크래스자체메소드 보다는 외부 모듈에 두는 것이 좋다
        Globals.ThisAddIn.getMyPerfomance(btnX.Caption)
    End Sub
End Class

외부에 둔다는 것이 뭔소리냐 하면..아래의 그림과 같이
버튼의 갯수대로 버튼을 안고 있는 크래스로 부터 개체(Instance)를
만든다면 비경제적인 것이다
그래서 외부에 버튼크래스에서 호출하는 별도의 것을 두는 것이 효율적인 것이다
만들어지는 버튼 개체마다 이것을 공동으로 사용하는 셈이다


그런 각도로 아래의 VSTO 화일을 보시면 좋을 것이다
DB끌어오는 SQL등의 내용은 UNO_Weekly의 VB.Net시리즈를 계속 살피시면 되고...

***[LOG-IN]***