안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

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 감사요

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 현재 시간 가져 오기

CTime time = CTime::GetCurrentTime();

[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