PROGRAMMING WORKSHOP

VB.Net |
Diary_3

DB에 정보입력하고,삭제하고, 또 엑셀데이타를 사용해 보고....

관련된 테이블을 몇개 더 만들기전에 하나의 테이블을 만들어 보면서
몸을 풀어 보자..
DB를 만들었으면 정보를 입력해 보아야 할 것이다
테이블에 정보가 없으면 빈껍데기..
입력하기위하여 만든 프로시져는 실제 작업을 하면서 또 사용하면 되는 것이고
DB가 있는지 확인하고, 없으면만들고
DB는 있는데 테이블이 없으면 테이블을 만들었다
이제 버튼을 두개를 만들어서 하나는 쌤플데이타를 DB의 테이블에 만들어놓고..
DataGridView에 채우는 것을 해보자

최대한 다양한 쌤플을 만들어 보면서 다양한 상황을 관찰하고
익숙하게 하도록 하기 위한 씨리즈이니, 관심있는 분들은 하나도 빼먹지
않고 보시고, 실제로 만들어 보시면서 하시기를 바란다
또한 과정에서 여러번 인터페이스를 바꿔 나갈 것이고,
이것도 역시 다양한 윈도우의 개체의 경험을 보여드리기 위한 것이니
중간,중간 뜸성,뜸성 보시기 말고, 차례대로 보시는 것이 좋을 것이다

우선 인터페이스를 보기좋게 컨트롤을 추가한다
Panel 1개, Label, Button 2개 ,DataGridView 1개를 폼이 실행될때 아래의
프로시져를 실행하여 만든다
항상 이야기 하듯이 프로그래밍적으로 런타임에 컨트롤을 만드는 것이
편리하고 콘트롤하기 편하다
복잡해 보이지만 딜다 보면 단순한 작업이다
컨트롤을 위하여 어떤 크래스를 사용하느냐,
위치를 어떻게 잡느냐, 크기를 어떻게 하느냐
모양(서식)을 어떻게 하느냐
어떤 부모컨트롤에 소속을 시킬 것이냐
이런 생각을 표현하는 것

  
    Sub setDBInterface()
        Dim oFont As New Font("맑은 고딕", 9)
        '' Panel 컨트롤
        Dim oPanel As New Panel
        oPanel.Width = oSplitterPanel.Panel2.Width / 3 * 2
        oPanel.Height = oSplitterPanel.Panel2.Height - 20
        oPanel.Left = 5
        oPanel.Top = 5

        oPanel.BackColor = Color.DarkGray
        oSplitterPanel.Panel2.Controls.Add(oPanel)

        ' 제목달기 Label콘트롤
        Dim oLabel As New Label
        oLabel.AutoSize = True
        oLabel.Text = "Sample DB & Table 만들기"
        oLabel.Font = New Font("맑은 고딕", 14, FontStyle.Bold)
        oLabel.Top = 5
        oLabel.Left = 5
        oPanel.Controls.Add(oLabel)

        ' 쌤플데이타 DataGridView콘트롤에 채우기 버튼
        oGetSampleFile = New Button
        oGetSampleFile.Left = oLabel.Left + oLabel.Width + 5
        oGetSampleFile.Top = 5
        oGetSampleFile.Text = "쌤플데이타만들고 DataGridView에 채우기"
        oGetSampleFile.AutoSize = True
        oGetSampleFile.Font = oFont
        oGetSampleFile.BackColor = Control.DefaultBackColor
        oPanel.Controls.Add(oGetSampleFile)

        ' 쌤플데이타 엑셀에 옮겨보고, 다시 엑셀에서 DB에 옮겨보기 버튼
        oGetXLFile = New Button
        oGetXLFile.Left = oGetSampleFile.Left + oGetSampleFile.Width + 5
        oGetXLFile.Top = 5
        oGetXLFile.Font = oFont
        oGetXLFile.Text = "엑셀데이타를 테이블에 옮기기"
        oGetXLFile.AutoSize = True
        oGetXLFile.BackColor = Control.DefaultBackColor
        oPanel.Controls.Add(oGetXLFile)

        '' DataGridView콘트롤 
        oGridView = New DataGridView

        oGridView.Top = oLabel.Top + oLabel.Height + 5
        oGridView.Left = 5
        oGridView.Font = oFont
        oGridView.Width = oPanel.ClientSize.Width - 10
        oGridView.Height = oPanel.ClientSize.Height - 50
        oGridView.BackgroundColor = Color.AliceBlue
        oPanel.Controls.Add(oGridView)

    End Sub



