MS SQL Server 2008을 사용 도중 기본키(Primary Key)에 Auto increment 옵션을 지정하는 법을 도통 몰라서 한 참을 헤맸다.

처음엔 insert into table values((select count(*) from table)+1, value ...)
와 같은 방식을 이용하려 했으나 이것이 심히 무식하고 대책없는 방법이라는 걸 깨닫고 외국 웹사이트를 검색하다가... 디자인 에디터로는 안되고 직접 쿼리를 때리라는 글을 보았다.

다음과 같은 방식을 선택하면 된다.


CREATE TABLE [dbo].[test] (
 idx int IDENTITY(1,1) PRIMARY KEY CLUSTERED,
 value int NOT NULL
)

찾고 나서

만든 테이블 다 지우고 다시 만들고 하느라 쌩쑈를 했더니 눈물이...
Posted by TY
,
위 에러는 Jackson json 라이브러리와 java쪽을 연동했을 때 나오는 에러이다.

위 에러가 나는 이유는 흔한 인터넷 검색(stackoverflow  이나 springform 같은 사이트들)에서는 다음과 같이
이야기한다.

1. 네가 멤버 변수의 이름을 잘못 적었어(userIdx인데 usreIdx로 적었다던가, model이나 json보내는 쪽 둘다를
  확인하라 한다)
2.  Getter와 Setter가 제대로 있긴 한거야? 
3. 클래스의 이름이 틀린거 아냐? 대소문자를 제대로 구별하라고!

그러나 나는 위와 같은 사실들을 검색하기 정네 모두 확인을 하고 뻐킹 인터넷을 외칠 수 밖에 없었다.

그리고 오늘 하다가 아는 고수분께 질문을 했다.

위의 3가지 통과의례를 거치고, 내 json부분 처리랑 json data를 보여드렸더니 하시는 말씀이...

"Java 네이밍 규칙에 맞지 않아. Jackson json도 Java 네이밍 규칙을 따를테니 한 번 수정해봐." 라고 하셨다.

약간의 착오로  DB를 생성할 때 첫 글자를 모두 대문자로 해서 통일성을 위해 DB와 연동되는 Model부분도
모두 대문자로 작성하고 그와 연동되는 부분도 모두 대문자로 작성했다.

그랬다! 변수는 첫 글자를 대문자로 쓰지 말고 소문자로 써야했던 것이다.

이 부분을 수정했더니 잘 되더라.

어머 신기해라... 
Posted by TY
,
윈도우나, 리눅스나 내가 개발하던 환경에서는 늘상 아이콘을 두 개를 누르면 이클립스는 2개가 떠서 나를 화나게 한 적이 많았다.

음... 하지만 맥은 2개가 되지 않아서 나를 화나게 했다. 그래서 뭐 이것 저것 해보았지만, 안되는 것에 대해 고민을 하다가.....

결국 또 구글의 도움을 받았다.

1. 이클립스 1개를 켜놓고 터미널을 열자. 
2. 터미널에서 이클립스가 깔린 폴더를 찾자(보통은 Applicatoins/eclipse 라는데 나는 /eclipse에 깔았었다)
3. open -n Eclipse.app 를 입력!
하면 2개가 켜진다.

내가 왜 이런 불우한 삽질을 했을까. 문득 슬퍼진다.

그리고 맥용 Eclipse에서는 트리 보는게 Flat이건 Hierachy이건 나의 말을 듣지 않는 것 같다.

