C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[44334] Re:Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^
박지훈.임프 [cbuilder] 1224 읽음    2006-03-30 22:25
아.. 그러니까 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

+ -

관련 글 리스트
44277 빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 쏘세지 1799 2006/03/27
44282     Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 박지훈.임프 1399 2006/03/27
44284         Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 쏘세지 1098 2006/03/27
44334             Re:Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 박지훈.임프 1224 2006/03/30
44337                 Re:Re:Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 쏘세지 1361 2006/03/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.