|
아.. 그러니까 dll이 화면 dll인가 보군요.
만약 디비 연결을 모든 화면 dll에서 공유하고 하려면... dll 방식으로는 무리가 좀 있습니다.
bpl로 하면 모든 것이 깔끔해집니다. 실제로 제가 그런 방식을 쓰고 있구요.
전체 흐름은 꽤 복잡합니다만, 간단히 설명하자면...
디비 연결은 총괄적으로 관리할 bpl을 하나 만들고, 메인 애플리케이션과 화면 bpl들이 모두 이 데이터 bpl에 의존하게
합니다. 메인쪽에서 이 bpl의 연결을 생성해주면 되구요.
세부적으로는 이래저래 이슈들이 많은데, 일일이 다 설명해드리려면 강좌가 되니 힘들군요. ^^
(지금은 시간이 없습니다만 나중에 강좌를 한번 쓸까도 생각중입니다)
그럼...
쏘세지 님이 쓰신 글 :
: 지훈님 제 질문의 의도를 잘못 아신것 같네영
: 아래소스는 vb소스입니다.
: 제가 vb만 하다가 빌더로 넘어오게 되어 있는데 vb에서는 db사용을 아래와 같이 했었습니다.
: 모듈로 만들어서...
: 그런데 빌더에서 현재 제가 작업 하는 것이 UI단을 다 dll로 만들어서 사용합니다 폼하나에 dll 하나가 되겠져..
: 그런데 모든 폼에서 db를 RW합니다 그래서 DB 콘트롤 하는 부분만 빼내서 모듈화?? 하려구 합니다.
: 이렇게 할때 빌더에서는 어떻게 처리해야 되는지..
: 예를 들어 dll로 만들어 화면단위에서 쓰는 DLL에 임포트 하는방법이나??
: 그런데 위의 예로 들경우 컨넥트 같은경우 한화면에 하나씩 컨넥션을 맺어야 되니..비효율적인 방법이라
: 생각 듭니다 그래서 어떻게 해야 되는지 다들 db콘트롤 할때 보통 어떻게 하는지...이러한 점이 궁금한것입니다.
:
:
:
: 박지훈.임프 님이 쓰신 글 :
: : 보여주신 소스로만은 정확하게 알 수는 없겠지만, 제 생각에는 ASP에서 불러 쓰기 위한 dll인 거 같군요.
: : ASP에서 불러쓰는 dll은 일반 dll이 아니라 Active Server Object로 만들어야 합니다.
: : File -> New -> Other 선택하면 나오는 New Items 다이얼로그에서, ActiveX 탭 -> Active Server Object 아이콘을
: : 선택하면 됩니다.
: :
: : 그럼...
: :
: :
: : 쏘세지 님이 쓰신 글 :
: : : 원래는 VB를 사용하다 지금 갑자기 빌더로 넘어오게 되었습니다.
: : : 일반적으로 VB에서는 모듈로 만들어 사용했습니다.
: : : (참고:아래와 같이...)
: : : 그런데 이런걸 빌더에서는 어떤식으로 만들어 사용해야 되는지
: : : 제가 지금 화면을 다 DLL로 만들어 하나의 프로젝트에 포함시켜 사용하고 있습니다.
: : : 각각 개별의 작업을 하는 화면인지라..
: : : 위에 VB소스 처럼 사용하려구 하는데
: : : 만들어 놓으신게 있으면 참고 하려고 하는데 도움좀 부탁드립니다.
: : : DLL로 만들어야 되나영? DLL로 만들경우 화면에서 포함하게 되면 여러번 connect를 해야 될것 같은데..
: : : 어떤식으로 만들어야 되는지..혹시 만든신게 있다면 공개해주실순 있는지....
: : : 빌더는 첨인지라 많이 헤메게 되네영 그럼 즐 프하세영 참고로 여기서 제 나름대로 찾아봤는데
: : : 없어서 질문 올립니다~~^^
: : :
: : : Option Explicit
: : :
: : : '=====================================================================================================
: : : ' DB와 연결 종료
: : : '=====================================================================================================
: : :
: : : Public Sub AdoDisConnect()
: : :
: : : If AdoCon.State = adStateOpen Then
: : : AdoCon.Close
: : : Set AdoCon = Nothing
: : : End If
: : :
: : : End Sub
: : :
: : : '=====================================================================================================
: : : ' DB와 연결
: : : '=====================================================================================================
: : :
: : : Public Function AdoConnect() As Boolean
: : :
: : : Dim strConn As String
: : :
: : : On Error GoTo Error_Process
: : : Screen.MousePointer = 11
: : :
: : :
: : : 'strConn = "Provider=OraOLEDB.Oracle.1;Data Source=" & gDB_SERVER & ";User ID=" & gDB_USERID & ";Password=" & gDB_PASSWORD & ";"
: : : strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=D:\신동아화재\Source\Source_20060206\DB\표준화데이터DB\db1.mdb;"
: : : Set AdoCon = New ADODB.Connection
: : : AdoCon.ConnectionTimeout = 10
: : : AdoCon.CursorLocation = adUseClient
: : : AdoCon.Open strConn
: : : Screen.MousePointer = 0
: : :
: : : AdoConnect = True
: : : Exit Function
: : :
: : : '에러 체크
: : : Error_Process:
: : : Screen.MousePointer = 0
: : :
: : : MsgBox "DB Connection(Ado)을 하지 못했습니다" & vbCrLf & vbCrLf _
: : : & "Error Number : " & Err.Number & vbCrLf _
: : : & "Description : " & Err.Description, vbCritical, "DB Connect Error"
: : : AdoConnect = False
: : : End Function
: : :
: : : '=====================================================================================================
: : : ' SELECT
: : : '=====================================================================================================
: : :
: : : Public Function AdoQyOpenSet(ByRef adoRS As ADODB.Recordset, ByVal sql As String, ByRef nRecordCount As Long) As Boolean
: : :
: : : On Error GoTo ADOError:
: : :
: : : nRecordCount = 0
: : :
: : : Set adoRS = New ADODB.Recordset
: : : adoRS.CursorType = adOpenStatic
: : : adoRS.LockType = adLockReadOnly
: : : adoRS.CursorLocation = adUseClient
: : :
: : : adoRS.Open sql, AdoCon
: : :
: : : If Not adoRS.EOF Then
: : : nRecordCount = adoRS.RecordCount
: : : End If
: : :
: : : AdoQyOpenSet = True
: : :
: : : Exit Function
: : : ADOError:
: : :
: : : Set adoRS = Nothing
: : : AdoQyOpenSet = False
: : : DisplayADOError
: : : Screen.MousePointer = 0
: : :
: : : End Function
: : :
: : : '=====================================================================================================
: : : ' UPDATE,INSERT,DELETE
: : : '=====================================================================================================
: : :
: : : Public Function AdoQyExec(ByVal sql As String) As Boolean
: : :
: : : On Error GoTo ADOError:
: : :
: : : If sql <> "" Then
: : : Call AdoCon.Execute(sql)
: : : End If
: : :
: : : AdoQyExec = True
: : :
: : : Exit Function
: : :
: : : ADOError:
: : : AdoQyExec = False
: : : DisplayADOError
: : : Screen.MousePointer = 0
: : :
: : : End Function
: : :
: : : '=====================================================================================================
: : : ' Recordset을 닫는다.
: : : '=====================================================================================================
: : :
: : : Public Sub AdoCloseSet(ByRef adoRS As ADODB.Recordset)
: : :
: : : If adoRS.State = adStateOpen Then
: : : adoRS.Close
: : : Set adoRS = Nothing
: : : End If
: : :
: : : End Sub
: : :
: : : '=====================================================================================================
: : : ' Select한 결과를 필드 단위로 Error Check 한다.(String의 경우)
: : : '=====================================================================================================
: : :
: : : Public Function AdoGetString(ByRef adoRS As ADODB.Recordset, ByVal AdoCol As String, ByVal adPosBOF As Long) As String
: : :
: : : On Error GoTo ReadError
: : :
: : : adoRS.AbsolutePosition = adPosBOF + 1 '현재레코드의 위치
: : : AdoGetString = Trim(adoRS.Fields(AdoCol).Value & "")
: : : Exit Function
: : :
: : : ReadError:
: : :
: : : Dim strTemp As String
: : :
: : : AdoGetString = ""
: : : strTemp = ", Form Name : " & Screen.ActiveForm.Name & "-" & Screen.ActiveForm.ActiveControl.Name
: : :
: : : Select Case Err.Number
: : : Case 40041 'Invalid Column Name
: : : Debug.Print "AdoGetString Error - Invalid Column Name - " & AdoCol & strTemp
: : : Case 40022 'Invalid Position Number
: : : Debug.Print "AdoGetString Error - Invalid Position Number - " & AdoCol & "(" & CStr(adPosBOF) & ")" & strTemp
: : : Case 91
: : : Case 94
: : : Case Else
: : : Debug.Print "AdoGetString Error - " & RTrim(Str(Err.Number)), Err.Description & strTemp
: : : End Select
: : :
: : : End Function
: : :
: : : '=====================================================================================================
: : : ' Select한 결과를 필드 단위로 Error Check 및 Null 값 체크한다.(Number의 경우)
: : : '=====================================================================================================
: : :
: : : Public Function AdoGetNumber(ByRef adoRS As ADODB.Recordset, ByVal AdoCol As String, ByVal adPosBOF As Long) As Double
: : :
: : : On Error GoTo ReadError
: : :
: : : adoRS.AbsolutePosition = adPosBOF + 1 '현재레코드의 위치
: : : AdoGetNumber = IIf(IsNull(adoRS.Fields(AdoCol).Value), 0, adoRS.Fields(AdoCol).Value)
: : : Exit Function
: : :
: : : ReadError:
: : :
: : : Dim strTemp As String
: : :
: : : AdoGetNumber = 0
: : : strTemp = ", Form Name : " & Screen.ActiveForm.Name & "-" & Screen.ActiveForm.ActiveControl.Name
: : :
: : : Select Case Err.Number
: : : Case 40041 'Invalid Column Name
: : : Debug.Print "AdoGetNumber Error - Invalid Column Name - " & AdoCol & strTemp
: : : Case 40022 'Invalid Position Number
: : : Debug.Print "AdoGetNumber Error - Invalid Position Number - " & AdoCol & "(" & CStr(adPosBOF) & ")" & strTemp
: : : Case 91
: : : Case 94
: : : Case Else
: : : Debug.Print "AdoGetNumber Error - " & RTrim(Str(Err.Number)), Err.Description & strTemp
: : : End Select
: : :
: : : End Function
: : :
: : : '=====================================================================================================
: : : ' Ado에 대한 Error을 디스플레이 한다.
: : : '=====================================================================================================
: : :
: : : Public Sub DisplayADOError()
: : :
: : : Dim er As ADODB.Error
: : :
: : : For Each er In AdoCon.Errors
: : : MsgBox "Number : " & er.Number & vbCrLf & _
: : : "Text : " & er.Description & vbCrLf & _
: : : "SQL State : " & er.SqlState & vbCrLf & _
: : : "Source : " & er.Source & vbCrLf & _
: : : "Native : " & er.NativeError
: : : Next
: : :
: : : End Sub
: : :
: : : '*=====================================================================================================*
: : : ' Name : AdoStrReplace
: : : ' Description : SQL문을 받아서 '을 ''로 바꾸어 주는 함수
: : : ' Input : tmpStr - SQL문
: : : ' Return : 바뀐 SQL문
: : : ' Date :
: : : ' Update :
: : : '*=====================================================================================================*
: : : Public Function AdoStrReplace(ByVal tmpStr As String) As String
: : :
: : : tmpStr = Replace(tmpStr, "'", "''")
: : : tmpStr = Replace(tmpStr, Chr(0), "")
: : : AdoStrReplace = tmpStr
: : :
: : : ' MsgBox Chr(tmpStr)
: : :
: : : End Function
: : :
: : : '*=====================================================================================================*
: : : ' Name : AdoGetCurrentDate
: : : ' Description : 데이타베이스 서버의 서버일자를 가져오는 함수
: : : ' Input : Kind - 1 : Date Only (YYYYMMDD)
: : : ' 2 : DateTime (YYYYMMDDHHMMSS)
: : : ' 3 : DateTime (YYYYMMDD HH:MM:SS)
: : : ' 4 : DateTime (YYYYMMDDHHMMSSMMM)
: : : ' Return : 서버일자
: : : ' Date :
: : : ' Update :
: : : '*=====================================================================================================*
: : : Public Function AdoGetCurrentDate(ByVal kind As Integer) As String
: : :
: : : Dim adoRS As ADODB.Recordset
: : : Dim sql As String
: : :
: : : On Error GoTo ErrorHandler
: : :
: : : Set adoRS = New ADODB.Recordset
: : :
: : : Select Case kind
: : : Case 1
: : : sql = "SELECT CONVERT(CHAR(8),GETDATE(),112) AS CURDATE"
: : : Case 2
: : : sql = "SELECT CONVERT(CHAR(8),GETDATE(),112)"
: : : sql = sql + "+REPLACE(CONVERT(CHAR(8),GETDATE(),108),':','') AS CURDATE"
: : : Case 3
: : : sql = "SELECT GETDATE() AS CURDATE"
: : : Case 4
: : : sql = "SELECT REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(CHAR(23),GETDATE(),121),'-',''),' ',''),':',''),'.','')"
: : : sql = sql + "AS CURDATE"
: : : End Select
: : :
: : : adoRS.Open sql, AdoCon, adOpenForwardOnly, adLockReadOnly
: : :
: : : AdoGetCurrentDate = adoRS("CURDATE")
: : :
: : : adoRS.Close
: : : Set adoRS = Nothing
: : :
: : : Exit Function
: : :
: : : ErrorHandler:
: : : If adoRS.State = adStateOpen Then adoRS.Close
: : : Set adoRS = Nothing
: : : MsgBox CStr(Err.Number) & " : " & Err.Description
: : : AdoGetCurrentDate = ""
: : :
: : : End Function
|