몹시 슬프다... 
Posted by TY
,
 고백하자면 저는 10년 5월까지는 어플리케이션을 개발하기 위해서는 win32api를 쓰던 사람입니다. 그러나 군에서 뭔가 거대한 어플리케이션을 만들어야 하는데 몹시 노가다스러운 프로그램이었습니다. 개발 계획서를 살펴보니, '아.. 이걸 다이얼로그 박스로 하면 나는 죽겠구나..' 라는 생각이 들었습니다. 그래서 결국 저는 군대에서 꺼려하던 2가지를 모두 하게 되었습니다. 하나는 웹이고, 하나는 닷넷이지요. 둘 다 하게 되었습니다. 하하.

 저는 내부적으로 컨트롤 할 수 있는 상황을 좋아합니다. win32api를 좋아했던 이유도 제 맘대로 지지고 볶고 할 수 있었기 때문인데요. 하지만 사람이 편리함 앞에서는 한낮 미물이 되나 봅니다. 써보니 참 편하더군요 닷넷.. 으음..

 어쨌든 이번에 일이 있어서 PictureBox로 동적으로 무언가를 생성해야 하는 일이 있었습니다. 제가 군에서 만들었던 어플리케이션과 제가 만든 웹 페이지들은 특별한 요구가 없는 이상 '그림'이 없습니다. 저는 그림을 싫어하니까요. 못 그리는 데다가 예쁘게 꾸밀 미적 감각도 없습니다. 그러니까 안 넣어요. 저는 단색 조합이 좋으며, 넣어봤자 파스텔톤의 연녹색 같은 것 밖에 색을 넣지 않습니다. 그 외에는 저에겐 너무 무리한 요구입니다. 어려워요.

 어쨌든 제가 만들고 있는 건 현재 '초 허접' 맵 에디터입니다. 요 근래 독감도 들고, 악재가 겹쳐서 진도가 몹시 안 나가지만 그래도 하루에 순수 집중하는 시간으로는 3~4시간, 뻘 행위를 하면서 이걸 하고 있다는 위안으로 웹 서핑과 메신저를 하는 시간을 포함하면 6~7시간은 이걸 잡고 있는 것 같습니다. 

 저는 배치해놓은 컨트롤을 이용해서 지지고 볶는 건 자신 있습니다. 즉 노가다는 자신이 있습니다! 그러나 동적으로 그림을 넣어야 한다는 사실은 저를 몹시 힘들게 했습니다. 아오 힘들어. 하지만 뭐 동적으로 다른 컨트롤이야 몇 개 추가해 봤으니까 이런 일은 쉽지 않을까 싶더군요.

 우선 제가 만들고 있는 맵에디터(라고 부르기 부끄러운)의 스크린 샷입니다.


 초.. 허접한 그림의 퀄리티. 그러나 저는 분명히 저것을 그리기 위해 타블렛과 2시간을 씨름을 했습니다. 그 거대하고 비싼 타블렛으로 저런 그림을 그리려니 참으로 타블렛에게 미안한 생각 뿐이었습니다. 그 타블렛은 제 모니터 만했지요...

 음.. 이미지를 저렇게 이미지 위에 동적으로 할당을 해야 하는데, 저는 PictureBox 컨트롤을 이용해서 했습니다. 

우선 가장 큰 문제는 이것이었습니다. 

"이미지를 어떻게 동적으로 추가하지?"

이 부분에 대해서는 저번글에도 언급되는 실명으로 부르지 않아 부끄러운 다람군(-_-;) 이 도움을 주었습니다. 저는 win32api를 하듯 그냥 dc를 얻어서 뿌리면 되겠지! 라고 생각했지만 땡이더군요. 

일단 그래서 무작정 개체를 생성해서 띄워보기로 했습니다.

아. 안나와요. 뭐야 이거. -_-

그랬더니 다람군이 this.Controls.Add 라는 메서드를 호출해 보라고 하더군요. 하지만 역시 안나와요.

그래서 '안나와!'라고 했더니, 컨트롤 위에 추가할 꺼면 컨트롤 마다 저 메서드가 있을 것이라며 저에게 알려주었습니다.

오오 되더군요.

그래서 저의 해결 방식은 다음과 같았습니다. 

syntaxHighlighter를 지우고 이건 Windows Live Writer로 쓰는 것도 아니니 소스가 안 예쁜건 양해를 바랍니다 - -;

우선.... 그려야 할 것 들을 List 를 이용해 등록을 합니다. 맵 에디터다 보니까 화면에 표현을 할지 말지도 결정을 해야하고, 그 화면에 나올 것들만 출력해야 하므로 우선 리스트로 정리를 합니다.

