Spread 생성
1. 스프레드 도구 추가
도구 상자 > 오른쪽 마우스 > 구성요소 > FarPoint Spread 6.0 확인
2. Spread 생성 후 > Spread 우클릭 > Spread Designer 클릭
왼쪽 - 열 제목 설정
오른쪽 - 행,열 최대개수 / 열 ID 설정
DB 연결
1. 프로젝트 탭 > 참조 > Microsoft ActiveX Data Objects 6.1 Library 체크 > 확인
2. Sql 연결
3. 모듈에 코드 추가
Public Sub ExecuteDB(ByVal rsIP As String, ByVal rsCatalog As String, ByVal rsUser As String, ByVal rsPwd As String, ByVal rsqlStr As String, ByRef iCnt As Integer)
On Error GoTo err
Dim AdoCn As New ADODB.Connection
'상단에 프로젝트의 참조를 들어가서 Microsoft ActiveX Data Objects 2.8 Library를 체크 그래야 데이터 베이스에 접근 가능
With AdoCn
.ConnectionTimeout = 3
'DB연결(모듈은 모든 폼에서 동일하게 적용하기 때문에 특정 ip를 입력할 순 없다)
.Open "Provider=sqloledb;Data Source=" & rsIP & ";Database=" & rsCatalog & ";UID=" & rsUser & ";PWD=" & rsPwd
.Execute rsqlStr, iCnt
.Close '연결 종료
End With
err:
If err <> 0 Then
MsgBox ("오류:" & err.Description)
End If
End Sub
Public Sub GetDBData(ByVal rsIP As String, ByVal rsCatalog As String, ByVal rsUser As String, ByVal rsPwd As String, ByVal rsqlStr As String, ByRef rsRet) '데이터베이스의 값을 가져와서 스프레드에 뿌리기
On Error GoTo err
Dim MyConnObj As New ADODB.Connection
Dim myRectSet As New ADODB.Recordset
Dim i As Integer
'상단에 프로젝트의 참조를 들어가서 Microsoft ActiveX Data Objects 2.8 Library를 체크 그래야 데이터 베이스에 접급 가능
MyConnObj.Open "Provider=sqloledb;Data Source=" & rsIP & ";Database=" & rsCatalog & ";UID=" & rsUser & ";PWD=" & rsPwd
myRectSet.Open rsqlStr, MyConnObj '쿼리 날리기
If myRectSet.EOF = True Then
Else
' 첫번째: ?, 2번째 -1: 모든 데이터 , 3번째 Chr(124): 각 열을 Chr(124)로 구분해줌, 4번째 Chr(3): 각 행을 Chr(3)으로 구분
rsRet = myRectSet.GetString(adClipString, -1, Chr(124), Chr(3))
End If
'' If myRectSet.RecordCount <> 0 Then '셀렉트해서 값이 있으면
'' Do While Not myRectSet.EOF '목록 끝까지 불러오기
'' rsRet = rsRet & myRectSet.Fields(0) & Chr(124)
'' rsRet = rsRet & myRectSet.Fields(1) & Chr(124)
'' rsRet = rsRet & myRectSet.Fields(2) & Chr(124)
'' rsRet = rsRet & myRectSet.Fields(3) & Chr(124)
'' rsRet = rsRet & myRectSet.Fields(4) & Chr(124) & Chr(3)
''
'' myRectSet.MoveNext '값 하나 받고 다음으로 넘어가는거
'' Loop
'' End If
MyConnObj.Close '연결 종료
err:
If err <> 0 Then
MsgBox ("오류:" & err.Description)
End If
End Sub
* IP연결할때 Port가 1433인 이유?
기본 Default값으로 1433이 설정되어있고 보안을 위해서 다른 Port로 바꿔주면 된다
폼 로드
Private Sub Form_Load()
Dim sRet As String
Dim sSql As String
Dim i As Integer
Dim j As Integer
Dim aTest() As String
Dim aTest2() As String
Dim sInput As String
'' 행 개수 0개로 시작
spread.MaxRows = 0
'' DB SELECT문(폼을 열었을때 DB데이터 가져오기)
sSql = "select * from Member"
'' DB와 연결
'' sRet Spread에 있는 모든 데이터를 담고 있음
'' sRet는 행은 chr(3), 열은 chr(124)로 구분하고 있음
Call GetDBData("127.0.0.1,1433", "ACKTEST", "sa", "ackif", sSql, sRet)
'' Chr(3)은 Split으로 나눌떄 문자가 아니므로 ""로 묶어주지 않는다
'' 먼저 Chr(3)으로 나눠 행별로 배열에 담아준다
aTest() = Split(sRet, Chr(3))
'For i = LBound(a) To UBound(a)
For i = 0 To UBound(aTest) - 1
If aTest(i) <> "" Then
aTest2() = Split(aTest(i), Chr(124))
spread.MaxRows = spread.MaxRows + 1
Call spread.SetText(spread.GetColFromID("Id"), spread.MaxRows, aTest2(0))
Call spread.SetText(spread.GetColFromID("Name"), spread.MaxRows, aTest2(1))
Call spread.SetText(spread.GetColFromID("Age"), spread.MaxRows, aTest2(2))
Call spread.SetText(spread.GetColFromID("Address"), spread.MaxRows, aTest2(3))
Call spread.SetText(spread.GetColFromID("Gender"), spread.MaxRows, aTest2(4))
End If
Next i
End Sub
추가버튼
Private Sub addBtn_Click()
On Error GoTo err
Dim sSql As String
With spread
.MaxRows = .MaxRows + 1
' GetColFromID는 텍스트박스와 스프레드 열을 연결하기 위해서 열의 id를 가져옴
Call .SetText(.GetColFromID("Id"), .MaxRows, idtxt.Text)
Call .SetText(.GetColFromID("Name"), .MaxRows, nameTxt.Text)
Call .SetText(.GetColFromID("Age"), .MaxRows, ageTxt.Text)
Call .SetText(.GetColFromID("Address"), .MaxRows, addressTxt.Text)
Call .SetText(.GetColFromID("Gender"), .MaxRows, genderTxt.Text)
End With
err:
If err <> 0 Then
Call MsgBox(err.Description)
End If
End Sub
삭제버튼
Private Sub deleteBtn_Click()
On Error GoTo err
Dim i As Integer
Dim sSql As String
Dim sId As String
Dim vTmp
Dim iCnt As Integer
With spread
For i = 1 To .MaxRows
.Col = .GetColFromID("CheckBox")
.Row = i
If .Text = "1" Then
' vTmp는 var값이 들어가야하므로 형식없이 선언
' vTmp는 value로 getColFromID("id")를 통해 가져온 id(데이터)를 vTmp에 넣어준다(파라미터)
Call .GetText(.GetColFromID("Id"), i, vTmp)
' sID는 vTmp에 혹시나 있을 공백을 제거해준 파라미터
sId = Trim(vTmp)
.Row = i
.Action = 5
'ex_ 10행까지 있고 i=7일 경우 7번째 행의 데이터는 지워지고 7행은 빈칸으로 남아 있다. 여기서 Action=5와 .MaxRows = .MaxRows -1를 통해 행을 지우면 끝 행이 지어지므로 10행이 지워진다.
' 고로 이러한 오류를 없애기 위해 i를 하나씩 줄여줌으로써 8행 데이터가 7행으로 10행 데이터가 9행에 가도록 해준 후 마지막 행을 지워주는 역할
i = i - 1
.MaxRows = .MaxRows - 1
End If
'sSql = DELETE/ FROM Member
' primary key인 열을 기준으로 삭제
sSql = "DELETE FROM Member WHERE ID = '" & sId & "'"
Call ExecuteDB("127.0.0.1,1433", "ACKTEST", "sa", "ackif", sSql, iCnt)
Next i
End With
err:
If err <> 0 Then
Call MsgBox(err.Description)
End If
End Sub
수정버튼
Private Sub updateBtn_Click()
On Error GoTo err
Dim sSql As String
Dim iCnt As Integer
Dim i As Integer
' aId, aName, aAge, aAddress, aGender값은 String이 아님!!!
Dim aId, aName, aAge, aAddress, aGender
Dim sId, sName, sAge, sAddress, sGender As String
With spread
For i = 1 To .MaxRows
.Col = .GetColFromID("CheckBox")
.Row = i
If .Text = "1" Then
' i번째 행의 ID 열의 값을 aId에 넣어줌
Call .GetText(.GetColFromID("Id"), i, aId)
Call .GetText(.GetColFromID("Name"), i, aName)
Call .GetText(.GetColFromID("Age"), i, aAge)
Call .GetText(.GetColFromID("Address"), i, aAddress)
Call .GetText(.GetColFromID("Gender"), i, aGender)
sId = Trim(aId)
sName = Trim(aName)
sAge = Trim(aAge)
sAddress = Trim(aAddress)
sGender = Trim(aGender)
'' Call .SetText(.GetColFromID("Id"), i, idtxt.Text)
'' Call .SetText(.GetColFromID("Name"), i, nameTxt.Text)
'' Call .SetText(.GetColFromID("Age"), i, ageTxt.Text)
'' Call .SetText(.GetColFromID("Address"), i, addressTxt.Text)
'' Call .SetText(.GetColFromID("Gender"), i, genderTxt.Text)
' query문 작성할 시 줄바꿈 사용하려면 &_를 사용
sSql = "UPDATE Member " & _
"Set Id = '" & sId & "', Name = '" & sName & "', Age = '" & sAge & "', Address = '" & sAddress & "', Gender = '" & sGender & "'" & _
"WHERE ID = '" & sId & "'"
'폼마다 다른 DB에 접근하기 위해 접근할 DB의 주소를 입력(포트 사용 이유 : ip는 알 수 있으니 포트를 사용함으로써 보안)
Call ExecuteDB("127.0.0.1,1433", "ACKTEST", "sa", "ackif", sSql, iCnt)
End If
Next
End With
err:
If err <> 0 Then
Call MsgBox(err.Description)
End If
End Sub
저장버튼
Private Sub saveBtn_Click()
On Error GoTo err
Dim sSql As String
Dim iCnt As Integer
Dim i As Integer
Dim aId, aName, aAge, aAddress, aGender
Dim sId, sName, sAge, sAddress, sGender As String
With spread
For i = 1 To .MaxRows
.Col = .GetColFromID("CheckBox")
.Row = i
If .Text = "1" Then
Call .GetText(.GetColFromID("Id"), i, aId)
Call .GetText(.GetColFromID("Name"), i, aName)
Call .GetText(.GetColFromID("Age"), i, aAge)
Call .GetText(.GetColFromID("Address"), i, aAddress)
Call .GetText(.GetColFromID("Gender"), i, aGender)
sId = Trim(aId)
sName = Trim(aName)
sAge = Trim(aAge)
sAddress = Trim(aAddress)
sGender = Trim(aGender)
' values에서 값을 idtxt만 적은 이유는 스프레드와 같이 열이 아닌 DB열과 values 값만 일치시켜주면 되기때문에
' 문자를 입력할 시 작은 따옴표(')로 묶어준다 , 값의 경우 ""밖에 적어줘야함으로 &로 연결시켜준다
sSql = "INSERT INTO Member(ID, Name, Age, Address, Gender) values ('" & sId & "', '" & sName & "', '" & sAge & "', '" & sAddress & "', '" & sGender & "')"
'폼마다 다른 DB에 접근하기 위해 접근할 DB의 주소를 입력(포트 사용 이유 : ip는 알 수 있으니 포트를 사용함으로써 보안)
Call ExecuteDB("127.0.0.1,1433", "ACKTEST", "sa", "ackif", sSql, iCnt)
End If
Next
End With
err:
If err <> 0 Then
Call MsgBox(err.Description)
End If
End Sub
'VB' 카테고리의 다른 글
[VB.NET] 엑셀 파일 생성 (0) | 2022.05.12 |
---|---|
[VB.NET] Excel 연결 (0) | 2022.05.12 |
[C#] 숫자를 한글로 표현 (0) | 2022.05.11 |
[Vb6.0] Byval / Byref (0) | 2022.05.06 |
[VB6.0] 계산기 (0) | 2022.05.03 |
댓글