티스토리 툴바


C#2010/07/25 00:27
안녕하세요.. 쪼코아몬드입니다.

아직은 C#은 노란병아리 초급반 신세를 벗어나지 못하고 있어서 좌충우돌 오리무중 몸과 정신이 바쁩니다 ㅠ_ㅠ

VS의 폼디자이너에서는 DateTimePicker 에 대해 더블클릭시 기본적으로 ValueChanged 라는 이벤트로 연결해주기 때문에
DateTimePicker 으로 특정 값을 검색해서 조회하는 폼등을 만들경우에 의심없이 ValueChanged 를 많이 쓰는데요..

다음과 같은 문제가 있습니다.
  1.  ValueChanged 라는 이벤트가 콤보박스에서 드랍다운 달력이 뜨고나서 선택할 값을 찾기 위해 연도나 달을 변경하더라도  계속적으로 발생합니다.
  2. dateTimePicker.Text = "2010-07-25" 와 같이 프로그램상에서 값을 변경하더라도 발생합니다.

이벤트중에 CloseUp 이란 이벤트가 있습니다. 이것을 쓰시면, 달력에서 날짜를 최종 선택하고 달력이 닫히기전에 호출됩니다.

그래서, 위의 1번에서처럼 중간에 날짜를 찾는다고 이동하더라도 이벤트가 발생하지 않고 로직처리를 위해서 값을 직접 변경하더라도 이벤트가 발생하지 않습니다.

이벤트가 정말 다양합니다만 너무 다양해서 -_- 항상 적용하는데 우여곡절이 많네요.

ps. 좌충우돌중에  뮤텍스나 세마포어를 사용하는 것도 시도해보고 했지만 쉽지도 않고 
     문제가 제대로 해결되지도 않았습니다.
     이벤트와 관련된 문제는 역시 이벤트로 푸는게 가장 정석인거 같습니다.



저작자 표시 비영리 동일 조건 변경 허락
Posted by 쪼코아몬드
오라클2010/04/16 15:23

Oracle 10g XE는 처음에 설치할 때 AL16UTF16으로 자동 설정됩니다.

이때 만약 다른 CHARACTERSET을 사용하던 디비를 임포트하려면 좀 난감하게 됩니다. 경우에 따라서 CHARACTERSET 차이로 인해 임포트시 에러가 발생하기 때문이죠.

저도 이 문제로 검색좀 했습니다.

간단하게 정리하자면...

Win+R => cmd => 엔터

# sqlplus / as sysdba
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949 ;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;

정상적으로 진행되었다면 아래와 같은 메시지를 보셨을 겁니다.

-- 정상 처리 메시지
SQL> SHUTDOWN IMMEDIATE;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> STARTUP MOUNT;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

시스템이 변경되었습니다.

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

시스템이 변경되었습니다.

SQL> ALTER DATABASE OPEN;

데이타베이스가 변경되었습니다.

SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949 ;

데이타베이스가 변경되었습니다.

SQL> SHUTDOWN IMMEDIATE;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> STARTUP;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL> SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER LIKE '%CHARACTER%';

PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_NUMERIC_CHARACTERS
.,

NLS_CHARACTERSET
KO16MSWIN949

NLS_NCHAR_CHARACTERSET
AL16UTF16


만약 아래와 같은 메시지를 만난다면 오라클 서비스를 재시작하세요.

SQL> SHUTDOWN IMMEDIATE;
ORA-24324: 서비스 처리가 초기화되지 않았습니다
ORA-24323: 값이 허용되지 않습니다
ORA-01089: 즉시 종료 중입니다 - 작업이 허용되지 않습니다

=> OracleServiceXE 서비스 재시작

출처 : http://westzero.net/77
Posted by 쪼코아몬드
C#2010/03/13 12:50
스프레드에 데이터를 입력하고 칼럼헤더부분을 더블클릭해도 AutoFit 기능을 지원합니다.

근데 이걸 자동으로 구현하려고 하니 Excel 에서처럼 AutoFit() 함수가 없더군요.
검색신공과 API 를 뒤져가면서 정리해봤습니다.

 /// <summary>
/// 시트의 칼럼을 자동으로 길이를 조정한다.
/// </summary>
/// <param name="sheet"></param>
public static void AutoFit(SheetView sheet)
{           
    for (int i = 0; i < sheet.Columns.Count; i++)
    {
        if (sheet.Columns[i].Visible)
        {
            float col = sheet.GetPreferredColumnWidth(i, false, true, true);                   
            sheet.Columns[i].Width = col;
        }
    }
}

이건 스프레드 API 에 나온 GetPreferredColumnWidth() 의 Syntax 입니다.
public float GetPreferredColumnWidth(
   int column,
   bool ignoreHeaders,
   bool ignoreSpans,
   bool excludeWordWrap
)

VS 2008 에서 Spread WinForm 4.0 버전으로 테스트했습니다.
저작자 표시 비영리 동일 조건 변경 허락
Posted by 쪼코아몬드