요렇게 하니 잘되는군요~!보고 따라해봅시다~아래와같이!~

 

1. http://opencv.willowgarage.com/wiki/Welcome  여기로 가서   
  윈도우용 OpenCV 2.3.1 버젼을 받는다.

2. 앞축을 풀어서 원하는 폴더에 저장한다. 나는C드라이브에 바로 풀었다. 
   앞축을 풀면 폴더명이 opencv인데, 나는 OpenCV2.3.1로 변경하였다.
   즉, C:\OpenCV2.3.1 이 저장된 디렉토리이다. 

3. C:\OpenCV2.3.1\build\x86\vc10\bin 에 있는 파일들을    
    C:\Windows\System32폴더에 카피해 준다.  
   그리고 64비트 컴퓨터라면,  C:\Windows\SysWOW64 여기에도 똑같이
   카피해 준다. 이거 안하면, 컴파일은 되어도 실행시키면
   opencv_highgui231d.lib라이브러리 없다고,
   프로그램 다시 설치하라고 경고뜬다. 이거 몰라서 이틀동안 삽질했다.

여기까지 하면 일단 컴퓨터 환경은 설정 된거임. 다음으로 Visual Studio 설정을 해야 함.

4. 일단 프로젝트를 하나 만든다. 콘솔 기반으로...

5. 아래 그림과 같이 프로젝트 프로퍼트에서 VC++ Directories 에서 설정을 한
    다.


   우선 Include Directories에서 
         C:\OpenCV2.3.1\build\include 
       C:\OpenCV2.3.1\include\opencv
       C:\OpenCV2.3.1\include\opencv2

 이렇게 추가해 준다. 디렉토리 경로는 본인이 설치한 경로를 그대로 따라간다. 

6. 다음으로 위의 그림에서 Library Directories를 추가해 준다. 
     C:\OpenCV2.3.1\build\x86\vc10\lib
   
상황에 따라서는 아래의 디렉토리를 링크할 수도 있다.  

     C:\OpenCV2.3.1\build\x86\vc10\staticlib
   주의할 점은, 위의 두개의 라이브러리 디렉토리를 동시에 링크하지 말것~!  
    동시에 링크하면 폭풍 에러 메세지를 보게 될 것이다. ㅜ.ㅜ
    이것땜에 또 한참 고생했다. 

 

 위 그림처럼 두개 동시에 링크걸면 폭풍에러 걸림 
 
C:\OpenCV2.3.1\build\x86\vc10\lib 하나만 링크 걸 것~!!!

7. 다음으로 프로퍼티 창에서 Linker -> Input 으로 들어간 후에
    Additional Dependencies 를 설정한다. 

  위와 같은 창이 뜨면, 다음 라이브러리를 추가한다.
opencv_calib3d231d.lib
opencv_contrib231d.lib
opencv_core231d.lib
opencv_features2d231d.lib
opencv_flann231d.lib
opencv_gpu231d.lib
opencv_haartraining_engined.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib
opencv_legacy231d.lib
opencv_ml231d.lib
opencv_objdetect231d.lib
opencv_ts231d.lib
opencv_video231d.lib  
 
다음으로 설정을 저장하면 이것으로 끝이다.  
아래 코드는 바로 테스트하기 위한 테스트 코드이다. 컴퓨터에 캠이 연결되어 있어야 한다.  
 
#include "stdafx.h"
#include <highgui.h>

int _tmain(int argc, _TCHAR* argv[])
{

int c;
IplImage* img;
CvCapture* capture = cvCaptureFromCAM(1);

cvNamedWindow("mainWin",CV_WINDOW_AUTOSIZE);

while(1)
{
img = cvQueryFrame(capture);
cvShowImage("mainWin",img);
c = cvWaitKey(10);
if(c == 27)
break;
}

cvReleaseCapture(&capture);
cvDestroyAllWindows();

return 0;
}
 
위에 코드가 안되면
cvCaptureFromCAM() 함수 파라메터를 -1, 0, 1, 2 로 바꾸어 가면서 실행을 시켜볼 것~! 



참고 : 
http://siddhantahuja.wordpress.com/2011/07/18/getting-started-with-opencv-2-3-in-microsoft-visual-studio-2010-in-windows-7-64-bit/
http://blog.naver.com/PostList.nhn?blogId=moorim21&categoryNo=36&currentPage=2
http://cafe.naver.com/opencv 


