2015년 4월 25일 토요일
CRecordSet Data가 잘립니다. 현상 해결 방법
Visual C++SQL: SQL 및 C++ 데이터 형식(ODBC)
참고
이 내용은 MFC ODBC 클래스에 적용됩니다. MFC DAO 클래스를 사용하려면 DAO 도움말의 "Microsoft Jet 데이터베이스 엔진 SQL과 ANSI SQL의 비교" 항목을 참조하십시오.
다음은 ANSI SQL 데이터 형식을 C++ 데이터 형식으로 매핑한 표입니다. 이 표는 MSDN LIBRARY CD의 ODBC SDK 프로그래머 참조에 있는 부록 D의 C 언어 내용을 보완한 것입니다. 마법사는 대부분의 데이터 형식 매핑을 자동으로 관리합니다. 마법사를 사용하지 않는 경우 해당 매핑 정보를 사용하면 필드 교환 코드를 직접 작성하기가 쉬워집니다.
C++ 데이터 형식에 매핑되는 ANSI SQL 데이터 형식
ANSI SQL 데이터 형식 C++ 데이터 형식
CHAR
CString
DECIMAL
CString 1
SMALLINT
int
REAL
float
INTEGER
long
FLOAT
double
DOUBLE
double
NUMERIC
CString 1
VARCHAR
CString
LONGVARCHAR
CLongBinary, CString 2
BIT
BOOL
TINYINT
BYTE
BIGINT
CString 1
BINARY
CByteArray
VARBINARY
CByteArray
LONGVARBINARY
CLongBinary, CByteArray 3
DATE
CTime, CString
TIME
CTime, CString
TIMESTAMP
CTime, CString
1. SQL_C_CHAR가 기본 ODBC 전송 형식이기 때문에 ANSI DECIMAL 및 NUMERIC은 CString에 매핑됩니다.
2. 255자를 넘는 문자 데이터는 CString에 매핑될 때 기본값으로 잘립니다. RFX_Text의 nMaxLength 인수를 명시적으로 설정하면 잘림 길이를 늘릴 수 있습니다.
3. 255자를 넘는 이진 데이터는 CByteArray에 매핑될 때 기본값으로 잘립니다. RFX_Binary의 nMaxLength 인수를 명시적으로 설정하면 잘림 길이를 늘릴 수 있습니다.
ODBC 커서 라이브러리를 사용하지 않는 경우 Microsoft SQL Server ODBC 드라이버 및 MFC ODBC 데이터베이스 클래스를 사용하여 둘 이상의 긴 가변 길이 필드를 업데이트하려고 하면 문제가 발생할 수 있습니다. ODBC 형식 SQL_LONGVARCHAR 및 SQL_LONGVARBINARY는 텍스트 및 이미지 SQL 서버 형식으로 매핑됩니다. 동일한 CRecordset::Update 호출에서 둘 이상의 긴 가변 길이 필드를 업데이트하면 CDBException이 throw됩니다. 따라서 CRecordset::Update를 사용하여 여러 개의 긴 열을 동시에 업데이트하면 안 됩니다. 여러 개의 긴 열은 ODBC API SQLPutData를 사용하여 동시에 업데이트할 수 있습니다. ODBC 커서 라이브러리를 사용할 수도 있습니다. 그러나 SQL Server 드라이버처럼 커서를 지원하지만 커서 라이브러리가 필요 없는 드라이버에 대해서는 ODBC 커서 라이브러리를 사용하지 않는 것이 좋습니다.
MFC ODBC 데이터베이스 클래스 및 Microsoft SQL Server ODBC 드라이버와 함께 ODBC 커서 라이브러리를 사용하는 경우 CRecordset::Update를 호출한 다음 CRecordset::Requery를 호출하면 CDBException과 함께 ASSERT가 발생할 수도 있습니다. 그러므로 CRecordset::Requery 대신 CRecordset::Close를 호출한 다음 CRecordset::Open을 호출하는 것이 좋습니다. 다른 해결책은 ODBC 커서 라이브러리를 사용하지 않는 것입니다. SQL Server 및 SQL Server ODBC 드라이버는 기본적으로 커서를 지원하기 때문에 ODBC 커서 라이브러리가 필요하지 않습니다.
참고 항목
개념
SQL
SQL: SQL 직접 호출(ODBC)
출처 : http://msdn2.microsoft.com/ko-kr/library/eshhha8h(VS.80).aspx
내 출처: http://blog.naver.com/saojung50?Redirect=Log&logNo=120037017632
감사요
라벨:
문자 짤림,
CRecordSet,
MFC,
MoveNext
2015년 4월 6일 월요일
[MFC] CTimeSpan 날짜 비교
CTime time (2015,2,2,3,2,1)
CTime time2 (2015,4,2,4,2,1)
CSpanTime timedif = time - time2;
초 단위로 timedif에 차이값이 저장된다.
주의점은 time 선언시 CTime time(2015,1,1) 처럼 Year,Month,Day까지만 적지 말자.
동작하지 않는다..
선언문을 확인해보니 H:M:S 까지 적지 않으면 제대로 동작하지 않는다.
[MFC] CTime과 String 변환 방법
유니코드 문자집합을 사용하는 경우로 한정합니다. (Visual Studio 2008 기준)
//=================================================================
// 1. CTime 에서 CString 으로 변환할 때
CString strDateTime;
CTime tiTime(2008, 11, 12, 14, 54, 0); // 2008년 11월 12일 오후2시 54분 0초
strDateTime = tiTime.Format(_T("%04Y-%02m-%02d %02H:%02M:%02S"));
//=================================================================
// 2. CString에서 CTime 으로 변환할 때
CString strDateTime = _T("2008-11-12 14:54:00");
int nYear = _wtoi(strDateTime.Left(4));
int nMon = _wtoi(strDateTime.Mid(5,2);
int nDay = _wtoi(strDateTime.Mid(8,2);
int nHour = _wtoi(strDateTime.Mid(11,2);
int nMin = _wtoi(strDateTime.Mid(14,2);
int nSec = _wtoi(strDateTime.Mid(17,2);
CTime tiTime(nYear, nMon, nDay, nHour, nMin, nSec);
//=================================================================
// 3. 활용 사례
// 1) SQL DB 에 넣고 뺄 때
// 2) Console Log View/Save
이상 허접한 팁이었습니다.
출처: http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8191&page=21
2015년 4월 1일 수요일
[MFC] 한글 깨짐 현상 해결
트랙백 주소 : http://www.tipssoft.com/bulletin/tb.php/QnA/255
(VC++ 6.0 )
Insert Resource에서 Dialog - IDD_DIALOGBAR [English (U.S.)] 해서 다이얼로그 박스를 만든 후
실행해 보면 다이얼로그 박스에 있는 한글이 다 깨집니다. 다이얼로그 박스 폰트를 굴림 등으로 해도 마찬가지고요.
Insert Resource에서 Dialog 밑에 있는 것들을 보면 뒤에 다 English (U.S.)]이 붙어 있는데 한글판은 따로 있는 것인지?
한글을 제대로 나오게 하려면 어떻게 해야 하나요?
관리자 08-07-02 19:51
Date : 05-07-25 18:20
질문을 읽어보니 현재 님은 리소스의 언어설정이 영문으로 되어 있습니다.
이럴 경우 한글을 사용한다 하더라고 깨지는 현상이 발생됩니다.
먼저 리소스뷰에서 변경하고자 하는 리소스를 선택하신 후 오른쪽마우스 버튼을 눌러 나오는 팝업에서
Properties 를 선택, Language 부분의 내용을 Englis(U.S) 에서 Korean 으로 바꾸어 주시면 됩니다.
모든 변경 작업을 완료하신 후 ReBuild All 을 한번 실행해서 변경된 결과가 잘 나오는지 확인 해보세요
그럼 더운 날씨에 건강 유의하시고, 언제든지 문의 주세요.........
출처: http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=255
2015년 3월 26일 목요일
[MySQL] Auto Increment 값을 Select 구문에 넣기
mysql 구문인데 무슨 내용인지 모르겠지만 잘 동작한다.
출처: http://stackoverflow.com/questions/16555454/how-to-generate-auto-increment-field-in-select-query
SELECT @n := @n + 1 n,
first_name,
last_name
FROM table1, (SELECT @n := 0) n
ORDER BY first_name, last_name
핵심은 Table Add 할 때 (Select @n := 0) n으로 Add하고
출력 구문에 @n := @n +1 n 으로 작성하면 동작함
Vㅔ리 굳
출처: http://stackoverflow.com/questions/16555454/how-to-generate-auto-increment-field-in-select-query
라벨:
Auto Increment,
MySQL,
Select
2015년 3월 19일 목요일
[MFC] MessageBox
Message Box 공부에 Vㅔ리 굳한 사이트 소개
nt MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
- 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달하거나 질문을 하는 장치
- 인수설명
hWnd : 부모 윈도우의 핸들을 입력한다. 부모가 없을 경우 NULL로 입력
lpText : 출력할 메시지의 내용을 입력한다. 모든 포맷의 문자열을 입력할 수 있다.
lpCaption : 메세지박스의 타이틀에 나타날 문자열을 입력한다. 기본값은 Error 이다.
uType : 메시지박스의 버튼,아이콘,동작방식을 결정한다. 여러 플래그를 | 로 조합사용한다.
|
인수 : uType (버튼의 종류
선택)
| |
|
플래그
|
설 명
|
|
MB_ABORTRETRYIGNORE
|
Abort, Retry, Ignore 세 개의
버튼 표시
|
|
MB_OK
|
Ok 버튼
표시
|
|
MB_OKCANCEL
|
Ok, Cancel 두 개의 버튼
표시
|
|
MB_RETRYCANCEL
|
Retry, Cancel 두 개의 버튼
표시
|
|
MB_YESNO
|
Yes, No, 두 개의 버튼
표시
|
|
MB_YESNOCANCEL
|
Yes, No, Cancel 세 개의 버튼
표시
|
|
인수 : uType (버튼의 아이콘
선택)
| |
|
플래그
|
설 명
|
|
MB_ICONEXCLAMATION, MB_ICONWARNING
|
|
|
MB_ICONINFORMATION, MB_ICONASTERISK
|
|
|
MB_ICONQUESTION
|
|
|
MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND
|
|
|
인수 : uType (디폴트 버튼
지정)
| |
|
플래그
|
설 명
|
|
MB_DEFBUTTON1
|
첫번째 버튼이 디폴트 버튼이 된다.
(기본값)
|
|
MB_DEFBUTTON2
|
두번째 버튼이 디폴트 버튼이
된다.
|
|
MB_DEFBUTTON3
|
세두번째 버튼이 디폴트 버튼이
된다.
|
|
MB_DEFBUTTON4
|
네번째 버튼이 디폴트 버튼이
된다.
|
|
인수 : uType (모달 여부
선택)
| |
|
플래그
|
설 명
|
|
MB_APPMODAL
|
hWnd 윈도우의 모달 대화상자로 열리므로 메시지
박스를 닫기 전에는 같은 스레드에 속한 다른 윈도우로 전환할 수 없다. 그러나 다른 스레드의 윈도우로 전환할 수는 있으며 팝업 윈도우로도 전환할
수 있다. 아무 플래그도 지정되지 않으면 이 모드가 디폴트로 적용됨.
|
|
MB_SYSTEMMODAL
|
MB_APPMODAL과 동일하되 항상 위 스타일을
가져 모든 윈도우보다 위에 배치된다. 메모리 부족 등의 긴급한 상황을 알리고자 할 때 이 플래그를 사용.
|
|
MB_TASKMODAL
|
MS_APPMODAL과 동일하되 hWnd가
NULL일 경우 현재 스레드에 속한 모든 최상위 윈도우가 사용 금지된다는 점이 다르다. DLL이나 라이브러리에서 부모 윈도우로 지정할만한
윈도우가 없을 때 이 플래그를 사용한다.
|
|
인수 : uType (기타 옵션
선택)
| |
|
플래그
|
설 명
|
|
MB_DEFAULT_DESKTOP_ONLY
|
사용자가 로그온안 후 응용 프로그램이 실행되고 있는 디폴트 데스크
탑인 경우만 메시지 박스가 나타나도록 한다.
|
|
MB_HELP
|
도움말 버튼을 보여준다. 이 버튼을 누르거나 F1키를 누르면 Help
이벤트가 발생한다.
|
|
MB_RIGHT
|
메시지를 오른쪽으로 정렬한다.
|
|
MB_RTLREADING
|
아랍이나 헤브루 윈도우즈에서 오른쪽에서 왼쪽 읽기로 출력한다. 한글
윈도우즈에서는 의미가 없다.
|
|
MB_SETFOREGROUND
|
메시지 박스를 포그라운드 윈도우로 만든다. 시스템은 내부적으로
SetForegroundWindow 함수를 호출한다.
|
|
MB_TOPMOST
|
항상 위 옵션으로 메시지 박스를
생성한다.
|
|
MB_SERVICE_NOTIFICATION
|
NT의 서비스 프로그램만 사용할 수 있는
플래그이다. 현재 로긴한 사용자가 없더라도 액티브되어 있는 데스크 탑에 메시지 박스를 출력한다. 이 경우 hWnd는 반드시 NULL이어야
한다.
|
|
MB_SERVICE_NOTIFICATION_NT3X
|
MB_SERVICE_NOTIFICATION와
동일하되 NT 3.51버전에서 사용한다.
|
- 리턴값 : 메시지 박스를 생성할 메모리가 부족할 경우 0을 리턴한다. 그 외의 경우 사용자가
누른 버튼의 ID를 리턴한다.
값
|
버 튼
|
IDABORT
|
Abort 버튼을 누를 경우
|
IDCANCEL
|
Cancel 버튼을 누를 경우 Esc키를 눌러 대화상자를 닫을 때도 이 값이 리턴된다.
|
IDIGNORE
|
Ignore 버튼을 누를 경우
|
IDNO
|
No 버튼을 누를 경우
|
IDOK
|
Ok 버튼을 누를 경우
|
IDRETRY
|
Retry 버튼을 누를 경우
|
IDYES
|
Yes 버튼을 누를 경우
|
출처: http://devlog.cafe24.com/xe/index.php?mid=board_oHhP60&search_target=tag&search_keyword=MessageBox&document_srl=288
피드 구독하기:
글 (Atom)