|
로렌조 님이 쓰신 글 :
: 안녕하세요...'로렌조' 임다...^^
:
: 올리신 글을 읽어 보니까, 문제는 13자리를 8자리로 짤려 읽히는게 문제인거 같군요..
: 스캐너를 쓰신다니까 분명 시리얼 통신 콤포넌트를 쓰실텐데 문제는 보통 통신 콤포넌트에
: 있습니다.
: 아마도 쓰고 계신 통신 콤포넌트가 쓰래드를 이용한 콤포넌트인듯 하군요...
: 스레드를 이용한 콤포넌트의 경우에는 송수신시에 데이타의 길이가 어떻든간에
: 보통 8Byte씩 잘라서 보내는 경우가 제일 많습니다. 그래서 수신된 데이타의 뒤에 데이타가
: 또 올건지를 확인하고 문자열을 조합해야 되겠죠..
: 스캐너의 메이커마다 조금씩은 다를 수 있겠지만 보통 'STX+DATA+ETX' 이런식이 되겠죠.
: 참고하십시오.
:
: 참! 그리고,
:
: : char BUF[14];
: :
: : strcpy(BUF,Edit1->Text.c_str()); //------ 에디트값을 버퍼로 불러들인다.
: :
: : switch(strlen(BUF)) //------- 스위치문을 이용하여 8자리일 경우 13자리일경우를 나눠DB 를검색
:
: 위의 문장은 단지 switch문에서 사용하기 위해 BUF를 사용하신다면 아래처럼 사용하시면 됩니다.
:
: switch(Edit1->Text.Length()) <--- 요렇게
:
: 즐프하세요....(^.^)
:
: 시후 님이 쓰신 글 :
: : 포스프로그램을 짜고 있는데. 스캐너에서 에디트로 읽어 들이면 8자리 코드 또는 13자리 코드를 어떻게 구분해서 읽어야 할지 잘 모르겠습니다.
: : 에디트에서 읽어 들인 값을 임의 버퍼에 저장하여 버퍼사이즈를 측정하여 8자리냐 13자리냐로 해서 코딩을 했습니다. 근데 8자리는 읽는데 13자리는 8자리만 읽고 나머지는 자리는 다음 에디트로 넘어 갑니다.
: : 고수님들 부탁드립니다...도와주셈...꾸벅..
: :
: : 여기 소스를 올립니다...
: : //==============================================================================
: : // 스캐너로 읽어 들여서 ITEM.DB를 검색한다.
: : //==============================================================================
: : void __fastcall TF_ASPM::Edit1Change(TObject *Sender)
: : {
: : char BUF[14];
: :
: : strcpy(BUF,Edit1->Text.c_str()); //------ 에디트값을 버퍼로 불러들인다.
: :
: : switch(strlen(BUF)) //------- 스위치문을 이용하여 8자리일 경우 13자리일경우를 나눠DB 를검색
: : {
: : case 8: //8자리일 경우
: : ITEM->Open();
: : ITEM->SetKey();
: : ITEM->FieldByName("A_CODE")->AsString = Edit1->Text.c_str();//상품코드
: :
: : if(ITEM->GotoKey())
: : {
: : Edit2->Text = ITEM->FieldByName("A_NAME")->AsString;//상품명
: : Edit3->Text = ITEM->FieldByName("A_MIPG")->AsString;//매입가
: : Edit4->Text = ITEM->FieldByName("A_PANG")->AsString;//판매가
: : Edit5->Text = ITEM->FieldByName("A_GRCO")->AsString;//거래처코드
: : Edit6->Text = ITEM->FieldByName("A_BMCO")->AsString;//부문코드
: : if(ITEM->FieldByName("A_GSGU")->AsString == "0") //면과세구분
: : {
: : CB1->ItemIndex = 0;//과세선택
: : }
: : else if(ITEM->FieldByName("A_GSGU")->AsString == "1")
: : {
: : CB1->ItemIndex = 1;//면세선택
: : }
: : Edit7->Text = ITEM->FieldByName("A_JEGO")->AsString;//재고량
: : Edit3->SetFocus();
: : }
: : else
: : {
: : Edit2->SetFocus();
: : }
: : ITEM->Close();
: : break;
: : case 13: //13자리일 경우
: : ITEM->Open();
: : ITEM->SetKey();
: : ITEM->FieldByName("A_CODE")->AsString = Edit1->Text.c_str();
: :
: : if(ITEM->GotoKey())
: : {
: : Edit2->Text = ITEM->FieldByName("A_NAME")->AsString;
: : Edit3->Text = ITEM->FieldByName("A_MIPG")->AsString;
: : Edit4->Text = ITEM->FieldByName("A_PANG")->AsString;
: : Edit5->Text = ITEM->FieldByName("A_GRCO")->AsString;
: : Edit6->Text = ITEM->FieldByName("A_BMCO")->AsString;
: : if(ITEM->FieldByName("A_GSGU")->AsString == "0")
: : {
: : CB1->ItemIndex = 0;
: : }
: : else if(ITEM->FieldByName("A_GSGU")->AsString == "1")
: : {
: : CB1->ItemIndex = 1;
: : }
: : Edit7->Text = ITEM->FieldByName("A_JEGO")->AsString;
: : Edit3->SetFocus();
: : }
: : else
: : {
: : Edit2->SetFocus();
: : }
: : ITEM->Close();
: : break;
: : }
: : }
-- 로렌조님 답변글 감사합니다..
-- 그런데 말씀하신 뜻은 알겠지만 정확히 어떻게 코딩을 해야하는지는 모르겠습니다.
-- 셈플이나 관련 소스라도 있으시면 거기에 주석을 달아서 갈켜 주심 안될까염..^^
-- 제가 왕 허접이다 보니 아직 시리얼 컴포트 제어를 못하거든염..
-- 관련 도움말을 자세히 리플 달아주심 감사하겠습니다..제가 넘 많은걸 요구했나염..
-- 그래도 너그러히 용서하시구 다시 한번 갈켜주셈..^^.....꾸벅
|