출처 : http://brittledia.tistory.com/60

'프로그래밍 기초 > 영상처리' 카테고리의 다른 글

IplImage 구조체  (0) 2011.10.29
Open CV 초보자가 하는 실수들 모음..  (0) 2011.10.26
카메라 입력받기  (0) 2011.10.26
Open CV 함수정리  (0) 2011.10.25
Open CV 란?  (0) 2011.10.25
Posted by 아몰라


우선 영상처리를 Open CV라는 라이브러리를 이용해서 하는걸로 결정하였다...

그래서 오픈cv 카페에 가입도 해놓았다.


Open CV란?? 이렇단다!

 OpenCV(Open Source Computer Vision) 인텔에서 만든 강력한 영상처리 라이브러리입니다.

- 기초 영상처리서부터 고급 수준의 영상처리 까지 상당한 량의 알고리즘들이 함수로 구현되어 있습니다.

- Binarization, Noise, Motion Detect, Edge Detect, Pattern Recognition, Hidden Markov Model 등등

- 오픈소스로서 스펙만 맞추면 자신의 알고리즘도 라이브러리에 등록 시킬 수 있습니다.

- 인텔의 OpenCV 사이트 http://www.intel.com/technology/computing/opencv/index.htm



출처 - www.opencv.co.kr

'프로그래밍 기초 > 영상처리' 카테고리의 다른 글

IplImage 구조체  (0) 2011.10.29
Open CV 초보자가 하는 실수들 모음..  (0) 2011.10.26
카메라 입력받기  (0) 2011.10.26
Open CV 함수정리  (0) 2011.10.25
Open CV 설치 및 셋팅 (Visual 2010)  (0) 2011.10.25
Posted by 아몰라

업체와의 의사소통이 잘 안되었고....우리가 너무 생각없던 부분이 많았다...

그래서 방금 다시 정리해서 업체에 메일을 보내주었다 ㅠㅠ 아 피곤해~

대충 정리하면 아래와 같다. 
 

1. 케이스

플라스틱케이스에 금형작업을해서 케이스를 만들면 800만원에 1개월이 걸린다고 한다...하...

금속케이스를 한다고 해도 누가 1개만 만들어 주기 어려워서 35만원 선....그래서 결국 업체에 부탁을...가장 싼

것으로 좀 부탁드린다고 하였다...그냥 바람만 막으면 되지 -_-....
 
 
2. 전력

나는 건전지를 생각했었다...하지만 생각해보니 USB로 데이터를 전송할껀데 왜 USB를 정보전송의 용도로만

생각하고 있었을까...? 바로 컴퓨터에서 전력을 가져와도 될 것을....

하지만 이런 생각도 했었다...건전지를 사용하게 된 이유가 나중에 무선으로 가능하게 될 시 자체적으로

전력을 해결해야 되기 때문이다...하지만 그게 취소되고 유선으로 된 마당에...그럴 필요없네???생각 못했네

ㅋㅋㅋ

사실..처음에 블루투스 단거리무선통신 기술을 이용하여 서버를 스마트폰으로 할려고 하였였다...하지만
거기에  쓸 블루투스 수신기가 너무나도 비싸기에 감당할 수 없었다...그리고 다른 이유도 있었는데 까먹었다      -_-...기억이 안난다.......

그때그때 메모를 안해놓으니 그런것도 까먹네 ㅋㅋㅋㅋㅋ

결론은! 노트북 전력 이용!
 

3. 통신
 
통신은 단방향통신으로 할 것이다....리모콘(보드)에서 신호를 컴퓨터서버 쪽으로 쏴주기만 할 것이다. 그리고

속도는 0.1초에 한번씩 1초에 10번 받을 생각이다. 

 

4. 카메라
 
 
이 카메라를 그냥 보드에서 빼기로 결정하였다.

일단 이것도 돈 문제가 크다 (?)....비싸다 조그마한 캠카메라...동영상화질도 좋아야되는데 너무 비싸다...
 
우선 초음파에서 오는 신호만 잘 받아서 그것만 알고리즘 잘 짜면 괜찮을 것 같다는 생각이 든다. 시나리오

잘 짜서 하면....
 
이 카메라 영상처리부분은 아마도 따로 추가적으로 카메라는 사용하게 될 것 같다...나중에 미래에 이렇게 하겠

다는걸 보여주는 정도???어쨋든 영상처리 공부는 해야되네~ㅋㅋ 


 
5. 버튼
 
