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
[44337] Re:Re:Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^
쏘세지 [hacker004] 1361 읽음    2006-03-31 12:57
감사합니다. 제가 하려는게 그런것입니다.
지금 메인쪽은 제가 담당하는 쪽이 아니라 그쪽을 제가 만지지 않구 있습니다.
메인쪽에서는 서버랑 통신하여 DB처리를 서버쪽에서 하구 있습니다.
하지만 제가 하는 작업은 특수한??? 작업이어서 부득이하게 직접 연결하여 사용하려구 하구 있습니다
화면두 그래서 DLL로 만든이유입니다. 메인쪽에선 그냥 콜만 해주면 되구영..
그래서 DLL 로 만든 화면에서 DB처리하는 부분을 빼려구 하는데 그게 쉽지가 않네영
데이터 모듈이라는게 있어서 그걸 지금 사용하구 있는데 ...제가 빌더는 처음인지라...
ADO 사용하구 있는데.. 전에는 (다른툴) 컨넥션과 쿼리만 날리면 레코드셋을 받을수 있었는데
여기서는 하는 방식이 틀려( 조건문이나 파라미터용) 삽질하구 있습니다.
이런 샘플좀 있으시면 좀 공개해주실수 있나영...ㅠㅠ.... 암튼 지훈님 강좌 기대 만땅 됩니다~~
기대하고 답변두 기다리겠습니다.^^수고하시구 주말 잘보내세영~~


박지훈.임프 님이 쓰신 글 :
: 아.. 그러니까 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만들기 질문이영~~^^ 쏘세지 1800 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만들기 질문이영~~^^ 박지훈.임프 1225 2006/03/30
44337                 Re:Re:Re:Re:빌더에서 사용하는 ORACLE DB 용 DLL만들기 질문이영~~^^ 쏘세지 1361 2006/03/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.