안녕하십니까?
SQL Server 2008을 사용중입니다.
MFC에서 ADO로 연결하여 원격지에서 Insert문 100만개를 성공적으로 처리 하였습니다.
그런데 분명히 존재하는 테이블인데 Select문의 레코드 카운트가 0으로 나오네요...
SQL Server가 설치된 PC에서 제 프로그램을 실행 시키면 정상적으로 Select가 됩니다.
원격지에서 Select문이 안되요...
왜 원격지에서 Insert는 되는데 Select는 안될까요??
Select문은 로컬에서 테스트 성공했으므로 구문에 이상은 없습니다.
DB 설정중에 무엇 때문이지요... 답변 부탁드립니다.
Comment 5
-
항해자™
2016.04.25 12:10
-
처리짱
2016.04.25 12:55
MFC의 GetRecordCount 함수를 사용 하셨는지요?
그 함수의 문제점인지 의도한바인지는 모르겠으나 0으로 나옵니다.
MoveNext하면 그제서야 레코드 카운트가 1씩 올라가요..
IsEof로 한바퀴를 쭉 돌아야 전체 레코드 카운트가 확인될거에요..
참고
https://social.msdn.microsoft.com/Forums/en-US/247a76dc-79dc-4ad6-9794-4e147d7968aa/mfc-dao-ado-problems?forum=vcmfcatl
-
lyn1216
2016.04.25 13:54
테이블 명은 PSM_REG_INFO 이고
REGISTERED_NO varchar(20) primary key
POST_CODE varchar(6) not NULL
RECEIPT_DATE varchar(14) not NULL
구성 필드는 3개로 단촐합니다.
삽입 쿼리에 성공한 문장입니다.
strSQL.Format("insert into PSM_REG_INFO(REGISTERED_NO, POST_CODE, RECEIPT_DATE) values('%s','%s','%s');", strRegCode, strPostCode,strReceiptate);
if( ExecuteSQL(strSQL.GetBuffer(0)) )
{// 성공!!!..
;
}실패하는 쿼리1 입니다.
strSQL.Format("select * from PSM_REG_INF where REGISTERED_NO='00000000000000000001'");
if( ExecuteSQL(strSQL.GetBuffer(0), Table) )==> 여기서 Error : ADO Error Code : 80040e37
{
if( Table.GetRecordCount() )
{
memset(szData,0,100);
Table.GetValue("REGISTERED_NO", szData);
strMsg.Format("%s, ", szData );
}}
else
{
DisplayMessage(0, "쿼리 실패");
}실패하는 쿼리2 입니다.(쿼리문에 use DB_Name 을 추가함.)
strSQL.Format("use KPDB; select * from PSM_REG_INF where REGISTERED_NO='00000000000000000001'");
if( ExecuteSQL(strSQL.GetBuffer(0), Table) )
{
if( Table.GetRecordCount() ) ==> 여기서 0이 되어 처리 못함...
{
memset(szData,0,100);
Table.GetValue("REGISTERED_NO", szData);
strMsg.Format("%s, ", szData );
}}
else
{
DisplayMessage(0, "쿼리 실패");
}ADO 관련 Class는 기존에도 사용된 것이라......
무엇을 알려 드려야 될런지... 답답하여 이렇게 라도 올립니다.
부탁드립니다.
-
처리짱
2016.04.25 20:03
위에 답변을 달아 드렸는데 ㅠㅠ
실패쿼리 1은 db커넥션 부분에 데이터베이스가 다른쪽으로 연결이 되어 있어서 에러가 나는경우인거 같습닌다.
실패쿼리2는 퀄리가 성공했다는 전제하에.. 구문에 문제가 있습니다. GetRecordCount 함수 자체가 0을 리턴하게 되어있습니다..
table요게 CRecordSet가 맞죠?
while (!table.IsEof())
{
memset(szData,0,100);
Table.GetValue("REGISTERED_NO", szData);table.MoveNext();
}
이런식으로 루프 돌아야 합니다.
루프가 다 돌고나면 그때서야 GetRecordCount가 제대로 나옵니다..
C에서 0 과 FALSE, NULL은 같습니다. define을 보시면 다 0으로 정의되어 있습니다..
아래 경고부분 자세히 읽어보시면 성능상의 이유라고 되어있습니다.
https://msdn.microsoft.com/ko-kr/library/windows/apps/w9109302(v=vs.90)
-
항해자™
2016.04.25 17:56
ssms 에서 아래 쿼리 실행하면 값이 나오나요?
select * from PSM_REG_INF where REGISTERED_NO='00000000000000000001'
아래 글과 마찮가지로 어디가 아픈지 알아 맞춰 보라고 하는 것과 일반입니다ㅎㅎ