버튼은 당연히 대상자가 시각장애우기에 점자로 할 것이다.
 
내가 알아본 바로는 아래와 같다! 우리 리모콘에 장착할 점자다... 
 
총5개
 
순서대로 이렇게 된다. 

Up

Down 

전원

사람

기능

 

 

 
순서대로 Up 부터 기능까지 
 
그런데 이걸 케이스에 어떻게 새겨야되나 걱정된다.

업체에 말하면 또 엄청 가격 많이 든다고 하는건 아닐까 걱정된다...
 
그래서 생각한게...스티커 같은거 괜찮을 것 같다....인터넷 찾아보니 특수제작 가능한 스티커있던데...
 
 특수제작 가능한 스티커 같은걸 주문해서 붙이면 어떨까 싶다...
 
 
Posted by 아몰라

계속 업체와의 연락을 하면서 얘기중인 상황이다...하지만 너무 모르는 분야라

생각 못했던 부분에서 계속 지적당하고 고민을 하게 만든다.






1. 전력문제

하드웨어인데 전력문제를 방관했었다...업체에서 어떻게 할껀지 물어봐서

휴대성있는것이기 때문에 건전지 2개정도 넣으면 되지않겠냐고 했는데

생각해보니....초음파에서 받은 데이터를 컴퓨터에는 USB TO RS-232C 방식으로

현재의 거리를 전송해 주게 되어있다. 그렇다는것은 노트북 전력을 쓰면 된다는 것이다.

내 생각은 너무 터무니없지만 나중에 블루투스로 가능하다면 추가적으로 할 수 있지 않을까 했다..그때는 내부에서 전력

을 처리해야되니...(그러나 블루투스를 하게된다면 보드 전체 설계가 바뀌는거 아닌가???잘모르겠다 아마도 안될 것 같

다...새로 만들지 않은 이상...잘모르겠다 보드 쪽은...너무하드웨어야..)



2. 외관 케이스 문제

이건은 사실 별로 신경안썼다...케이스 재질이 어쩌고 저쩌고는 중요하지않다고 생각되어서 그냥 대충 생각하고

넘어갔던것 같다. 그냥 제일 싸게 해주시겠지 라고...생각했던지라....돈이..ㅠ




3. 카메라문제

이것도 대충 아무 캠 달면 되겠지 하고 생각했다가 지적당했다...-_-

업체에서는 자동차후방감지 등에 쓰이는 NTSC방식으로 해서 할 껀지 웹캠으로 할껀지 물어보았다...

난 당연히 웹캠만 생각했지만 저런것도 있었다;;

일단 업체에서 말한 NTSC방식이 휴대성있게 할꺼면은 좋다고는 하였다..조사결과!

 근데 문제는 NTSC방식은 컴퓨터상에서 쓰는 영상방식하고 달라서 캡쳐보드를 설치해야된다.

고로 PCI 슬롯이 노트북에 있어야 한다? 하지만 내 노트북은 확장이 불가능하다...

결론적으로, 이 캡쳐보드를 설치못하면 이 방식으로는 하기 불가능.... 


웹캠은 초소형카메라를 찾아보았지만...가격이 너무 비싸다...휴 미치겠네 

보통...다 15만원 이상하는거같다...

그냥 웹캠을 달자니 크기가 너무 커서 리모콘에 어떻게 달아야되나 고민도되고....그리고

웹캠을 쓸시에는  초음파센서에서 받은 데이터를 연결하는 USB포트 하나랑 웹캠 USB포트 해서 2개가 필요하다...

여기서 궁금한게 하나다 포트2개를 노트북에 연결해서 하면 동시에 데이터가 들어 올 수 있나????같은 화면이???

그리고 만약 하나의 USB선으로 들어오게 할려고 한다면....USB허브를 보드에 설치해서 노트북 USB에 선하나만 연결해

야 한다.




업체에서 요렇게 글을 보내줬다......-_-

지금까지 저희에게 어떤 것을 만들겠다, 어떻게 만들겠다, 어떤 모양으로 하겠다, 이런 내용외에
규격, 치수, 사양, 전압, 속도 이런 부분에 대해 이야기 한적이 있었나요?



진짜 내가 컴공과인지 전자과인지 모르겠다~아~~짜증나 ㅋㅋㅋㅋ

