퇴근5분전

 

 

내부 소스는 모두 뜯어서 새로 만들어냈다.

 

사전 기능은 컬럼과 테이블에 부착될 주석문!

다량으로 {key\t설명\r\n} 형태로 붙여넣기가 가능하다.

 

 프로그래밍 하면서 가장 힘들었던건 case문 처리인데...  워낙 다양하게 작성이 가능하여

 

여러 타입을 검토하고 작성해보다가

  case {요소}

          when {요소} then {요소}

          when {요소} then {요소}

          else {요소}

  end

위와 같은 형태로 잡았다.

 case  when {요소} then {요소}

          when {요소} then {요소}

          else {요소}

  end

여기서 {요소} 는 컬럼이 될수도, function이 될수도 case문이 될수도 있다!

 

그래서 where문에 조립이 될때

 

col = case when col1 = 0 then  0

      else 1

end

이런 형태로 표시된다.

 

이제 여러 쿼리들을 넣으면서 디버깅 하면서 탄탄하게 만들어봐야지...

 

수정]  디버깅을 통해서 조금씩 더 다듬고 있다.

insert into tablename ( 일대

into가 빠지면. tableName (로 표시되는 처리를 체크해서 (가 아래로 내려가 자기 자리 찾아가도록.

 

into가 대/소문자 처리 할때 영향을 안받아서 바뀌도록.

 

update table set col1 = 1, col2 = 2  이런 쿼리에서

col1에 대한 설명문구가 제대로 표시되도록 수정.

 

기타 잔잔한 버그들 잡고 있다.

 

프로젝트를 진행하면서 조금이라도 안해본 쿼리처럼 보인다거나 좀 긴 쿼리들은 넣어서 제대로 변형이 되는지 체크중이다.

 

 

'# 9) My Program(.NET)' 카테고리의 다른 글

PGMMNG] DataGrid 소스 제너레이터?  (0) 2015.10.01
SQL_FMT] 요소들을 분해!!  (0) 2015.09.09
SQL_FMT] 새로 다시 만드는 쿼리 포멧터  (0) 2015.08.19
쿼리포맷터 III  (2) 2015.05.24
쿼리포맷터II  (0) 2015.05.05

 

 플젝중에 난간함 상황이 생겼다.

금액과 관련된 TextBox Field에 TextBox를 넣었기에 숫자이외에 영어 한글 모두 입력이 되는 부분..

물론 개발프레임웍에 숫자관련 컨트롤이 사용자정의를 통해 만들어져 있다. 사용하지 않는 분위기...?

 

 기존 디자인에 거의 모두 Textbox가 되어 있기에 이것을 이용해서 숫자이외에 차단!!

이건 의외로 간단히 처리가 되었고...

  PreviewKeyDown을 이용해서 필터링을 거쳤다.

 

다만 문득 떠오르는게...

 

DB의 데이타 타입과 C#의 데이타 타입이 허용범위가 다르다는 것이었는데???

 

Numeric( 5, 3 ) 를 DB에 넣으면서... !!!!

 

C#에서 단순히 double로 처리해서 파라미터 넘겨주면??

 

Numeric( 18, 2 ) 에서 ... Decimal로 처리는 했는데...

 

단순 데이타 처리를 저렇게 한다고 해도... 그럼.. TextBox의 입력은???

 

음.. 그래서 생각한게 maxLength를 지정하고 scale이 있으면 소숫점 자리와 마이너스표시 자리수 까지 maxLength로 잡아주었다.

 

Numeric( 5, 3 )의 DB에 준비가 되었을때...

 

입력은 MaxLength = 7이 되었다.

 

그리고 계산해서 최대값을 보니 99.999 최소값은 -99.999 ,  MsSql에서 직접 테스트 해보니 100은 못넣더랑...

 

그래서 입력은 실제로 9999999 까지 입력을 받을 수 있다.

 

고럼... keydown할때 다음 값을? 계산해서 범위에 맞지 않으면 cancel 처리 하려고 했는데...

 

배보다 배꼽이 되겠다..

 

그래서 생각한게 그냥 저장전에 유효성체크를 범위를 포함해서 한번 더 하자... 였다.

 

 tb1.EventAttachedForNumericInputFormat((e) => { }, 5, 3); // Numeric( 5, 3 )을 범위로 입력가능 -99.999 ~ 99.999
 tb2.EventAttachedForNumericInputFormat((e) => { }, "N0", 0, 10); // 0~10 까지 범위를 가진 2자리 입력가능 0 ~ 10

 

