Q&A

  • Re: [급한질문] 해괴 망측한 현상...
안녕하십니까? 델 초보입니다.



전 답변 자격이 없지만 제 생각을 말씀드리려 합니다.



부디 용서하시길...



운영체제가 윈도우라면 제어판에서 국가별설정중 날짜부분을 요모저모로



변경하여 보시고



윈도우 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.

0  COMMENTS