프로젝트 주제를 이렇게 정한 내 잘못이지...아오........

맨날 하드웨어 조사만 하고있구나 진짜~



리모콘 데모


하지만 이렇게 안나올듯....카메라 어찌하냐
 

Posted by 아몰라

너무나도 모르는게 많았기에 발로 많이 뛰었다...

사실 나는 소프트웨어로만 프로젝트를 하고싶었지만

교수님께서도 하드웨어쪽 겸하는 권하시고 전체적인 분위기가

하드웨어를 빼면 안되는 분위기로 가서 나도 함께 휩쓸렸다....-_-

지금까지는...정말 엄청 고생이다....정작 취업은 소프트웨어쪽으로 하게 될 것 같은데

맨날 하드웨어 공부랑 조사만 하는거 같고...미칠노릇이다! 어쨋든~

지금까지 발로 뛴 흔적을 남기겠다~!


1. 업체와의 미팅

우선 리모콘을 만들기 위해서는 업체를 알아봐야됐었다..

우리가 원하는대로 우리가 회로를 설계하고 그것을 제작 할수는 없지않은가?? 나는 컴공....-_-ㅎㅎ

열심히 알아보던 끝에 겨우겨우 도움을 주시겠다는 회사를 만났다.

사장님과 이사님이 같이 오셨는데...정말 많은 얘기를 해주셨다.

프로젝트관련해서 많은 얘기를 나누었다.

가장 부족했던 점이...대상자에 대한 조사 부족과 이해 부족 이었다.

그래서 이날 이후로 체험과 봉사활동등을 생각하게 되었다.

그리고 한가지 더 좋은 말씀 해주셨던게....목표와 꿈에대한 이야기!

목표와 꿈에 다른점이 무엇인가??? 기가막힌 멘트였어 공감공감 ㅋㅋㅋ






2. 그 후 우리는 직접 안대를 끼고 학교를 체험해 보았다...정말 신세계다

   생각 하는거랑 직접 해보는거랑 많이 달랐다...굉장히 무서웠다...특히 차에대한 공포?




 

3. 그 후에 시각장애인협회를 찾아갔고 직접 장애우분을 만날수 있었다...잘 몰랐는데 다 안보이시는게 아니라...

   시각장애우분들도 등급이 굉장히 많다...등급에따라 눈이 많이 보이고 덜 보이고의 차이가 있다.

   얘기들었던 것 중에 지팡이로 감지 하기 어려운 작은 물체를 감지 할 수 있으면 좋겠다고 하셨다...그리고

   제일 휴대성 문제! 처음에 우리는 스마트폰과 리모콘을 통신하면 좋겠다고 생각했지만...이것은 조사결과...불가능하

다고 결론이 났다...통신할수 있게 할려면 엄청 고가이기도 하고 무슨 문제 였는데..지금 기억이 안난다 -_-

결국 어쩔수 없이 노트북을 가방에 넣어서 매고 리모콘을 들고 다닐수 밖에 없게 되었다....하지만! 추후에.....

가능하면 스마트폰을 이용한다거나 휴대성있게 해보고싶다...






4. 마지막으로 시각장애우분들에게 연중 가장 큰 행사인 흰 지팡이 행사가 있다는걸 알게 되어서

    조장과 나 둘이서 가서 봉사활동을 하면서 도와드리면서...이해해볼려는 시간을 가졌다...

    은근 피곤했지만 그래도 뿌듯했다!




Posted by 아몰라


이제 티스토리에 글을 쓴지 1년하고도 몇개월...

프로그래밍을 접고 딴 것을 한지 1년즈음..........

프로젝트를 시작한지는 한달이 넘었는데 이제 드디어 너무 글을 쓰게 되었네..

학교에서 졸업하기 전에 필요한 필수과정인 종합설계~!

팀원은 나 포함해서 5명이 됐지만...2명은 취업관계로 사실상...참여가 힘들고...3명이서

하게되었다..ㅋㅋㅋㅋㅋ

거기에다가~ 난 프로그래밍이 기억이 안날뿐이고~~ㅋㅋㅋ

어쨋든 우여곡절 끝에 주제는 정해졌다!

바로! 위에 제목에 있는거~!

그리고 어느정도 세부적인 스토리도 설계가 되었다.

간략히말하면 센서와 카메라를 이용해서 사물과의 거리와 작은물체 유/무를 감지하여 장애우분에게 음성정보로 알려준

다.