이렇게 해당 텍스트박스에 확장메서드로 구현해두면... 숫자 포멧도 되고! 범위도 체크가 되고...

 

저장전 유효성 체크는

 

 // 0~100범위 내에 있으므로 pass

 if (TextBoxWPF_Ex.IsCheckNumberRange("99", 0m, 100m) == false) {
         MessageBox.Show("허용범위 밖입니다.");
 }

 

 //-99.999~99.999 범위 밖이므로 alert

 if (TextBoxWPF_Ex.IsCheckNumberRange("100", 5, 3) == false)
 {
        MessageBox.Show("허용범위 밖입니다.");
 }

 

 // pass

 if (TextBoxWPF_Ex.IsCheckNumberRange("99", (decimal)int.MinValue, (decimal)int.MaxValue) == false)
 {
        MessageBox.Show("허용범위 밖입니다.");
 }

 

 여기서 한가지 맹점.이...   int, int 타입으로 prev, scale을 받고, decimal , decimal로 min, max를 받아서

하나의 메서드를 오버로드 시켰더니...

 

 int.MinValue와 int.MaxValue가 사용되는 db에서의 int의 범위에 대하여 넣을땐! 위처럼 decimal로 치환을 해야된다..

 

 안그러면 prev가 int.minValue 만큼.. scale이 int.MaxValue 만큼 잡아서 OutOfMemory 메세지를 보게 된다.

 

너무 급조해서 앞으로 좀더 고쳐봐야지... 쉽게...  winform용도 하나 만들어놔야징.

 

##### 추가

 

입력 숫자 자체를 범위에서 제한 하도록 수정!!

 

                    string x = txt.Text;
                    string xx = x.Remove(txt.CaretIndex, txt.SelectionLength);
                    if (e.Key == Key.Back && txt.SelectionLength <= 0 && (txt.CaretIndex - 1 >= 0))
                    {
                        // 1 char 삭제
                        xx = x.Remove(txt.CaretIndex - 1, 1);
                    }
                    else if (e.Key == Key.Delete && (txt.CaretIndex) < txt.Text.Length)
                    {
                        // 1 char 삭제
                        xx = x.Remove(txt.CaretIndex, 1);
                    }
                    else
                        xx = xx.Insert(txt.CaretIndex, GetChar(e.Key));

                    e.Handled = !IsCheckNumberRange(xx, minValue, maxValue);

 

이렇게 하면 입력된 숫자를 포함해서 범위를 체크할수 있다.

 

key처리전에 N0 포멧일경우 소숫점(.) 에 대한 예외 처리를 해주면 깔끔해진다.

 

또 처리 할 것이 남았다. 입력범위 밖에 숫자를 입력했을 경우 어떻게 알려줄것인가???

 

툴팁? Alert? 색상?...     

 

 

 현재의 프로젝트 중에 xaml이 개발표준에 맞지 않게 되있어서 화면을 열때마다 조금씩 틀어지거나 흔들려보이는 부분들을

 

깔끔하게 정리하여 맞춰주는 프로그램을 잠깐 만들어서 사용한다.

 

 탭 인덱스도 위에서 아래로 그리드 레이어일 경우 내부의 컨트롤들은 Grid.RowIndex와 Grid.ColIndex 순서대로 자동으로 부여하도록 만들어져있다.

 

쓸데없이 Margin준거라든가 높이값을 주어 흐트러지는 틀을 모두 제거하거나 위치에 맞게 값을 다시 셋팅한다.

 

각 컨테이너에 맞춤 스타일 정보를 셋팅하고, 컨테이너 하위에 있는 컨트롤 스타일도 없는 것들 채워넣거나 다시 셋팅하여

 

깔끔하게 줄맞춘 xaml을 얻을 수 있다.

 

 이 프로그램 덕에 일일이 탭 인덱스 찾아 넣을필요도 없고,... 그리드 레이어 안에 컨트롤들 찾아다니는 수고도 덜고...

 

일이 간편해진 만큼 다른 것들을 신경 쓸수 있어서 좋다... 이번 프로젝트도 힘내서 !!! 아자 아자..

 

 

 

포맷터...

이번 주말엔 case문 처리를 마쳤다.

좀더 쉽게 할 수 있는 방법도 있을 것 같은뎅...

 

insert, update, delete 구문은 이번주에 마쳐야지...

 

 

 

 

 이전 쿼리 포멧터의 단점이 너무 많아서 다시 만들기로 하고 .. 한달간 손도 안대고 메이플2만 했다.

 