그림과 같이 컨트롤을 만들면서 그리고 쌤플 데이타를 만든다
아래와 같이 폼이 로딩될때 아래의 프로시져를 호출하여 실행하면 만들어진다
여기에서 각휠드의 문자갯수를 좀 변경시켰다..
DB는 문자열정보의 경우도 문자의 갯수를 지정한 갯수만큼으로 하지 않으면
에러가 난다, 엑셀같이 마음좋은 아저씨같이 이런 저런 정보를 죄다 받아주지 않는다
실은 그것이 좋고, 그곳에 안주하고 있다가 VB.Net과 같은 다른 정보의 타입이나
크기에 민감한 것에 걸리면 조금 헷갈리고, 쩔쩔메게 된다
그러니 엑셀을 사용하면서도 정보의 크기와 타입에 관심을 갖고 있는 것이 좋다
관심을 갖는 다고 하는 것은..
변수하나라도 정확한 타입으로 지정하는 습관을 갖으시라는 것

#Region "Insert Sample Datas Into Table"
    Public Sub addSampleDatas()
        Dim oCon As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PROJ_DB & ";User Id=admin;Password=;")
        oCon.Open()
        Dim sSQL_Head As String = "INSERT INTO " & PROJ_DB_TBL_NAME & "(식당명,전화번호,위치,구분,용도,별점,평가,메모,방문) VALUES "
        Dim sSQL_Main As String = ""
        Dim oCmd As New OleDb.OleDbCommand
        oCmd.Connection = oCon
        Try
            For iRow As Integer = 1 To 100
                Dim sRestName As String = getRestaurantName()
                Dim sPhon As String = getPhoneNumber()
                Dim sLoc As String = getLocation()
                Dim sType As String = getRestaurantType()
                Dim sPur As String = getPurpose()
                Dim sStarRate As String = Int(Rnd() * 5) + 1
                Dim sRate As String = getRating()
                Dim sVisi As Boolean = Int(Rnd() * 2) = 1
				
                sSQL_Main = sSQL_Head & "('" & sRestName & "','" & _
                                               sPhon & "','" & _
                                               sLoc & "','" & _
                                               sType & "','" & _
                                               sPur & "','" & _
                                               sStarRate & "','" & _
                                               sRate & "','" & _
                                                "-" & "'," & sVisi & ")"


                oCmd.CommandText = sSQL_Main
                oCmd.ExecuteNonQuery()
            Next

        Catch ex As Exception
            Throw New Exception("데이타타입에 문제가 있는 것 같습니다, 확인하시고 다시 하세요")
        Finally
            oCmd.Dispose()
            oCon.Close()
            oCon.Dispose()
        End Try


    End Sub
	
	' 식당타입정보만들기
    Function getRestaurantType()
        Dim sType As String() = {"Ethinic", "Fast Food", "Tratitional", "Casual", "Family", "Find Dining"}
        Return sType(Int(Rnd() * sType.Length))


    End Function
	' 식당등급정보만들기
    Function getRating()
        Dim sRate As String() = {"Exceptional", "Excellent", "Very Good", "Good", "Average", "Bad", "Very Bad"}
        Return sRate(Int(Rnd() * sRate.Length))

    End Function
	'식당의 용도정보만들기
    Function getPurpose()
        Dim sStyle As String() = {"Barbecue", "Brasserie and bistro", "Buffet", "Cafe", _
                                  "Cafeteria", "Coffeehouse", "Destination restaurant", "Tabletop cooking", _
                                  "Mongolian barbecue", "Pub", "Teppanyaki-style"}
        Return sStyle(Int(Rnd() * sStyle.Length))
    End Function
	'식당의 위치정보만들기
    Function getLocation()
        Return New String(Chr(Int(Rnd() * 26) + 65), 3)
    End Function
    Function getRestaurantName()
        Dim sName As String = ""
        For iX As Integer = 1 To 5
            sName &= Chr(Int(Rnd() * 26) + 65)
        Next
        Return sName
    End Function
	'식당의 전화번호정보만들기
    Function getPhoneNumber()
        Dim sPhone As String = ""
        For iX As Integer = 1 To 8
            If iX = 4 Then
                sPhone &= "-"
            Else
                sPhone &= Int(Rnd() * 9) + 1
            End If
        Next
        Return sPhone

    End Function
#End Region

관심과 요령만 있으면 위의 코드는 모두 VBA에서도 활용할수 있는 것이니
필요하면 잘 챙겨두시는 것이 좋다
일부러 함수등을 토막을 많이 쳐서 놓을 것이니, 각자 라이브러리에 보관했다가
필요할때 그대로 사용하면 되겠지..
위의 것을 실행하면..



와 같이 DataGridView에 만들어놓은 테이블의 내용을 그대로 올리게된다..
간단하고 쉽네..

***[LOG-IN]***