추가적으로, 영상처리를 이용하여 사람 유/무 등 을 알려줄 수 있다.

지금까지 알아보고 조사하고 생각해본 바로는~~매우 어렵다

리모콘을 이용하여 휴대성있게 한건 좋았지만 그럼으로인해 영상처리가 너무너무 어려워졌다.

Open CV를 이용할 생각이지만 정작 경험해본적도 없고 더군다나 프로그래밍도 다시 익히면서 해야된다....ㅠ


개념도는 아래와 같다...

대략 이렇다!

리모콘에 초음파센서랑 카메라를 달아서 거기서 오는 신호를 서버 컴퓨터에서 처리하여 음성정보로 알려준다...

모든것은 다 유선으로 하게 되었다. 어쩔수 없다...블루투스같은걸로 전달하기에는 데이터용량도 크고 좋은 블루투스이

어폰이나 수신기를 사기에는 너무 고가다....돈 없음~패스~









Posted by 아몰라

 행을 복사하기 위해서는

Select 와 Insert 문을 합쳐서 사용하면 된다.

예를 들어

insert into CROPS (Crop_Number ,Crop_Name, Mem_Num)
(select Crop_Number,Crop_Name, Mem_Num  from CROPS where @CROP_NUMBER = Number)

이렇게 하면 되는데 서브쿼리로 들어가있는 Select에 보면 where 절이 있는데 이건 where 조건에 해당하는 행을 복사 하겠다는 것이다. 위와 같이 기본키만 다른 똑같은 행을 만들 수도있고 특정 값만 변경시켜서 넣고 싶을때는

insert into CROPS (Crop_Number ,Crop_Name, Mem_Num)
(select Crop_Number,@NEW_CROP_NAME, @MEM_NUM  from CROPS where @CROP_NUMBER = Number)
이와 같이 @스칼라 변수에 어떠한 값을 넣은 후에 특정 열만 복사하는 방법도 있다.


그리고...
Insert into 에서 특정 열을 지정해주지 않으면 이런 오류가 날 수 있다.




아래 글은  http://dualist.tistory.com/159 여기서 퍼왔다.

테이블 A에 있는 ID열의 명시적 값은 열 목록이 상요되고 IDENTITY_INSERT 가 ON일 때만 지정할 수 있습니다.


이 메세지가 나오는 이유는 추측이지만 이런것 같다.

INSERT ... SELECT 사용 시 TABLE 명 뒤에 컬럼 정의를 안하면 발생하는 에러로 보인다.

따라서 INSERT ... SELECT 사용 시에는 반드시 컬럼명을 명시해줘야만 에러가 발생하지 않는다.


그리고 INSERT ... SELECT 하기 전에
SET IDENTITY_INSERT 테이블명 ON 또는 SET IDENTITY_INSERT 테이블명 OFF
적절히 사용해줘야만 문제 없이 입력될 것이다.


SET IDENTITY_INSERT 테이블명 ON 은 인덱스를 수동으로 입력 가능하게 하는 명령이고,

SET IDENTITY_INSERT 테이블명 OFF 은 인덱스를 자동으로 입력 가능하게 하는 명령이다.

'.NET > ADO.NET' 카테고리의 다른 글

내장 프로시저  (0) 2010.08.04
회원탈퇴시 모든정보 날리기  (0) 2010.07.26
다른컴퓨터로 DB 복사  (0) 2010.07.12
내장 프로시저(사용법)  (0) 2010.07.10
DB에 이미지 저장 / 로드 하기  (0) 2010.06.18
Posted by 아몰라
2010. 8. 4. 22:56

 

 

 

1.날짜 및 시간 함수

GETDATE

시스템 날짜 정보를 보여준다.

SELECT GETDATE()

DATEADD

원래 날짜에서 원하는 만큼의 날짜를 더하거나 빼준다.

SELECT GETDATE(), DATEADD(DAY, 3, GETDATE()) AS ‘3일후

DATEDIFF

기준이 되는 시간과의 시간차

SELECT DATEDIFF(DAY, GETDATE(),’2010-06-15’ 00:00:00.000’)

DATENAME

지정한 특정 날짜의 한 부분을 나타내는 문자열을 반환한다.

SELECT DATENAME(DAY, GETDATE()) AS’

DATEPART

날짜의 부분을 구해준다.

SELECT DATEPART(year, getdate())

year,month,day

