Q&A

  • DBgrid에 날짜를 자동 삽입하고 증가시키는 법좀 가르쳐주세요(빨리좀)!!!


안녕하세요, 델파이 관계자 여러분들!!!

전 지금 인터베이스를 사용해서 간단한 도서관리DB를 만들고 있는 중입니다.

근데 도서대출DB에 보면 반납일, 대출일이 있잖습니까?



1.대출해간 날짜를 일일이 키보드로 입력을 해야하더군요(제꺼요). 대출날짜를

책이름만 적으면 날짜는 자동으로 입력되게 할 수 없나요, 그날그날에 날짜

를요.



2.그리구요, 반납일에는 만약 도서대여기간이 10일 이라면 대출일에서 10일 후

의 시간인 반납날짜를 자동을 생기게 하려구요.



3.또, 대여기간이 지나면 반납확인란에 "미납"이라고 자동으로 생기게 하고 싶은

데요



고수님들의 조언 부탁드립니다.

그럼 항상 좋은 하루되시구요, 답변 꼭 부탁드립니다.

4  COMMENTS
  • Profile
    이쁘니 2000.05.20 01:04
    안냥하세요..오늘은 하늘이 꺼메요..비가와서..마니오네요..후후



    엄..보자...엄..날짜는요



    Edit1.text := 책이름;

    Edit2.text := DateToStr(Date()); <== 하면 자동으로 들어가구요..

    Edit3.text := DateToStr(Date() + 10); <= 하면 10일이 더해진 날짜가 들어가구요



    if Date() > StrToDate(Edit3.text) then

    Edit4.text := '미납';



    하시면 될껍니다..



    도움이 되었으면 조
  • Profile
    델_맹 2000.05.20 03:19
    넘 감사합니다 꾸~~~~뻑.

    이렇게 답변을 주셔서.....

    *근데 DBgrid에서 바로 구현하는 방법은 없는지....

    죄송합니다.

    부탁드릴께요.





    이쁘니 wrote:

    > 안냥하세요..오늘은 하늘이 꺼메요..비가와서..마니오네요..후후

    >

    > 엄..보자...엄..날짜는요

    >

    > Edit1.text := 책이름;

    > Edit2.text := DateToStr(Date()); <== 하면 자동으로 들어가구요..

    > Edit3.text := DateToStr(Date() + 10); <= 하면 10일이 더해진 날짜가 들어가구요

    >

    > if Date() > StrToDate(Edit3.text) then

    > Edit4.text := '미납';

    >

    > 하시면 될껍니다..

    >

    > 도움이 되었으면 조
  • Profile
    이쁘니 2000.05.20 05:41


    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    if Key = VK_RETURN then

    begin

    IF (table1.State = dsInsert) and

    (Table1.FieldByName(책이름).asString <> '') then

    begin

    table1.FieldByName(오늘날짜).asDate := Date();

    table1.FieldByName(마감날짜).asDate := Date() + 10;



    if Date() > table1.FieldByName(오늘날짜).asDate then

    table1.FieldByName(미납여부).asString := '미납';

    end;

    end;



    end;

    =====================================================================

    델_맹 wrote:

    > 넘 감사합니다 꾸~~~~뻑.

    > 이렇게 답변을 주셔서.....

    > *근데 DBgrid에서 바로 구현하는 방법은 없는지....

    > 죄송합니다.

    > 부탁드릴께요.







  • Profile
    조규춘 2000.05.20 04:10
    델_맹 wrote:

    > 넘 감사합니다 꾸~~~~뻑.

    > 이렇게 답변을 주셔서.....

    > *근데 DBgrid에서 바로 구현하는 방법은 없는지....

    > 죄송합니다.

    > 부탁드릴께요.



    보니깐 바로 table1.insert 일때 처리 할껀지 아님 table1.edit일때 인지



    적어 넣지 않았군요~!

    그래서



    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    if (key=vk_return) and (table1.State = dsInsert) then

    begin

    table1.insert;

    table1.fieldbyname('필드이름').asstring := dbedit1.text;

    :

    :

    :

    table1.post;

    end;

    end;



    위에것을 설명하면 키다운 이벤트에서 입력 또는 수정을 끝내는 것을 엔터라고 친다면...

    엔터를 쳤을때 테이블의 상태가 추가상태라면....

    이제 그 값을 집어 넣는 거지요...



    데이터소스 컴포넌트 속성 중에는 state라는 읽기전용 속성이 있는디

    그 종류와 의미는 대강 이렇습니다.

    dsinactive - 데이터셋이 닫혀있다.

    dsbrowse - 데이터셋이 테이블을 탐색하기 위한 모드로 연결되어 있다.

    dsedit - 테이블의 편집모드이다.

    dsinsert - 테이블에 새로운 레코드가 추가되고 있다.

    dssetkey - 데이터셋이 인덱스를 사용하여 검색하기 위한 모드이다.

    dscalcfields - 데이터셋의 oncalcfield 이벤트가 실행중이다.

    dsfilter - 필터를 사용하여 걸러내기 중이다.

    질문한 거와 같은 현상은 db에 저장이 되지 않은 상태에서 나타납니다. 그러니

    추가(insert)나 수정(edit)상태에서 입력하면 post를 해주어야 합니다.









    >

    >

    > 이쁘니 wrote:

    > > 안냥하세요..오늘은 하늘이 꺼메요..비가와서..마니오네요..후후

    > >

    > > 엄..보자...엄..날짜는요

    > >

    > > Edit1.text := 책이름;

    > > Edit2.text := DateToStr(Date()); <== 하면 자동으로 들어가구요..

    > > Edit3.text := DateToStr(Date() + 10); <= 하면 10일이 더해진 날짜가 들어가구요

    > >

    > > if Date() > StrToDate(Edit3.text) then

    > > Edit4.text := '미납';

    > >

    > > 하시면 될껍니다..

    > >

    > > 도움이 되었으면 조