다시 만드는데 이전 알고리즘을 계속 재사용 하게 되서 잊어버릴때까지 다른 일에 몰두했다.

 

이번에 2일정도 심사 숙고한 끝에 만들어낸 알고리즘으로 분해된 요소들을 그룹짓는데까지 마쳤다.

 

좀더 상세한 설정과 함께 조립하는 부분을 잡아야 하지만... 우선... 스샷!

 

 

 

그룹만 분리해서 취합하는 부분까지 마친 상태로 여러 쿼리들을 돌려본 상태에서 만족스럽다.

 

이제 좀더 상세타입을 결정하는 부분을 추가하고 조립! 하는 부분이 남았다.

 

일주일이면 꿍짝 되겠지...

'# 9) My Program(.NET)' 카테고리의 다른 글

SQL_FMT] 요소들을 분해!!  (0) 2015.09.09
SQL_FMT] 새로 만들어진...  (0) 2015.09.08
쿼리포맷터 III  (2) 2015.05.24
쿼리포맷터II  (0) 2015.05.05
쿼리 포맷터!  (0) 2015.05.01

 

 윗 머리들 오묘한 판단으로 중요한 일들이 다 묻혀버렸네...

 

메르스 진료하는 의사, 간호사분들 환자분들... 모두 잘 이겨내셨으면...

 

흠... 불특정 다수와 만나는 지하철 버스에서 왜? 마스크를 쓴 사람 보이는게 뜨문 뜨문 한걸까?

 

기침이 마른기침이랄수도 있지만... 자라보고 놀란 가슴 솥뚜껑 보고도 놀란다고도 하는데... 왜일까? 의식을 못하는걸까? 외면하는 것일까?

 

자기만 걸린다면 몰라도 자기가 걸리면 가족들이 위험해진다는 건 생각을 안하고 있나?

 

어렵다... 세상 참... 어렵다.

 

 

'--- 취미 > 생각하기' 카테고리의 다른 글

훈스를 탈퇴!  (0) 2015.09.29
티브로드. 한빛넷... 해킹차단 서비스?  (0) 2015.09.19
프로젝트 마치고...  (0) 2013.10.01
GUI Design Studio  (0) 2013.09.06
휴식] 멘붕? ...  (0) 2013.06.10

20150601 #수정

 테스트를 해보니 오류가 많아서 계속 고쳤다.

 

function 부분에서

    substring( 'aaaa', 1, 2 ) : parameter가 여럿일때 ,처리부분.

    isnull( max ( a ), 'aa')  이렇게 function안에 function이 들어가는 부분

    getdate() 같은 호출되는 function.

 

update 에서  table 의 별칭 정보 없을 때 set문이 깨짐..

 

case문

    : 이거 참 어려운 처리 ..

     case when then

                             case when then

                                     else

                             end

             else ( 

                        case when then

                                else

                        end

                   )

    end

 

 이런걸 처리 할때 간격 처리가 ... 골때리게 되어서 처리함.

쉽게 생각했다가 멘붕에 빠져서 허우적 거려서...

가장 마지막에 나온 것이 바로 case에서 자기 위치값을 가지고 있고 when, then, else, end에서는 case 요소를 참조하고 있다가

자기 위치값을 계산해서 찍어줌.

() 를 만나는 경우 이게 또 다른... 멘붕로 접어든다. 

stack으로 처리하다가 원했던 동작과는 전혀 다른 동작으로 디버깅하는데 반나절을 소비하고 겨우 정신차렸더니 잘시간...

다음날 하나둘 풀어가다보니 의외로 쉽게 잘 풀려서 몇시간만에 대부분 해결이 되었다.

 

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

  세번째 다시 만든 쿼리 포맷터...

  ## 별거 아니라고 생각하면서 시작한게 꾀나 오래 걸려서 작업이 완료되었다.

 많은 문법은 적용하지 못했지만. 기본적으로 사용하는 문법들은 넣었다. 경우의 수가 많아서 떠오르는 구문들만 처리 했으며, 추가적으로

지정되지 않은 서식문법은 추후에 하나씩 담으면 될 것 같다. 

 우선 이전 프로젝트 고생하셨던 부장님 선물로는 완성이 된듯...  기능은 많지 않지만 마음에 들어 하셨으면 좋겠다.

 

 # 우선 쿼리 UI ( * as 위치 는 삭제 함 ) 

 