날짜형 date값에서 각각 해당하는 날짜 값을 선택 출력해준다.

SELECT YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE())

GETUTCATE

국제 표준시를 보여준다.

SELECT GETDATE() AS’현재시간’, GETUTCDATE() AS ‘UTC시간

 

2.수치연산 함수

ABS

수의 절대값을 반환해준다.

ABS(-1), ABS(0.1), ABS(4)

CEILING,FLOOR

최소 정수와 최대 정수를 구해준다.

SELECT CEILING($123.45) SELECT FLOOR(123.45)

ROUND

자리수를 반올림할 때 사용한다.

SELECT ROUND(167.77, 1)

SIGN

양수, 0, 음수 부호를 결정할 때 사용된다. 양수=1, 음수=-1, 0=0을 반환

SELECT SIGN(-7), SIGN(7), SIGN(0)

SIN,COS,TAN,COT

삼각함수에서 사용되는 함수.

SELECT SIN(45.00)

RAND

난수를 발생 시키는 함수

SELECT RAND()

SQUARE,SQRT

제곱값 제곱근을 구해주는 함수

SELECT SQUARE(11)    SELECT SQRT(121)

 

 

 

 

 

 

3.집계 함수

SUM

합계를 구해주는 함수

SELECT SUM(sal) FROM employer

AVG

평균을 구해주는 함수

SELECT AVG(sal) FROM employer

MAX, MIN

최대값과 최소값을 구해주는 함수

SELECT MAX(sal) FROM employer

COUNT

그룹의 항목 수를 반환하는 함수

SELECT COUNT(DISTINCT TYPE), COUNT(*) FROM TITLES

GROUPING

해당 인수로 쓰인 값이 ROLLUP이나 CUBE연산사용 유무를 반환하는 함수

SELECT PUB_ID, GROUPING(PUB_ID) FROM TITLES GROUP BY PUBID WITH ROLLUP

STDEV

통계에서 표준편차를 구할 때 사용

SELECT STDEV(SAL) FROM EMPLOYER

 

4.문자열 함수

LEFT, RIGHT,SUBSTRING

왼쪽, 오른쪽, 시작점에서의 길이만큼의 문자를 구해준다.

DECLARE @STR VARCHAR(50)

SET @STR = ‘YOU ARE BITSTU’

SELECT LEFT(@STR,3), RIGHT(@STR,3), SUBSTRING(@STR,3,4)

LOWER, UPPER

대소문자 변경 함수

SELECT LOWER(‘Hello Man’) SELECT UPPER(‘Hello Man’)

ASCII, CHAR

해당 문자의 ASCII숫자값을 보여주고 ASCII 문자 값을 보여준다.

SELECT ASCII(‘A’) SELECT CHAR(65)

CHARINDEX

특정한 문자열이 시작되는 시점의 숫자를 반환해준다.

SELECT CHARINDEX(‘ARE’, ‘YOU ARE BITSTU’)

REPLACE

일정한 문자열 부분을 다른 문자열로 치환

SELECT REPLACE(‘우리는 선문대학생’,’선문대학’,’비트’)

LEN,DATELENGTH

문자열 길이를 반환

SELECT LEN(‘SUNMOON’)   SELECT DATELENGTH(‘SUNMOON’)

REVERSE

문자열을 역순으로 출력

SELECT REVERSE(‘SUNMOON’)

 

 

 

 

 

5.구성함수

@@connections

연결 또는 연결을 시도한 횟수

Select @@connections

@@detefirst

매주 지정된 첫째 날을 나타내는 요일관련 숫자 값

Select @@detefirst

@@language

사용언어

Select @@language

@@max_connections

최대 동시 연결자수

Select @@max_connections

@@textsize

select문이 반환하는 text 데이터의 최대길이를 바이트단위로 지정

Select @@textsize

@@options

SET옵션에 대한 정보들

Select @@options

@@spid

사용자 프로세스의 서버 프로세스 식별자

Select @@spid

 

6.메타 데이터 함수

Col_length

컬럼 길이

Col_name

컬럼 이름

db_id, db_name

DB식별자(ID),  DB이름

file_id, file_name

파일 식별자(ID), 파일 이름

fileproperty

파일 속성 정보

object_id, object_name

DB개체의 식별자(ID), DB개체 이름

@@procid

저장프로시저의 식별자(ID)

 

7.보안 함수

is_member

