|
안녕하세요...'로렌조' 임다...^^
올리신 글을 읽어 보니까, 문제는 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;
: }
: }
|