Tibero DB 를 사용할 일이 있었는데, tbAdmin이 구려서 직접 연결해서 데이터를 가져와야할 일이 있었다.

심지어 마땅한 다른 언어를 사용할 수 없어서 Excel VBA로......


윈도우 기준으로 ODBC를 시스템에 등록하고, 해당 드라이브를 이용해서 연결하면 된다.


1. ODBC 등록

ODBC 설치법은 인터넷에 검색하면 많이 나오지만, 인스톨러를 사용해서 등록하라고 하는데,,, 왠지 마음에 안들어서 수동등록함.

우선 필요한 ODBC 파일은.. 검색하면 어디서 구할 수 있는지 잘 나온다. (tbAdmin 에는 없다., 서버를 소스코드(tar.gz)로 받았을 경우 client/win32/lib/libtbcli.dll, libtbcli.lib 에 있음)

.lib도 필요한지 아닌지 잘 모르겠지만 일단 이름이 같으니까 같이 챙겨서, 삭제되지 않을 적당한 곳에 잘 꽁쳐놓자.


이후 cmd를 관리자모드로 열어서 아래 명령어 입력. 드라이버 이름(Tibero 6)이나 경로는 필요에 따라 수정해주면 된다.

odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}
64bit 시스템이라면, 32bit 로 등록해야 한다.
%windir%\syswow64\odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}


2. Excel VBA 에서 연결

도구 - 참조 에서 Microsoft ActiveX Data Objects 6.0 Library 체크 후 확인한 후 아래 코드 참고해서 작성.

Driver={Tibero 6} 는 위에서 ODBC 등록시 사용한 드라이버 이름을 사용하면 된다.


Dim conn As New ADODB.Connection
conn.Open "Driver={Tibero6};Server=x.x.x.x;Port=xxxx;UID=user;Database=sid;Password=pwd;"

Dim rs as New ADODB.Recordset
rs.ActiveConnection = conn
rs.Open "SELECT * FROM table;"

Do Until (rs.EOF = True)
...
    rs.MoveNext
Loop

rs.Close


대충 이런식으로 사용.

이 후로는 다른 DB 사용할 때랑 비슷하다. 연결 문자열 정도만 참고하면 될 듯?

망할 MS는 unicode 를 기본지원하지는 못할망정 호환지원도 제대로 못한다.

 

utf-8 csv의 경우에, Excel 로 바로 열면 한글이 모두 깨져버리는데,

데이터 불러오기 등의 번거로운 방법을 통해 불러오더라도 깨지는 X같은 경우가 발생한다.

 

나도 웬만하면 cp949로 인코딩을 굳이 해줄텐데,, 웹에서 javascript 로 데이터를 생성하고 바로 내려받는지라,

어떻게 방법이 없이 MS에 대한 저주만 한가득 하고 있었는데....

 

-------------------------------------------

 

UTF-8 BOM 을 통해 (반틈만) 해결하였다.

 

방법은, 파일의 가장 앞에 \xef\xbb\xbf 혹은 \ufeff 을 넣어주면 된다.

이제 Excel 에서 바로 열어도 한글이 깨지지 않는다.

 

나의 경우엔

'data:application/csv;charset=utf-8,'+encodeURIComponent(csv)

'data:application/csv;charset=utf-8,\ufeff'+encodeURIComponent(csv)

이렇게 바꿔주었다.

 

다만, Excel 이 아닌 다른 프로그램으로 열거나 직접 csv파일을 읽어와서 작동시킬때 문제가 생길 수도 있는데....

이건 MS 를 욕하자.

 

-------------------------------------------

Python의 경우 파일을 쓸 때 인코딩을 utf-8-sig 로 지정하면 된다

open(filepath, 'w', encoding='utf-8-sig')

-------------------------------------------

 

MS 는 IE(+Edge)와 CP949(euc-kr)를 하루빨리 없애버렸으면 좋겠다.

 

 

참고

 

UTF-8 인코딩에서의 BOM(Byte Order Mark) 문제 :: wystan's tales

 

https://stackoverflow.com/questions/17879198/adding-utf-8-bom-to-string-blob

+ Recent posts