현재 사용자가 NT그룹이나 SQL서버 사용자인지 확인

suser_id

사용자의 로그인 ID

suser_name

사용자의 로그인 ID이름

suser_sname

사용자의 보안ID에 대한 ID이름

user_id, user_name

DB사용자 ID, 이름

fn_trace_geteventinfo

추적중인 이벤트에 대한 정보

has_dbaccess

사용자가 DB에 접근할 수 있는지 정보

 

8.시스템 함수

app_name

현재 세션의 응용프로그램 이름

case

조건문에서 하나의 경우를 선택적으로 반환

cast, convert

데이터 형식을 명시적으로 변경

cast(int as varchar(5))     convert(varchar(5), int)

current_user

현재 사용자

@@error

에러가 발생했을 때 에러번호를 보여준다.

@@identity

identity열 마지막으로 입력된 데이터의 identity값을

보여준다.

host_id, name

워크스테이션 ID, 이름

ullif

두식이 같으면 NULL반환

Fn_helpcollations

모든 데이터 정렬 목록

 

9.시스템 통계 함수

@@cpu_busy

cpu의 소비시간

@@idle

서버의 유효시간

@@pack_received

서버가 네트워크에서 읽은 입력 패킷 수

@@pack_sent

서버가 네트워크에 기록한 출력 패킷 수

@@timeticks

틱 당 mili-second

@@total_read

디스크 읽기 수

@@total_write

디스크 쓰기 수

 

 

 

 

 

 

 

 

 

 

 

 

 

저장 프로시저

 

저장 프로시저란 pre-compiled procedure, 즉 서버에 미리 컴파일 되어 있는 SQL 코드이다. 서버에 미리 컴파일 되어 있어 실행이 빠른 장점을 가진다.

 

à저장 프로시저는 데이터베이스에 의해 컴파일 된다. 일반 SQL문과는 다르게 저장 프로시저가 만들어질 때 최적화된 실행 계획을 세우고 저장함으로써 다시 실행될 때에는 재사용하게 된다.

 

 à데이터베이스를 안전하게 보호 할 수 있다. 클라이언트로 접근하게 되는 사용자에 대해서는 SQL사용시 저장 프로시저만을 사용하게 함으로써 클라이언트가 직접 데이터를 변경하는 것을 막을 수 있다.

 

 à클라이언트가 서버로 보낼 많은 SQL문을 서버에 저장하고 단순히 저장 프로시저의 이름과 매개변수만 보냄으로써 네트워크에 대한 부담을 줄일 수 있다.

 

 à출력 매개 변수를 사용해서 레코드와 함께 여러 값들을 반환할 수 있다.

 

 

<간단한 저장 프로시저 만들기>

1.

서버 탐색기를 통해서 새 저장 프로시저를 추가해 준다.

2.

저장 프로시저를 작성 후 저장해 준다.

3.

서버탐색기의 저장프로시저에서 작성한 프로시저를 실행한다.

4.

다음과 같이 저장프로시저를 사용하여 출력내용을 볼 수 있다

 


'.NET > ADO.NET' 카테고리의 다른 글

특정 행 복사하기  (0) 2010.08.06
회원탈퇴시 모든정보 날리기  (0) 2010.07.26
다른컴퓨터로 DB 복사  (0) 2010.07.12
내장 프로시저(사용법)  (0) 2010.07.10
DB에 이미지 저장 / 로드 하기  (0) 2010.06.18
Posted by 아몰라





회원테이블(회원번호) - 작물테이블, 다이어리테이블, 농사용어테이블

이렇게 크게 3개의 큰 테이블이 회원번호를 외래키로 사용하고있고

이 3개의 테이블은 외래키로 사용하는 회원번호와 다른 정보들을 합쳐서 기본키를  많은  다른 하위 테이블로 뿌려지고 있다.

그래서 회원탈퇴를 할 경우 관계를 생각해서 삭제해야되는데(관계를 맺었을 경우)

 만약 키를 가져다 쓰고있는 테이블보다 먼저 상위에 있는

테이블에서 삭제를 할 경우 관계로 인한 오류가난다.

그래서 하위테이블부터 삭제해 나가면서 상위까지 올라가야 한다.

프로시저 쿼리에는 회원번호 한개만 받았으므로 받은 회원번호 하나가지고 그와 연관된 모든 것들을 삭제하면된다.