# 변환을 시작하면 사전기능이 동작하여 변환될 사전기능이 없는 것들을 그리드에 뿌려줌. 입력후 저장하면

   저장된 설명으로 주석문이 만들어짐.

 

 

# 변환 후 정렬된 쿼리문!

 

'# 9) My Program(.NET)' 카테고리의 다른 글

SQL_FMT] 새로 만들어진...  (0) 2015.09.08
SQL_FMT] 새로 다시 만드는 쿼리 포멧터  (0) 2015.08.19
쿼리포맷터II  (0) 2015.05.05
쿼리 포맷터!  (0) 2015.05.01
Designer] 앞으로...  (0) 2013.07.10

#### 수정중 #######################################

 2015.05.16

     처음 설계했던 모델로 insert 쿼리에 대해 정상적인 처리가 안됨. 예외처리로 바꾸려고 했더니 손이 많이 간다.

    다시 모델을 바꿔 다시 개발 중.

     모델은 바꿨지만 자꾸 코드는 처음 모델을 잡았던 형태로 손이 가는 걸 막느라 오래 걸리네...

#################################################

 

 

쿼리 포맷터를 처음 짠것보다 좀더 제어가 쉽도록 수정했다. 하루종일 고쳤는데 select문만 처리 했다.

 

 

 

피곤해 !~

 

 

'# 9) My Program(.NET)' 카테고리의 다른 글

SQL_FMT] 새로 다시 만드는 쿼리 포멧터  (0) 2015.08.19
쿼리포맷터 III  (2) 2015.05.24
쿼리 포맷터!  (0) 2015.05.01
Designer] 앞으로...  (0) 2013.07.10
디자이너] Xaml -> 디자인 -> Xaml  (0) 2013.07.04

수정 완료!!

 쉬는 2일 동안 디버깅도 대략 끝냈음.

 

 

 

 

 

 

 

 

 

 

 쿼리 작성한 것을 일정 포멧으로 변경해주는 프로그램을 3일간에 노동을 거쳐 만들었다.

 

 

 

 지금은 Select 쿼리만 만들어놨고...

 

각 요소를 분리하고 그룹별로 모아서 꾸미는 룰을 사용했다.

 

그룹별로 모으는 방법은 콤포짓트패턴을 이용하고, 꾸미는 방법은 데코레이터를 사용.

 

IFormatter Interface를 이용하여 문장을 만들어냈다.

 

좀더 하면 마무리 되겠넹...

 

결과 쿼리는 음.. 콤마를 끝에 찍고,  앞에 찍는것도 조정이 가능하다.

 

주석 넣는 부분도 추가하려면 사전을 이용하는 방식으로 하면 될 것 같고.

'# 9) My Program(.NET)' 카테고리의 다른 글

쿼리포맷터 III  (2) 2015.05.24
쿼리포맷터II  (0) 2015.05.05
Designer] 앞으로...  (0) 2013.07.10
디자이너] Xaml -> 디자인 -> Xaml  (0) 2013.07.04
디자이너] 추가 역변환  (0) 2013.07.03

 

 

 

 

버튼 Edit에 Masking!

 

  if (_edittype == ButtonEditEx_EditType.Tel)
            {
                Properties.Mask.EditMask = @"[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}";
                Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
                Properties.Mask.UseMaskAsDisplayFormat = true;
            }
            else if (_edittype == ButtonEditEx_EditType.Email)
            {
                Properties.Mask.EditMask = @"[a-zA-Z0-9.-]+@[a-zA-Z0-9-]+(\.[A-Za-z]{2,6}){1,2}";
                Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
                Properties.Mask.UseMaskAsDisplayFormat = true;
            }
            else if (_edittype == ButtonEditEx_EditType.Money)
            {
                Properties.Mask.EditMask = GetMoneyMasking();
                Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
                Properties.Mask.UseMaskAsDisplayFormat = true;
            }           

 

 private string GetMoneyMasking()
        {
            string editmask = "N0";
            if (Properties.MaxLength > 0)
            {
                string masking = "";
                for (int loop = 0; loop < Properties.MaxLength; loop++)
                {
                    masking = "#" + masking;
                    if (loop % 3 == 2)
                    {
                        masking = "," + masking;
                    }
                }
                editmask = masking;
            }
            return editmask;
        }

 

Number의 자리수 제한은 maxlength 로 제한 할때 #,###,###으로 표기하기 위해...

 

 

 

'# 4) .Net ( Vs 2010 ) > DevExpress' 카테고리의 다른 글

Grid  (0) 2015.01.25
TreeList  (0) 2015.01.25