PictureBox p = new PictureBox();
                    p.Left = el.m_coordinate.X - m_mapCoordinate.X - imageSize.X / 2;
                    p.Top = el.m_coordinate.Y - m_mapCoordinate.Y - imageSize.Y / 2;
                    p.Width = imageSize.X;
                    p.Height = imageSize.Y;

                    p.Image = image;
                    p.Visible = true;

                    p.BackColor = Color.Transparent;

                    p.Click += new EventHandler(clickObject);

                    p.Show();

                    m_drawingList.Add(p);

그리고 나서 아래 리스트에서 컨트롤에 등록을 해 줍니다.

foreach (PictureBox p in m_drawingList)
            {
                pictureBox1_map.Controls.Add(p);
            }


그렇게 했더니 위에와 같이 출력이 가능하게 되었습니다. 올레!

뭐 사실 블로그에 적는 이유는 나중에 똑같은 삽질을 할 때 찾아보자는 의도이지만, 뭐 어쨌든 그렇습니다.

저렇게 해서 해결을 봤습니다.

* 음.... 틱톡이란 주제로 글을 썼더니 투데이가 갑자기 급상승하는군요... ( - -); 다음부터 좀 이런 주제로 글을 써 볼까 생각 중입니다. 그러나 저의 게으름엔 자비가 없죠.

 
Posted by TY
,

안녕하세요?^^

간만에 프로그램 관련된 글을 쓰는 것 같습니다. 으음.... 오는 사람은 없지만 그래도..


아르바이트를 좀 하고 있는데, MS-SQL과 JSP라는 알 수 없는 조합을 가진 사이트를 살~짝 손대는 일입니다. 뭐 그렇게 어렵거나 중한 임무가 아니라서 설렁설렁 하고 있지요.. :)


제가 DBMS Client는 거의 MySQL GUI TOOLS 5.x 만 사용했습니다. 물론 MS-SQL SMSE도 많이 썼지만, 그래도 DBMS에 직접 관계한 것 보다는 ODBC연결해서 프로그램에서 쿼리를 쏜게 더 많았나봅니다.

하지만 이런 충격적인 사실이 있더군요..

SELECT * FROM A WHERE B LIKE "%HELLO%"

이거 안되는 쿼리입니다... 왤까요?

SELECT * FROM A WHERE B LIKE '%HELLO%'