예를 들어
delete DIARY_GROWING from DIARY where @MEM_NUM = DIARY.Mem_Num and DIARY_GROWING.D_Number(다이어리에 기본키를 가져다쓰는 외래키) = DIARY.Number(기본키)

위와 같이 하면 DIARY_GROWING 테이블에서 DIARY에 몇번 회원정보들이 다 날라 갈것이다. 이렇게

JOIN 연산을 통하여 하나하나 삭제하면된다.

당연히 위에처럼 하위테이블블 데이터들을 날렸으면 상위인 DIARY테이블에 회원정보도 날려주면 된다.

처음에 delete CROPS from CROP_ACCOUNT, aaa, bbb, ccc, ddd, eee where @MEM_NUM = CROPS.Mem_Num and ..........이런식으로 하여서 한번에 CROPS에 관련된 테이블을 날릴수 없나해서 시도해보았지만 안되어서

할수없이 테이블 하나당 한줄씩 추가해서 날려주었다.


'.NET > ADO.NET' 카테고리의 다른 글

특정 행 복사하기  (0) 2010.08.06
내장 프로시저  (0) 2010.08.04
다른컴퓨터로 DB 복사  (0) 2010.07.12
내장 프로시저(사용법)  (0) 2010.07.10
DB에 이미지 저장 / 로드 하기  (0) 2010.06.18
Posted by 아몰라


시나리오

DB에서 어떠한 값들을 가져오는데

가져올때 COUNT에 맞춰서 컨트롤을 증가시켜서 새로운 창을 띄운다.


Crop_Temper();  //쿼리에서 값 가져오기
ColumnDefine(); //열 생성
RowDefine();    //로우 생성
AddLine();      //동적으로 컨트롤 생성
ButtonAdd();    //버튼생성



1.
Crop_Temper() 에서 어떠한 컨트롤 생성할때 필요한 값들을 가져온다. 여기에서 가져온 COUNT만큼 Row의

갯수를 증가시킬것이다.


2.
        private void ColumnDefine() //열을 증가시킨다.
        {          
            ColumnDefinition column1 = new ColumnDefinition();
            column1.MinWidth = 100;
            ColumnDefinition column2 = new ColumnDefinition();
            column2.MinWidth = 150;

            MainGrid.ColumnDefinitions.Add(column1);
            MainGrid.ColumnDefinitions.Add(column2);

        }

3.
        private void RowDefine() //행을 추가한다.
        {
            for (int i = 0; i <= Temper_List.Temper_Name.Count; i++)  //DB에서 가져온 값갯수만큼 행을 만든다.
            {
                RowDefinition row1 = new RowDefinition();
                row1.MinHeight = 30;                               
                MainGrid.RowDefinitions.Add(row1);               
            }           
        }

4.
        private void AddLine() //입력창 추가
        {
            for (int i = 0; i < Temper_List.Temper_Name.Count; i++) 
            {       
//여기서는 행과 열에 맞게 라벨과 텍스트박스를 추가시킨다.

                Label lbTest1 = new Label();
                lbTest1.Content = Temper_List.Temper_Name[i].ToString();
                lbTest1.FontSize = 12;
                lbTest1.HorizontalAlignment = HorizontalAlignment.Center;
                lbTest1.VerticalAlignment = VerticalAlignment.Center;   

                Grid.SetRow(lbTest1, i);
                Grid.SetColumn(lbTest1, 0);
                MainGrid.Children.Add(lbTest1);

                TextBox tbTest1 = new TextBox();
                tbTest1.TextAlignment = TextAlignment.Center;
                tbTest1.VerticalContentAlignment = VerticalAlignment.Center;
                Grid.SetRow(tbTest1, i);
                Grid.SetColumn(tbTest1, 1);
               MainGrid.Children.Add(tbTest1);
            }           
        }

5. 버튼도 위와 같은 식으로 추가한다.



위와같이 했다면 아래와 같이 창이 뜨게 될것이다.
DB에서 가져오는 값들이 다름에 따라 창들도 동적으로 변한다.


'.NET > WPF' 카테고리의 다른 글

WPF에서 사용자정의컨트롤 쓰기  (0) 2010.04.26
미디어플레이어 (동기화해결)  (0) 2010.04.22
WPF에서 미디어 플레이어 만들기  (1) 2010.04.19
사용자지정과 사용자정의 컨트롤 차이  (0) 2010.04.18
의존속성  (0) 2010.04.16
Posted by 아몰라