2012-07-16 1 views
0

3 가지 형식이 있으며 각각 자체 그리드가 있습니다. 다음 코드는 현재 form1에 쓰여 있지만 3 가지 형식 모두에서 사용됩니다. 그것은 작동하지만 매우 복잡하고 길기 때문에 다른 데이터베이스를 사용하고 다른 컬럼을 포함하는 3 가지 양식에서 작동해야합니다. 아래 코드를 3 개의 분리 된 함수로 나누고 해당 양식에 필요한 데이터 만 포함 된 각 양식의 뒷면에 배치하는 것이 더 적절하다고 생각합니까?이 상황에서의 코드 구성 및 재사용 가능성?

Public Class Form1 

Public sFilter as string 
Public sQuery as string 


Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  

Public Sub buildFilter(ByVal form as string) 
    select case form 
    Case "form1" 
    sFilter = "control_no > 0 and control_no < 10000" 
    Case "form2" 
    sFilter = "quantity > 0 and quantity < 7849" 
    Case "form3" 
    sFilter = "store_id > 10000" 
    end select 
End Sub 

Public Sub buildQuery(form) 
    Select case form 
    Case "form1" 
    sQuery = "Select * FROM dataBase1 WHERE " & sFilter 
    Case "form2" 
    sQuery = "Select quantity, first_name, last_name FROM database2 WHERE " & sFilter 
    Case "form3" 
    sQuery = "Select * FROM dataBase3 WHERE " & sFilter 
    End Select 
End Sub 


End Class 

나는 위의 코드를 취하여 각 양식의 뒷면에 배치하고 양식을 사용하는 것이 가장 바람직하다고 들었습니다. 나는 그것이 최선의 접근법이 아닌 것처럼 느낀다. 그러나 나는 또한 현재의 설정이 좋지 않다는 느낌을 받는다. 좋은 접근 방법은 무엇입니까?

답변

1

빌드를 살펴해야 다른 형태하여 상속 후 일반적인 상속 된 형태로 이러한 방법 :

Public MustInherit Class MyInheritedForm 
    Inherits System.Windows.Forms.Form 

    Public sFilter as string 
    Public sQuery as string 


    Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  

    Public Sub buildFilter(ByVal form as string) 
     select case form 
     Case "form1" 
     sFilter = "control_no > 0 and control_no < 10000" 
     Case "form2" 
     sFilter = "quantity > 0 and quantity < 7849" 
     Case "form3" 
     sFilter = "store_id > 10000" 
     end select 
    End Sub 

    Public Sub buildQuery(form) 
     Select case form 
     Case "form1" 
     sQuery = "Select * FROM dataBase1 WHERE " & sFilter 
     Case "form2" 
     sQuery = "Select quantity, first_name, last_name FROM database2 WHERE " & sFilter 
     Case "form3" 
     sQuery = "Select * FROM dataBase3 WHERE " & sFilter 
     End Select 
    End Sub 


End Class 

그런 다음 당신은 그냥 필요

:

Public Class Form1 
    Inherits MyInheritedForm 


End Class 

그리고 당신의 방법은 상속과 함께합니다.

+0

아, 고마워요. 조엘.이게 내가 찾고 있던 바로 그거야. 그리고 8 라인에서 "Public form1_load"는 "Public MyInheritedForm_load"가되어야합니까? – Garrettchap1

+0

@ Garrettchap1 : 'Handles Me.Load'가있는 한 당신이 부르는 것이 중요하지 않습니다. –

1

모든 코드가 세 가지 형식으로 표시되는 것은 아닙니다.

하나의 옵션은 이미 가지고있는 코드와 함께 하나의 양식을 사용하고 사용중인 연결에 따라 양식의 속성을 설정하는 것입니다.

세 가지 형식이 서로 다른 디자인으로 서로 다른 데이터베이스에 연결되어 있다면 세 가지 서로 다른 형식의 쿼리와 필터 코드 집합이 있어야만하는 이유는 무엇입니까?

사이드 참고 : 당신은 또한 parametrised queries

관련 문제