MS-SQL 클라이언트에서는 작은따옴표(',single quote)만 된다는 겁니다. 이럴수가! 큰따옴표(", double quote)로 묶으면, 대괄호([])로 처리가 됩니다. 그러면서 에러가 나더군요..

워낙 프로그래밍할때 '무조건 큰따옴표로!'라는 그게 있는지라, 저는 거의 웹 언어 딴에서 출력 문장 내에서 따옴표를 출력해야 할 때도 \" 로 처리했지 '로 처리한 적은 없어서요.. 버릇처럼 큰따옴표로 처리했기 때문에, 이해할 수 없는 현상이었습니다. ㅎㅎ

저만 이럴 수도 있겠지만, 혹시 저 같은 분이 계실까봐. ^^

결론은..

Microsoft SQL Server Management Studio Expess 2005 에서는 LIKE의 문장을 묶을 때 큰따옴표를 쓰면 안된다!

입니다.^^
Posted by TY
,

제가 최근에 준비하고 있는 프로젝트에 대한 알파 버전을 작성하고 있을 때였습니다

제가 하고 있는 일이 자바스크립트에서 리스너를 이용해서 객체를 옮기는 기능이 있는데요.

현재 좌표를 얻어오려고 하는데 되지 않더라구요.

제가 원래 썼던 구문은 다음과 같습니다.

<style type="text/css">
	#box1
	{
		border:1px solid #FFFFFF;
		background-color:#333333;

		width:60px;
		height:30px;

		position:absolute;
		left:100px;
		top:100px;
	}
	#box2
	{
		border:1px solid #FFFFFF;
		background-color:#666666;

		width:60px;
		height:30px;

		position:absolute;
		left:100px;
		top:100px;
	}
	#box3
	{
		border:1px solid #FFFFFF;
		background-color:#999999;

		width:60px;
		height:30px;

		position:absolute;
		left:100px;
		top:100px;
	}
	#box4
	{
		border:1px solid #FFFFFF;
		background-color:#BBBBBB;

		width:60px;
		height:30px;

		position:absolute;
		left:100px;
		top:100px;
	}
</style>

<script type="text/javascript">
var arDiv = document.getElementsByTagName("div");

for(i=0;i<arDiv.length;i++)
{
	var obj = arDiv[i];

	alert(i+" : "+obj.style.left+","+obj.style.top);
}
</script>

<body>
	<div id="box1"></div>
	<div id="box2"></div>
	<div id="box3"></div>
	<div id="box4"></div>
</body>




그런데 이게 제 생각에는

1: 100,100
2 : 200,200
3 : 300,300
4 : 400,400

나와야 하는게 맞는데 ..  결과값이

1 : ,
2 : ,
3 : ,
4 : ,

이렇게 4개가 나오더라구요. 그래서 이상하다 싶었는데 제가 갖고 있는 자바스크립트 사전을 찾아보고 했는데 도통 방법이 없다고 하더라구요.  그래서 제가 언제나 웹 프로그래밍에서 이와 같은 벽에 부딪힐 때 뒤져보는 레퍼런스인 JavaScript & DHTML Cookbook (2/E) 를 뒤져서 찾아봤습니다.(영어라서 저도 해석이 되는 부분은 직접적으로 도움을 받지만해석이 안되는 부분은 힌트만 얻고 구글링을 하는 편입니다)

그랬더니 currentStyle이라는 멤버 객체가 있다는 식으로 적혀있는겁니다. 그래서 style으로 접근하는 부분을 currentStyle로 접근하니 잘 접근이 되었습니다.


뭐 그 후 이리저리 알아본 결과, 중요한 것이 2가지가 있는 것 같습니다.

1. 자바스크립트에서 직접 스타일로 접근하면 인라인(inline)으로 부여한 속성은 표기가 되는데 CSS를 통해서 부여된 속성은 style 속성에서 얻어올 수 없고, currentStyle 속성에서 얻어와야된다는 것이었습니다. :)

2. 만약 left, top 등의 값을 넣지 않을 경우 currentStyle에서 'auto'라고 return되는 경우가 있다고 합니다.
Posted by TY
,


 며칠 전에 디버깅을 하는데, 자꾸 INSERT 구분에서 에러가 난다는 겁니다. 엑서스 상에서 직접 쿼리를 실행해보면 되고, ODBC를 통해서 사용하면 INSERT INTO 구문 에러라며 Exception이 자꾸 발생하는데...
 
뭐 행이 다발로 있는 것도 아닌데, INSERT 구문 같이 사소한 구문이 자꾸 안되니까 이거 어이도 없고, 화도 나고 하더군요.그래서 어떻게 할까 하다가 엑서스에서 실행을 해본 후 쿼리 디자인을 다시 살펴보기로 했습니다. 뭐가 바뀌었는지 처음에는 못 깨달았는데, 자세히 보니 이런게 다르더군요.

예를 들어서,

원래 쿼리 ) INSERT INTO t_table(file,attrib,action) VALUES("0",707,3)
엑서스 쿼리) INSERT INTO t_table(file,attrib,[action]) VALUES("0",707,3)

이렇게 되는거에요.

그래서 []는 왜 붙지? 라고 심각히 고민을 했어요.

아마도 예약어겠지, 라고 싶었는데 mdb 예약어는 아닌거 같더라구요.

이상하다 싶었는데, 인터넷을 할 수 있게 된 짬을 이용해서 찾아보니 Jet 4.0 예약어더군요.

Jet 4.0 예약어는 아래를 참고해보세요. [MSDN]
http://support.microsoft.com/kb/248738/ko

이건 Access 2002 이상에서의 예약어에요. [MSDN]
http://support.microsoft.com/kb/286335/ko

원래대로라면 예약어를 피해서 적는게 맞지만, 그래도 어쩔 수 없을 경우에는 []를 붙여주면 되는 것 같네요.


Posted by TY
,