안녕하십니까? 델 초보입니다.
전 답변 자격이 없지만 제 생각을 말씀드리려 합니다.
부디 용서하시길...
운영체제가 윈도우라면 제어판에서 국가별설정중 날짜부분을 요모저모로
변경하여 보시고
윈도우 98인 경우 sfc.exe를 사용하여 시스템 무결성 검사를 해보시고
그 다음에 디스크 오류검사[전체가 아닌 표준] 및 조각모음을 시도해 보시구...
그 담엔 윈도우 업그레드 파일중에 다국어 처리기능 지원용이 있습니다.
마이크 소프트 사이트에서 본것 같음(패취종류 같은 데)
마지막으로 시도해 볼것이 오라클 RDBMS 튜닝 <-----이건 전문가 아니면...
요주의(락킹, 모듈손상등)
아참 바이러스 검사두...
도움이 되질 못해서 죄송함다...
항상 건강하십시요...그럼 꾸벅.
wrote:
> 안녕하십니까..많은 도움을 받는 유저중의 한 사람입니다..
>
> 델파이4, 오라클 7.3.4, 델파이 디비 컴포넌트 InfoPower 4 사용.
> 2달동안 잘 돌아가던 시스템이 3월말부터 날짜관련 특정 필드만
> 데이타가 변하는 현상이 나타났습니다.
> InfoPower 네비게이터로 데이터 이동시 갑자기 날짜관련 특정 필드의
> 값이 다른 날짜로 변하는 해괴 망측한 일이 벌어지고 있습니다.
> 그래서 데이터를 수정할 수 없게끔 ReadOnly로 해 놓아도
> 그런 일이 발생한다고 합니다.
> 네비게이터, 테이블, 코딩상에서는 그 날짜 필드를 건드리는
> 이벤트가 없습니다.
> 과연 이 문제가 어디에 있는지 궁금하고 해결책을 알고 싶습니다.
> 프로그램 문제인지, 델파이 문제인지, BDE 문제인지, 오라클 문제인지
> ( 오라클이 깨끗하게 아니 설치되었다는 말을 들었음. 허나
> 같은 오라클을 쓰는 다른 시스템은 이상없다고 함. 다른 시스템이
> 날짜 필드를 쓰는지는 모르겠음.)
> 혹시 운영체제에 따라 그럴 수 있는지 궁금합니다.
> 몇몇 컴퓨터에서는 스페인 윈도우를 사용하고 있고
> 이러한 에러가 발생하는 것을 목격한 것도 스페인 운영체서 발견했습니다.
>
> 많은 분들을 도움을 바라며..부끄럽지만 문제의 해결점을 찾아야하기에..
> 소스를 올립니다.
>
> (*
> uDirect_Worker.PAS
> HRCS( Human Resource Control System ) : Direct Worker Personnel Information Unit
> ================================================================================
> Author : Kim Jung Sun
> Date : September, 1999
> Purpose : 그룹 코드( DW )인 Direct Worker 들에 대한 사원 정보 유닛.
> Notes : 폼 로딩할 때 그룹 코드 DW 인 사원들만 필터 걸어 정보 나타난다.
> 회사 선택시 다시 회사별로 필터 걸어 정보 나타낸다.
> History : 03/11/2000 : 사원 정보 입력시 동일 IMSS No 가 현재 계약자 정보와
> 퇴직자 정보에 있는지 조회하는 루틴에 Employee No,
> Debit Card No 로 조회하는 조건 추가.
> 03/13/2000 : Find 에 Employee No 로 찾는 기능 추가.
> 03/16/2000 : HRCS_OCCUP 테이블에 Gross Salary 추가함에 따라
> Daily Salary 처럼 Job Title에 따라 Gross Salary 보이도록
> 수정. Special Bonus 삭제.
> 03/16/2000 : Navigator 버튼에 Refresh 버튼 추가. 버튼 클릭하면
> 테이블 그룹코드 DW로 필터 걸어 정보 나타낸다.
> 03/16/2000 : 퇴직 사유의 변경으로 인한 하드 코딩.
> HRCS_HISTORY 에서 퇴직자 조회할 대 최신 퇴직정보
> 볼 수 있도록 수정.
> 03/23/2000 : 퇴직 사유에 대한 D313 필드에 값이 제대로 저장이 아니
> 되는 경우가 있어 테이블 포스트시 한번 더 업데이트
> 해주는 프로시저 생성.
> 03/29/2000 : Find에 Card Tag 필드 추가.
> 04/03/2000 : 계약 승인 되고난 후 계약 날짜를 수정하지 못하게끔
> 계약 날짜 컴포넌트의 ReadOnly 속성에
> ContractDateToReadOnly 함수 사용.
> *)
>
> unit uDirect_Worker;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> ComCtrls, Buttons, Wwdbigrd, Grids, Wwdbgrid, Wwdotdot, Wwdbcomb,
> wwdbdatetimepicker, StdCtrls, Mask, wwdbedit, DBCtrls, wwSpeedButton,
> wwDBNavigator, ExtCtrls, ToolWin, wwdblook, wwDialog, Wwfltdlg, Db,
> Wwdatsrc, DBTables, Wwquery, Wwtable, Menus, Printers;
>
> type
> TfrmDirect_Worker = class(TForm)
> CoolBar1: TCoolBar;
> ToolBar1: TToolBar;
> ToolButton1: TToolButton;
> cmdPrint: TToolButton;
> cmdClose: TToolButton;
> tblPersonnel: TwwTable;
> dsPersonnel: TwwDataSource;
> tblPersonnelCONT_NO: TStringField;
> tblPersonnelCO_NO: TFloatField;
> tblPersonnelCONT_DATE: TDateTimeField;
> tblPersonnelRESIGN_DATE: TDateTimeField;
> tblPersonnelNAME: TStringField;
> tblPersonnelSEX: TStringField;
> tblPersonnelBIRTHDAY: TDateTimeField;
> tblPersonnelCOLONY: TStringField;
> tblPersonnelCITY: TStringField;
> tblPersonnelSTATE: TStringField;
> tblPersonnelZIP_CODE: TFloatField;
> tblPersonnelNATIONALITY: TStringField;
> tblPersonnelHOMETOWN: TStringField;
> tblPersonnelFA_NAME: TStringField;
> tblPersonnelMO_NAME: TStringField;
> tblPersonnelRFC_NO: TStringField;
> tblPersonnelIMSS_NO: TStringField;
> tblPersonnelCATE_CODE: TFloatField;
> tblPersonnelOCCUP_CODE: TFloatField;
> tblPersonnelUNIT_CODE: TStringField;
> tblPersonnelSI_CONTNO: TStringField;
> tblPersonnelCARD_TAG: TStringField;
> tblPersonnelCARD_ISSUEDATE: TDateTimeField;
> tblPersonnelCARD_COUNT: TFloatField;
> tblPersonnelCON_APPBY: TStringField;
> tblPersonnelCON_APPDATE: TDateTimeField;
> tblPersonnelP_IMAGE: TBlobField;
> tblPersonnelUNION_YN: TFloatField;
> qryCompany: TwwQuery;
> qryCategory: TwwQuery;
> qryUnit: TwwQuery;
> qrySuperint: TwwQuery;
> Panel1: TPanel;
> Label39: TLabel;
> cmbCompany: TwwDBLookupCombo;
> tblPersonnelGROUP_CODE: TStringField;
> tblPersonnelCOMPANY: TStringField;
> tblPersonnelPHONE_NO: TStringField;
> tblPersonnelFA_FULL_NAME: TStringField;
> tblPersonnelMO_FULL_NAME: TStringField;
> tblPersonnelACCIDENT_FIRST1: TStringField;
> tblPersonnelACCIDENT_FIRST2: TStringField;
> tblPersonnelBENEFICIARY_FIRST1: TStringField;
> tblPersonnelBENEFICIARY_FIRST2: TStringField;
> qryNation: TwwQuery;
> tblPersonnelSTREET_NO: TStringField;
> tblPersonnelFATHER_EXIST: TStringField;
> tblPersonnelMOTHER_EXIST: TStringField;
> tblPersonnelCAMP_NO: TFloatField;
> tblPersonnelTRANS_NO: TFloatField;
> qryTrans_Depart: TwwQuery;
> tblPersonnelMARRIAGE: TStringField;
> tblPersonnelSTREET: TStringField;
> tblPersonnelSPECIAL_ALLOW: TFloatField;
> tblPersonnelSAFETY_DATE: TDateTimeField;
> qryCamp_No: TwwQuery;
> wwFilterDialog: TwwFilterDialog;
> tblPersonnelDISCI_CODE: TFloatField;
> qryDiscipline: TwwQuery;
> qryJob_Title: TwwQuery;
> qryJob_TitleDAILY_WAGE: TFloatField;
> qryJob_TitleINTE_WAGE: TFloatField;
> qryJob_TitleOCCUP_CODE: TFloatField;
> qryJob_TitleOCCUP_NAME: TStringField;
> qryJob_TitleSPECIAL_TEST: TStringField;
> qryJob_TitleTEST_DISCIPLINE: TStringField;
> tblPersonnelCOST_CODE: TStringField;
> tblPersonnelRECRUIT_RESO: TStringField;
> PageControl: TPageControl;
> tshtEdit_Information: TTabSheet;
> tshtItem: TTabSheet;
> tblPersonnelMIDDLE_NAME: TStringField;
> GroupBox1: TGroupBox;
> Label1: TLabel;
> Label2: TLabel;
> Label3: TLabel;
> Label6: TLabel;
> Label7: TLabel;
> Label8: TLabel;
> Label37: TLabel;
> Label52: TLabel;
> Label50: TLabel;
> Label11: TLabel;
> Label35: TLabel;
> Label36: TLabel;
> Label56: TLabel;
> Label4: TLabel;
> Label5: TLabel;
> DBImage1: TDBImage;
> gboxCard: TGroupBox;
> Label19: TLabel;
> Label20: TLabel;
> Label21: TLabel;
> edtCard_Tag: TwwDBEdit;
> edtCard_Count: TwwDBEdit;
> edtCard_Issue_Date: TwwDBEdit;
> gboxJob: TGroupBox;
> Label10: TLabel;
> Label38: TLabel;
> Label14: TLabel;
> Label12: TLabel;
> Label15: TLabel;
> Label13: TLabel;
> Label54: TLabel;
> Label55: TLabel;
> edtDay_Wage: TwwDBEdit;
> edtInte_Wage: TwwDBEdit;
> cmbOccupation: TwwDBLookupCombo;
> cmbCategory: TwwDBLookupCombo;
> cmbUnit: TwwDBLookupCombo;
> cmbSuperint: TwwDBLookupCombo;
> chbUnion: TDBCheckBox;
> tmpSafety_Date: TwwDBDateTimePicker;
> lkcmbDiscipline: TwwDBLookupCombo;
> gboxPrivate: TGroupBox;
> Label27: TLabel;
> Label26: TLabel;
> Label24: TLabel;
> Label17: TLabel;
> Label25: TLabel;
> Label28: TLabel;
> Label16: TLabel;
> Label29: TLabel;
> Label31: TLabel;
> Label32: TLabel;
> Label9: TLabel;
> Label18: TLabel;
> Label30: TLabel;
> Label33: TLabel;
> Label51: TLabel;
> edtState: TwwDBEdit;
> medtZip_Code: TwwDBEdit;
> edtCity: TwwDBEdit;
> edtColony: TwwDBEdit;
> edtTown: TwwDBEdit;
> edtPhone_No: TwwDBEdit;
> edtHometown: TwwDBEdit;
> edtFa_Fullname: TwwDBEdit;
> edtMo_Fullname: TwwDBEdit;
> lkcmbNationality: TwwDBLookupCombo;
> cmbMarriage: TwwDBComboBox;
> edtStreet_No: TwwDBEdit;
> cmbFather_Exist: TwwDBComboBox;
> cmbMother_Exist: TwwDBComboBox;
> lkcmbDepart_Area: TwwDBLookupCombo;
> edtCont_No: TwwDBEdit;
> tmpCont_Date: TwwDBDateTimePicker;
> tmpResign_Date: TwwDBDateTimePicker;
> edtName: TwwDBEdit;
> cmbSex: TwwDBComboBox;
> tmpBirthday: TwwDBDateTimePicker;
> edtFa_Name: TwwDBEdit;
> gboxContract: TGroupBox;
> Label40: TLabel;
> Label41: TLabel;
> Label42: TLabel;
> Label43: TLabel;
> Label45: TLabel;
> Label46: TLabel;
> Label47: TLabel;
> Label49: TLabel;
> edtAcc_Firstname1: TwwDBEdit;
> edtAcc_Firstname2: TwwDBEdit;
> edtBenef_Firstname1: TwwDBEdit;
> edtBenef_Firstname2: TwwDBEdit;
> edtMo_Name: TwwDBEdit;
> edtCompany: TwwDBEdit;
> lkcmbCamp_No: TwwDBLookupCombo;
> edtCost_Code: TwwDBEdit;
> cmbRecruit_Resource: TwwDBComboBox;
> edtLast_Name: TwwDBEdit;
> edtRfc_No: TwwDBEdit;
> edtImss_No: TwwDBEdit;
> Label34: TLabel;
> edtTest_Required: TwwDBEdit;
> Label58: TLabel;
> cmbResult: TwwDBComboBox;
> Label59: TLabel;
> cmbMedical_Test: TwwDBComboBox;
> tblPersonnelTEST_RESULT: TStringField;
> tblPersonnelMEDICAL_TEST: TStringField;
> Label22: TLabel;
> edtApp_By: TwwDBEdit;
> Label23: TLabel;
> edtApp_Date: TwwDBEdit;
> Shape1: TShape;
> GroupBox6: TGroupBox;
> Label57: TLabel;
> edtCamp_No: TwwDBEdit;
> chkLocker: TDBCheckBox;
> chkMatress: TDBCheckBox;
> chkBlanket: TDBCheckBox;
> GroupBox7: TGroupBox;
> Label60: TLabel;
> Label61: TLabel;
> Label62: TLabel;
> Label63: TLabel;
> edtCamp_Others1: TwwDBEdit;
> edtCamp_Others2: TwwDBEdit;
> edtCamp_Others3: TwwDBEdit;
> edtCamp_Others4: TwwDBEdit;
> GroupBox8: TGroupBox;
> chkHelmet: TDBCheckBox;
> chkGoggle: TDBCheckBox;
> chkShoes: TDBCheckBox;
> GroupBox9: TGroupBox;
> Label64: TLabel;
> Label65: TLabel;
> Label66: TLabel;
> Label67: TLabel;
> edtSafety_Others1: TwwDBEdit;
> edtSafety_Others2: TwwDBEdit;
> edtSafety_Others3: TwwDBEdit;
> edtSafety_Others4: TwwDBEdit;
> chkGloves: TDBCheckBox;
> chkEar_Plugs: TDBCheckBox;
> GroupBox10: TGroupBox;
> Label68: TLabel;
> edtAmount: TwwDBEdit;
> GroupBox11: TGroupBox;
> Label69: TLabel;
> edtCoupon: TwwDBEdit;
> tblPersonnelFOOD_COUPON: TFloatField;
> tblPersonnelLOAN_MONEY: TFloatField;
> tblPersonnelLOCKER: TStringField;
> tblPersonnelMATRESS: TStringField;
> tblPersonnelBLANKET: TStringField;
> tblPersonnelCAMP_OTHERS1: TStringField;
> tblPersonnelCAMP_OTHERS2: TStringField;
> tblPersonnelCAMP_OTHERS3: TStringField;
> tblPersonnelCAMP_OTHERS4: TStringField;
> tblPersonnelHELMET: TStringField;
> tblPersonnelGOGGLE: TStringField;
> tblPersonnelSHOES: TStringField;
> tblPersonnelGLOVES: TStringField;
> tblPersonnelEAR_PLUGS: TStringField;
> tblPersonnelSAFETY_OTHERS1: TStringField;
> tblPersonnelSAFETY_OTHERS2: TStringField;
> tblPersonnelSAFETY_OTHERS3: TStringField;
> tblPersonnelSAFETY_OTHERS4: TStringField;
> tblPersonnelEQUIP_RECEIVED_D: TDateTimeField;
> GroupBox5: TGroupBox;
> wwDBGrid1: TwwDBGrid;
> PopupMenu: TPopupMenu;
> ppmuKorean_Name: TMenuItem;
> ppmnEnglish_Name: TMenuItem;
> ppmnCont_No: TMenuItem;
> cmbType_Resign: TwwDBComboBox;
> tblPersonnelD313: TFloatField;
> Label44: TLabel;
> Label48: TLabel;
> edtDebit_Card: TwwDBEdit;
> tblPersonnelREMARKS: TStringField;
> tblPersonnelTEST_REQUIRED: TStringField;
> tblPersonnelDAILY_SALARY: TFloatField;
> tblPersonnelINTE_SALARY: TFloatField;
> qrySelect_ImssNo: TwwQuery;
> qrySelect_ContNo: TwwQuery;
> Label70: TLabel;
> cmbImss: TwwDBComboBox;
> tblPersonnelFM3_NEED: TStringField;
> Label71: TLabel;
> edtEmp_No: TwwDBEdit;
> tblPersonnelPHONE_OFFICE: TStringField;
> Label72: TLabel;
> edtSubcon: TwwDBEdit;
> tblPersonnelACCIDENT_LAST1: TStringField;
> tblPersonnelJOB_TITLE: TStringField;
> Label53: TLabel;
> edtGrossSalary: TwwDBEdit;
> qryJob_TitleGROSS_SALARY: TFloatField;
> tblPersonnelGROSS_SALARY: TFloatField;
> wwDBNavigator1: TwwDBNavigator;
> wwDBNavigator1First: TwwNavButton;
> wwDBNavigator1PriorPage: TwwNavButton;
> wwDBNavigator1Prior: TwwNavButton;
> wwDBNavigator1Next: TwwNavButton;
> wwDBNavigator1NextPage: TwwNavButton;
> wwDBNavigator1Last: TwwNavButton;
> wwDBNavigator1Insert: TwwNavButton;
> wwDBNavigator1Delete: TwwNavButton;
> wwDBNavigator1Post: TwwNavButton;
> wwDBNavigator1Cancel: TwwNavButton;
> wwDBNavigator1Refresh: TwwNavButton;
> procedure FormClose(Sender: TObject; var Action: TCloseAction);
> procedure cmdCloseClick(Sender: TObject);
> procedure FormCreate(Sender: TObject);
> procedure cmbCompanyChange(Sender: TObject);
> procedure tblPersonnelNewRecord(DataSet: TDataSet);
> procedure ToolButton1Click(Sender: TObject);
> procedure FormKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> procedure cmdPrintClick(Sender: TObject);
> procedure edtCont_NoKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> procedure edtImss_NoKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> procedure tblPersonnelBeforePost(DataSet: TDataSet);
> procedure ppmuKorean_NameClick(Sender: TObject);
> procedure ppmnEnglish_NameClick(Sender: TObject);
> procedure ppmnCont_NoClick(Sender: TObject);
> procedure tmpResign_DateDragDrop(Sender, Source: TObject; X,
> Y: Integer);
> procedure wwDBNavigator1RefreshClick(Sender: TObject);
> procedure tblPersonnelAfterScroll(DataSet: TDataSet);
> private
> { Private declarations }
> // 계약된 사람중이나 historical 정보에 동일한 imss no가 있는지 조회하는 프로시저
> procedure Query_ImssNo( intKind : integer; strImss_No : string );
> // 계약된 사람중에 동일한 계약번호를 가진 사람있는지 조회하는 프로시저
> procedure Query_ContNo( strCont_No : string );
> // 퇴직사유를 선택후 저장하면 퇴직사유에 대한 데이터가 D313 필드에 제대로
> // 저장되지 않아 테이블 포스트시 한번 더 업데이트해주는 프로시저.
> procedure UpdateD313;
> public
> { Public declarations }
> end;
>
> var
> frmDirect_Worker : TfrmDirect_Worker;
>
> implementation
>
> uses common, Main, uContract_Information, uDirect_Worker_Report;
> {$R *.DFM}
>
>
> // 계약된 사람중이나 historical 정보에 동일한 imss no가 있는지 조회하는 프로시저
> procedure TfrmDirect_Worker.Query_ImssNo( intKind : integer; strImss_No : string );
> begin
> // 현재 계약된 사람중에 동일한 imss no가 있는지 조회한다.
> with qrySelect_ImssNo do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT CONT_NO, NAME, IMSS_NO, CO_NAME' );
> SQL.Add( 'FROM HRCS_CONTRACT C, HRCS_COMP CO' );
> SQL.Add( 'WHERE C.CO_NO = CO.CO_NO(+)' );
>
> // Kind Number
> // 1 : IMSS No check
> // 2 : Emp No check
> // 3 : Debit Card check
> if intKind = 1 then
> begin
> SQL.Add( 'AND IMSS_NO = :IMSS_NO' );
> ParamByName( 'IMSS_NO' ).AsString := strImss_No;
> end
> else if intKind = 2 then
> begin
> SQL.Add( 'AND PHONE_OFFICE = :EMP_NO' );
> ParamByName( 'EMP_NO' ).AsString := strImss_No;
> end
> else if intKind = 3 then
> begin
> SQL.Add( 'AND REMARKS = :DEBIT_CARD' );
> ParamByName( 'DEBIT_CARD' ).AsString := strImss_No;
> end;
>
> Open;
> end;
>
> // 동일한 imss no가 있으면 수행한다.
> if qrySelect_ImssNo.RecordCount >= 1 then
> // 테이블이 insert 모드이면 수행한다.
> if tblPersonnel.State = dsInsert then
> begin
> // IMSS No 체크시 수행한다.
> if intKind = 1 then
> begin
> MessageDlg( 'Find Duplicate IMSS NO : ' + strImss_No + #10#13 +
> 'Company : ' + qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString + #10#13 +
> 'Contract No : ' + qrySelect_ImssNo.FieldByName( 'CONT_NO' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ImssNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ImssNo.FieldByName( 'IMSS_NO' ).AsString,
> mtWarning, [mbOK], 0 );
> edtImss_No.SetFocus;
> end
>
> // Employee No 체크시 수행한다.
> else if intKind = 2 then
> begin
> MessageDlg( 'Find Duplicate EMP NO : ' + strImss_No + #10#13 +
> 'Company : ' + qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString + #10#13 +
> 'Contract No : ' + qrySelect_ImssNo.FieldByName( 'CONT_NO' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ImssNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ImssNo.FieldByName( 'IMSS_NO' ).AsString,
> mtWarning, [mbOK], 0 );
> edtEmp_No.SetFocus;
> end
>
> // Debit Card 체크시 수행한다.
> else if intKind = 2 then
> begin
> MessageDlg( 'Find Duplicate Debit Card NO : ' + strImss_No + #10#13 +
> 'Company : ' + qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString + #10#13 +
> 'Contract No : ' + qrySelect_ImssNo.FieldByName( 'CONT_NO' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ImssNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ImssNo.FieldByName( 'IMSS_NO' ).AsString,
> mtWarning, [mbOK], 0 );
> edtDebit_Card.SetFocus;
> end;
> end;
>
> // IMSS NO 길이가 10자리 또는 11자리가 아니면 수행한다.
> // IMSS NO 체크시 수행한다.
> if intKind = 1 then
> begin
> if ( Length( strImss_No ) <> 10 ) and ( Length( strImss_No ) <> 11 ) then
> begin
> MessageDlg( 'IMSS NO length must be ''10'' or ''11''.', mtInformation, [mbOK], 0 );
> edtImss_No.SetFocus;
> end;
> end;
>
>
> // historical 정보에 동일한 imss no가 있는지 조회한다.
> with qrySelect_ImssNo do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT RESIGN_DATE, OCC_NAME, CO_NAME, RS_REASON, NAME, EMP_NO, DEBIT_CARD' );
> SQL.Add( 'FROM HRCS_HISTORY' );
> //SQL.Add( 'WHERE EMP_NO IS NOT NULL' );
> //SQL.Add( 'AND DEBIT_CARD IS NOT NULL' );
>
> // Kind Number
> // 1 : IMSS No check
> // 2 : Emp No check
> // 3 : Debit Card check
> if intKind = 1 then
> begin
> SQL.Add( 'WHERE IMSS_NO = :IMSS_NO' );
> ParamByName( 'IMSS_NO' ).AsString := strImss_No;
> end
> else if intKind = 2 then
> begin
> SQL.Add( 'WHERE EMP_NO = :EMP_NO' );
> ParamByName( 'EMP_NO' ).AsString := strImss_No;
> end
> else if intKind = 3 then
> begin
> SQL.Add( 'WHERE DEBIT_CARD = :DEBIT_CARD' );
> ParamByName( 'DEBIT_CARD' ).AsString := strImss_No;
> end;
>
> SQL.Add( 'ORDER BY RESIGN_DATE DESC' );
> Open;
> end;
>
> // historical 정보에 동일한 imss no가 있으면 수행한다.
> if qrySelect_ImssNo.RecordCount >= 1 then
> // 테이블이 insert 모드이면 수행한다.
> if tblPersonnel.State = dsInsert then
> begin
> // IMSS No 체크시 수행한다.
> if intKind = 1 then
> begin
> // 사원의 기본 정보가 나타내는 창을 동적으로 생성한다.
> frmContract_Information := TfrmContract_Information.Create( Self );
>
> with frmContract_Information do
> begin
> Caption := 'Find Duplicate IMSS NO : ' + strImss_No;
> lblEmp_No.Caption := qrySelect_ImssNo.FieldByName( 'EMP_NO' ).AsString;
> lblCompany.Caption := qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString;
> lblName.Caption := qrySelect_ImssNo.FieldByName( 'NAME' ).AsString;
> lblResign_Date.Caption := qrySelect_ImssNo.FieldByName( 'RESIGN_DATE' ).AsString;
> lblJob_Title.Caption := qrySelect_ImssNo.FieldByName( 'OCC_NAME' ).AsString;
>
> if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'COMPETENT' then
> begin
> lblResign_Reason.Caption := 'CONTRACT TERMINATION(COMPETENT)';
> pnlTransfer.Caption := 'Yes';
> pnlRecontract.Caption := 'Yes';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'INCOMPETENT' then
> begin
> lblResign_Reason.Caption := 'CONTRACT TERMINATION(INCOMPETENT)';
> pnlTransfer.Caption := 'Yes';
> pnlRecontract.Caption := 'No';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'TRANSFER WITHOUT' then
> begin
> lblResign_Reason.Caption := 'RESIGN(TRANSFER WITHOUT AUTHORIZATION';
> pnlTransfer.Caption := 'No';
> pnlRecontract.Caption := 'Yes';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'VIOLENCE' then
> begin
> lblResign_Reason.Caption := 'FIRE:(SUBSTANCE CONSUMPTION VIOLENCE)';
> pnlTransfer.Caption := 'No';
> pnlRecontract.Caption := 'No';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'BAD ATTITUDE' then
> begin
> lblResign_Reason.Caption := 'FIRE:INCOMPETENCE, BAD ATTITUDE, 3 ABSENCES, ABANDON WORKPLACE';
> pnlTransfer.Caption := 'Yes';
> pnlRecontract.Caption := 'No';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'LOW SALARY' then
> begin
> lblResign_Reason.Caption := 'RESIGN(LOW SALARY)';
> pnlTransfer.Caption := 'No';
> pnlRecontract.Caption := 'Yes';
> end
>
> else if qrySelect_ImssNo.FieldByName( 'RS_REASON' ).AsString = 'TRANSFER WITH' then
> begin
> lblResign_Reason.Caption := 'RESIGN(TRANSFER WITH AUTHORIZATION';
> pnlTransfer.Caption := 'Yes';
> pnlRecontract.Caption := 'Yes';
> end
>
> else
> begin
> lblResign_Reason.Caption := 'OTHERS';
> pnlTransfer.Caption := 'Yes';
> pnlRecontract.Caption := 'Yes';
> end;
>
> // 계약 여부를 확인하여야하기 때문에 ShowModal 폼으로 나타낸다.
> ShowModal;
> end;
> end
>
> // Employee No 체크시 수행한다.
> else if intKind = 2 then
> begin
> MessageDlg( 'Find Duplicate EMP NO : ' + qrySelect_ImssNo.FieldByName( 'EMP_NO' ).AsString + #10#13 +
> 'Company : ' + qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString + #10#13 +
> 'Resign Date : ' + qrySelect_ImssNo.FieldByName( 'RESIGN_DATE' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ImssNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ImssNo.FieldByName( 'IMSS_NO' ).AsString,
> mtWarning, [mbOK], 0 );
> edtEmp_No.SetFocus;
> end
>
> // Debit Card 체크시 수행한다.
> else if intKind = 3 then
> begin
> MessageDlg( 'Find Duplicate DEBIT CARD NO : ' + qrySelect_ImssNo.FieldByName( 'DEBIT_CARD' ).AsString + #10#13 +
> 'Company : ' + qrySelect_ImssNo.FieldByName( 'CO_NAME' ).AsString + #10#13 +
> 'Resign Date : ' + qrySelect_ImssNo.FieldByName( 'RESIGN_DATE' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ImssNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ImssNo.FieldByName( 'IMSS_NO' ).AsString,
> mtWarning, [mbOK], 0 );
> edtDebit_Card.SetFocus;
> end;
>
>
> end;
> end;
>
>
> // 계약된 사람중에 동일한 계약번호를 가진 사람있는지 조회하는 프로시저
> procedure TfrmDirect_Worker.Query_ContNo( strCont_No : string );
> begin
> // 현재 계약된 사람중에 동일한 계약번호를 가진 사람이 있는지 조회한다.
> with qrySelect_ContNo do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT CONT_NO, NAME, IMSS_NO' );
> SQL.Add( 'FROM HRCS_CONTRACT' );
> SQL.Add( 'WHERE CONT_NO = :CONT_NO' );
> ParamByName( 'CONT_NO' ).AsString := strCont_No;
> Open;
> end;
>
> // 동일한 계약번호가 있으면 수행한다.
> if qrySelect_ContNo.RecordCount >= 1 then
> // 테이블이 insert 모드이면 수행한다.
> if tblPersonnel.State = dsInsert then
> begin
> MessageDlg( 'Find Duplicate Contract No : ' + strCont_No + #10#13 +
> 'Contract No : ' + qrySelect_ContNo.FieldByName( 'CONT_NO' ).AsString + #10#13 +
> 'Name : ' + qrySelect_ContNo.FieldByName( 'NAME' ).AsString + #10#13 +
> 'IMSS No : ' + qrySelect_ContNo.FieldByName( 'IMSS_NO' ).AsString,
> mtInformation, [mbOK], 0 );
> edtCont_No.SetFocus;
> end;
>
> // 입력한 계약번호의 길이가 6자리가 아니면 수행한다.
> if Length( strCont_No ) <> 6 then
> begin
> MessageDlg( 'Contract No length must be ''6''.', mtInformation, [mbOK], 0 );
> edtCont_No.SetFocus;
> end;
> end;
>
>
> // 퇴직사유에 대한 데이터가 제대로 저장되지 않아 테이블 포스트시
> // 한번 더 업데이트해주는 프로시저.
> procedure TfrmDirect_Worker.UpdateD313;
> begin
> if cmbType_Resign.Text <> '' then
> begin
> if cmbType_Resign.Text = 'Contract Termination(Competent)' then
> tblPersonnelD313.Value := 1
> else if cmbType_Resign.Text = 'Contract Termination(Incompetent)' then
> tblPersonnelD313.Value := 2
> else if cmbType_Resign.Text = 'Resign(Transfer without Authorization)' then
> tblPersonnelD313.Value := 3
> else if cmbType_Resign.Text = 'Fire:Substance Consumption Violence)' then
> tblPersonnelD313.Value := 4
> else if cmbType_Resign.Text = 'Fire:Incompetence, Bad Attitude, 3Absences, Abandon Workplace' then
> tblPersonnelD313.Value := 5
> else if cmbType_Resign.Text = 'Resign(Low Salary)' then
> tblPersonnelD313.Value := 6
> else if cmbType_Resign.Text = 'Resign(Transfer with Authorization' then
> tblPersonnelD313.Value := 7
> else if cmbType_Resign.Text = 'Others' then
> tblPersonnelD313.Value := 8
> end;
> end;
>
>
> // 폼을 닫을 때 테이블과 쿼리를 닫고 메모리에서 해제한다.
> procedure TfrmDirect_Worker.FormClose(Sender: TObject;
> var Action: TCloseAction);
> begin
> tblPersonnel.Close;
> qryCategory.Close;
> qryJob_Title.Close;
> qryUnit.Close;
> qrySuperint.Close;
> qryCompany.Close;
> qryNation.Close;
> qryTrans_Depart.Close;
> qryCamp_No.Close;
> qryDiscipline.Close;
> qrySelect_ImssNo.Close;
> qrySelect_ContNo.Close;
> CurrentForm.Direct_Worker := False;
> Action := caFree;
> end;
>
>
> // 폼을 닫는다.
> procedure TfrmDirect_Worker.cmdCloseClick(Sender: TObject);
> begin
> Close;
> end;
>
>
> // 폼을 생성할 때 로그인 사용자에 따라
> procedure TfrmDirect_Worker.FormCreate(Sender: TObject);
> var
> pstrFilter : string;
> begin
> CurrentForm.Direct_Worker := True;
>
> with tblPersonnel do
> begin
> Close;
> TableName := conHRCSContract;
> ReadOnly := StrToReadOnly( FormPriv.Direct_Worker );
> Open;
> end;
>
> qryJob_Title.Open;
> qrySuperint.Open;
> qryUnit.Open;
> qryCategory.Open;
> qryCompany.Open;
> qryNation.Open;
> qryTrans_Depart.Open;
> qryCamp_No.Open;
> qryDiscipline.Open;
>
> PageControl.ActivePage := tshtEdit_Information;
>
> pstrFilter := 'GROUP_CODE = ''DW' + '''';
> tblPersonnel.Filter := pstrFilter;
> end;
>
>
> procedure TfrmDirect_Worker.cmbCompanyChange(Sender: TObject);
> var
> pstrFilter : string;
> begin
> try
> pstrFilter := 'CO_NO = ' + cmbCompany.LookupValue ;
> tblPersonnel.Filter := pstrFilter;
> except
> Application.MessageBox( 'Company selection is wrong', 'ERROR', MB_OK );
> end;
> end;
>
>
> procedure TfrmDirect_Worker.tblPersonnelNewRecord(DataSet: TDataSet);
> begin
> tblPersonnel.FieldbyName( 'CO_NO' ).AsString := cmbCompany.LookupValue;
> tblPersonnel.FieldbyName( 'GROUP_CODE' ).AsString := 'DW';
> end;
>
>
> procedure TfrmDirect_Worker.ToolButton1Click(Sender: TObject);
> begin
> wwFilterDialog.Execute;
> end;
>
>
> procedure TfrmDirect_Worker.FormKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> begin
> if Key = VK_RETURN then
> Perform( WM_NEXTDLGCTL, 0, 0 );
> end;
>
>
> procedure TfrmDirect_Worker.cmdPrintClick(Sender: TObject);
> begin
> if not CurrentForm.Direct_Worker_Report then
> frmDirect_Worker_Report := TfrmDirect_Worker_Report.Create( Self );
>
> frmDirect_Worker_Report.Show;
> end;
>
>
> // cont no 란에 키가 눌려지면 수행한다.
> procedure TfrmDirect_Worker.edtCont_NoKeyDown(Sender: TObject;
> var Key: Word; Shift: TShiftState);
> begin
> // 테이블이 edit, insert 모드이면 동일 계약번호 여부를 수행한다.
> if ( tblPersonnel.State = dsEdit ) or ( tblPersonnel.State = dsInsert ) then
> if key = VK_RETURN then
> Query_ContNo( edtCont_No.Text );
> end;
>
>
> // Imss no 란에 키가 눌려지면 수행한다.
> procedure TfrmDirect_Worker.edtImss_NoKeyDown(Sender: TObject;
> var Key: Word; Shift: TShiftState);
> begin
> // 테이블이 edit, insert 모드이면 동일 imss no 여부를 수행한다.
> if ( tblPersonnel.State = dsEdit ) or ( tblPersonnel.State = dsInsert ) then
> if key = VK_RETURN then
> // Kind Number
> // 1 : IMSS No check
> // 2 : Emp No check
> // 3 : Debit Card check
> Query_ImssNo( 1, edtImss_No.Text );
> end;
>
>
> procedure TfrmDirect_Worker.tblPersonnelBeforePost(DataSet: TDataSet);
> begin
> if tblPersonnel.State = dsInsert then
> begin
> // 테이블 post 하기전 동일 imss no, cont no가 있는지 조회한다.
> // Kind Number
> // 1 : IMSS No check
> // 2 : Emp No check
> // 3 : Debit Card check
> Query_ImssNo( 1, edtImss_No.Text );
> Query_ImssNo( 2, edtEmp_No.Text );
> Query_ImssNo( 3, edtDebit_Card.Text );
> Query_ContNo( edtCont_No.Text );
> end;
>
> Query_ImssNo( 1, edtImss_No.Text );
>
> // 테이블 포스트 하기 전 퇴직 사유가 입력되어 있으면 퇴직 사유에 대한 데이터
> // 를 한번 입력해 준다.
> if cmbType_Resign.Text <> '' then
> UpdateD313;
> end;
>
>
> procedure TfrmDirect_Worker.ppmuKorean_NameClick(Sender: TObject);
> begin
> with qrySuperint do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT C.KOR_NAME, C.CONT_NO, C.NAME, D.DISCI_NAME, C.CHARGE_WORK ' );
> SQL.Add( 'FROM HRCS_CONTRACT C, HRCS_DISCIPLINE D ' );
> SQL.Add( 'WHERE C.GROUP_CODE = ''SK'' ' );
> SQL.Add( 'AND C.DISCI_CODE >= 50 ' );
> SQL.Add( 'AND C.DISCI_CODE = D.DISCI_CODE(+) ' );
> SQL.Add( 'ORDER BY C.KOR_NAME, C.DISCI_CODE, C.CHARGE_WORK' );
> Open;
> end;
>
> cmbSuperint.Selected.Exchange( 1, 0 );
> cmbSuperint.DropDown;
> end;
>
>
> procedure TfrmDirect_Worker.ppmnEnglish_NameClick(Sender: TObject);
> begin
> with qrySuperint do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT C.NAME, C.CONT_NO, D.DISCI_NAME, C.CHARGE_WORK ' );
> SQL.Add( 'FROM HRCS_CONTRACT C, HRCS_DISCIPLINE D ' );
> SQL.Add( 'WHERE C.GROUP_CODE = ''SK'' ' );
> SQL.Add( 'AND C.DISCI_CODE >= 50 ' );
> SQL.Add( 'AND C.DISCI_CODE = D.DISCI_CODE(+) ' );
> SQL.Add( 'ORDER BY C.NAME, C.DISCI_CODE ASC, C.CHARGE_WORK' );
> Open;
> end;
>
> cmbSuperint.Selected.Exchange( 0, 1 );
> cmbSuperint.DropDown;
> end;
>
>
> procedure TfrmDirect_Worker.ppmnCont_NoClick(Sender: TObject);
> begin
> with qrySuperint do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'SELECT C.CONT_NO, C.NAME, D.DISCI_NAME, C.CHARGE_WORK ' );
> SQL.Add( 'FROM HRCS_CONTRACT C, HRCS_DISCIPLINE D ' );
> SQL.Add( 'WHERE C.GROUP_CODE = ''SK'' ' );
> SQL.Add( 'AND C.DISCI_CODE >= 50 ' );
> SQL.Add( 'AND C.DISCI_CODE = D.DISCI_CODE(+) ' );
> SQL.Add( 'ORDER BY C.CONT_NO, C.DISCI_CODE ASC, C.CHARGE_WORK' );
> Open;
> end;
>
> cmbSuperint.Selected.Exchange( 2, 0 );
> cmbSuperint.DropDown;
> end;
>
>
> // Resign Date를 입력하면 카드 번호를 컨트롤러에서 삭제하기 위해
> // HRCS_CARDTAG 테이블에 저장한다.
> procedure TfrmDirect_Worker.tmpResign_DateDragDrop(Sender, Source: TObject;
> X, Y: Integer);
> var
> qryDelete_CardTag : TwwQuery;
> begin
> // 쿼리 컴포넌트를 동적으로 생성하고 속성을 설정한다.
> qryDelete_CardTag := TwwQuery.Create( Self );
> qryDelete_CardTag.Close;
> qryDelete_CardTag.DatabaseName := conDBAlias;
>
> // Resign_Date가 널값이 아니면 수행한다.
> if tmpResign_Date.Text <> '' then
> begin
> // 카드 번호를 HRCS_CARDTAG 테이블에 insert한다.
> with qryDelete_CardTag do
> begin
> Close;
> SQL.Clear;
> SQL.Add( 'INSERT INTO HRCS_CARDTAG' );
> SQL.Add( 'VALUES ( :CARD_TAG, ''N'' )' );
> ParamByName( 'CARD_TAG' ).AsString := edtCard_Tag.Text;
> ExecSQL;
> end;
> end;
>
> // 쿼리 컴포넌트를 닫고 메모리에서 해제한다.
> qryDelete_CardTag.Close;
> qryDelete_CardTag.Free;
> end;
>
>
> // Refresh 버튼을 클릭하면 수행한다.
> procedure TfrmDirect_Worker.wwDBNavigator1RefreshClick(Sender: TObject);
> var
> pstrFilter : string;
> begin
> // 그룹코드로 다시 필터건다.
> tblPersonnel.Close;
> tblPersonnel.Open;
> pstrFilter := 'GROUP_CODE = ''DW''';
> tblPersonnel.Filter := pstrFilter;
> end;
>
>
> // 레코드 이동시 수행한다.
> // 계약 승인 되고난 후 계약 날짜를 수정하지 못하게 한다.
> procedure TfrmDirect_Worker.tblPersonnelAfterScroll(DataSet: TDataSet);
> begin
> tmpCont_Date.ReadOnly := ContractDateToReadOnly( edtApp_By.Text );
> end;
>
> end.