Q&A

  • 데이터 입력(번호자동증가) 좀 봐주세요..
db는 파라독스구요 필드명은 num (pk로 설정했구요 type은 N), 학년, 이름, 국어, 영어, 수학 입니다. num 입력은 자동으로 하려구 하는데요.. 잘 안되네요..  일단 아래처럼 하면 dbgrid에 num1 들어가구 밑에 num 안들어가구 학년 이름 국어 영어 수학. 이렇게 들어가네요..
tablebeforeinsert, afterinsert를 해도 그렇고..-.-  쿼리문에 num를 넣으면 에러생기고.. 도움좀 주세요...

procedure TForm1.button2Click(Sender: TObject);

begin

datamodule1.aa.close;
datamodule1.aa.sql.clear;

datamodule1.aa.sql.add('insert into test ( 학년, 이름, 국어, 영어,
수학)');
datamodule1.aa.sql.add('values ( :학년, :이름, :국어, :영어, :수학)');
            
datamodule1.Table1.Edit;
datamodule1.table1.FieldByName('num').asinteger:=
datamodule1.table1.RecordCount+1);


datamodule1.aa.ParamByName('학년').asstring:=(combobox1.text);
datamodule1.aa.ParamByName('이름').asstring:=(combobox2.text);
datamodule1.aa.ParamByName('국어').asstring:=(combobox3.text);
datamodule1.aa.ParamByName('영어').asstring:=(combobox4.text);
datamodule1.aa.ParamByName('수학').asstring:=(combobox4.text);
datamodule1.aa.execsql;

4  COMMENTS
  • Profile
    한주영 2004.03.26 18:37
    멀티유저환경이라면 위험한 방법입니다.
    Select max(num) from..
    으로 들어가는 방법역시 위험합니다.


    한사용자가 값을 얻고 값을 저장하기 전에 다른 사용자가 값을 얻어 버리면 두명이상의 사용자가 동일한 값을 얻을 가능성이 높습니다.

    dbms에서 autoincrement를 사용하지 않고 generator를 사용하는 이유가 이런 이유입니다.

  • Profile
    너구리 2004.03.26 02:43
    num 이란것이 PK라면 recordCount보다는

    select max(num)
    from table_name

    이렇게 구해 오셔야 될겁니다.

    이것도 좋은 방법은 아닙니다만.(멀티 유저 일때는 다른방법을 써야 되요)

    RecordCount가 정말로 원하는 값이 나오는지 스텝을 밟아가면서 보세요

    에디터 안에 왼쪽에 파란색으로 점들이 있을겁니다.

    클릭하면 빨간색으로 바뀌는데요..

    그럼 runtime중에 값을 볼수 있습니다.

    보는 방법은 Ctrl + F7 거기에 datamodule1.table1.RecordCount+1)

    이렇게 넣으면 값이 나옵니다.

    RecordCount는 안쓰시는게 좋을겁니다.

    자세한 내용은 HELP에 있어요

    꼭 아래처럼 하셔야 한다면 RecordCount쓰기전에

    datamodule1.table1.FetchAll;

    저것을 넣어보십시오.. 그럼 값이 잘나올겁니다.


  • Profile
    왕초보 2004.03.26 21:28
    답변감사합니다.
    max값 구해서 한다면.. 아래처럼 하니까 type mismatch 에러가 생기는데요..
    에구.. 코드 좀 봐주세요...

    procedure TForm1.button2Click(Sender: TObject);
    var maxnum : integer;
    begin

    datamodule1.aa.Close;
    datamodule1.aa.SQL.Clear;
    datamodule1.aa.SQL.Add('select max(num) as maxnum from test');
    datamodule1.aa.Open;
    maxnum := datamodule1.aa.fieldbyname('maxnum').AsInteger;

    datamodule1.aa.close;
    datamodule1.aa.sql.clear;

    datamodule1.aa.sql.add('insert into test (num, 학년, 이름, 국어, 영어,
    수학)');
    datamodule1.aa.sql.add('values (:num, :학년, :이름, :국어, :영어, :수학)');
                

    datamodule1.aa.ParamByName('num').asstring:=maxnum+1;
    datamodule1.aa.ParamByName('학년').asstring:=(combobox1.text);
    datamodule1.aa.ParamByName('이름').asstring:=(combobox2.text);
    datamodule1.aa.ParamByName('국어').asstring:=(combobox3.text);
    datamodule1.aa.ParamByName('영어').asstring:=(combobox4.text);
    datamodule1.aa.ParamByName('수학').asstring:=(combobox4.text);
    datamodule1.aa.execsql;

  • Profile
    돌아버려 2004.03.26 02:39
    컬럼 type을 autoincrement로 설정하시면...

    레코드 추가 할때 자동증가 되는걸로 기억하는데요.^^;


    도움이 되셨길 바랍니다.즐코하세요.^^

    • 김현철
    • 2004.03.26 05:44
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.03.26 18:51
      데이타셋의 구성을 이용해서 뿌려주니깐 TField쪽을 보셔야 할거 같은데요.. 저도 저런 현상을 본적...
    • 김현철
      2004.03.26 22:35
      db의 값이 0입니다.... TField의 자료형도 real타입으로 해 봤는데도... 결과가 같습니다.. 임시로 lable...
    • 류동완
    • 2004.03.26 05:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장덕곤
      2004.03.26 07:39
      에스큐엘 익스플로러에서  잡혀져 있는 알리어스를 더블클릭하신후 sql 란에서 select * from...
    • 너구리
    • 2004.03.26 03:14
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.03.26 10:11
      안녕하세요. 최용일입니다. 둘 다 메소드를 재정의 할 때 쓰입니다. override는 똑같은형태의 메소드...
    • 너구리
      2004.03.26 18:41
      그렇다면 reintroduce를 쓰면 overroad는 안써도 되나요?? 헬프에 보니깐 overroad와 reintroduce를 같...
    • 최용일
      2004.03.26 20:33
      안녕하세요. 최용일입니다. override와 overload는 다른 것입니다. overload는 같은 이름을 가지며 ...
    • KDDG_BaSTaD
      2004.03.26 23:45
    • 왕초보
    • 2004.03.26 02:22
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 한주영
      2004.03.26 18:37
      멀티유저환경이라면 위험한 방법입니다. Select max(num) from.. 으로 들어가는 방법역시 위험합니다. ...
    • 너구리
      2004.03.26 02:43
      num 이란것이 PK라면 recordCount보다는 select max(num) from table_name 이렇게 구해 오셔야 될겁...
    • 왕초보
      2004.03.26 21:28
      답변감사합니다. max값 구해서 한다면.. 아래처럼 하니까 type mismatch 에러가 생기는데요.. 에구.. 코...
    • 돌아버려
      2004.03.26 02:39
      컬럼 type을 autoincrement로 설정하시면... 레코드 추가 할때 자동증가 되는걸로 기억하는데요.^^; ...
    • Galaxy
    • 2004.03.26 00:17
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Cali
      2004.03.26 00:47
      .DB 는 원래 database 화일 .PX 는 Primary key 화일 .MB 는 BLOB 필드가 있는경우에 생성되는 화일로 알...
    • 강동균
      2004.03.26 01:21
      전에 저도 궁금하여 김영대님께 여쭈었더니 다음과 같이 보내주시더군요. 몰라도 되구요.  참...
    • Galaxy
      2004.03.26 02:05
    • 메디컴
    • 2004.03.25 23:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2004.03.26 02:19
      아래 소스처럼 바꿔 보셨어요? procedure TForm1.SpeedButton2Click(Sender: TObject); var  &...
    • 너구리
      2004.03.25 22:04
      DB Class에서는 클래스만 구현해주고. 각각의 유닛에서 객체를 만들어서 사용해야 겠지요.. Form1 과...
    • 연기훈
      2004.03.25 22:19
      네.. 폼에서 클래서 정의 및 생성하고 사용합니다.. DB module에서 Query, DataSouce 컴포넌트를 공유...
    • 너구리
      2004.03.25 22:38
      DB Class파일하고 적용된 부분을 보여주세요.. 그리고 에러 메세지도....모여주시면 답을 드리는데 도움...
    • 왕초보
    • 2004.03.25 21:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 꿈의대화
      2004.03.25 23:46
      .
    • 왕초보
      2004.03.26 00:23
      답변 감사합니다. shellApi를 통해서 하면 될 것 같다고 하신 김문수라는 분이 계시네요. 근데 제가 워...
    • KDDG_Apine
      2004.03.26 05:59
      안녕하세요.. 제가 알고 있기로는 인디에 있는 mailClient로 smtp의 서버 주소 그리고 포트  ...
    • KDDG_BaSTaD
      2004.03.26 20:41
      ==> 안녕하세요 BaSTaD 입니다. 전송이 중간에 취소되거나 연결이 종료될때 Exception 이 발생하...
    • 채태숙
      2004.03.25 20:18
      select aaa[--필드명], count(*) from table1 group by aaa having count(aaa) > 1 이렇게 하시...
    • 박수영
      2004.03.25 19:46
      Key값이 아니라면 select하는 것이 가장 정확하지 않을까요???
    • 연기훈
      2004.03.25 19:09
      하나의 중복 값만 찾으면 되는건지...? group by 로 그룹 잡고 count 해주면 중복 데이타 수랑 다나오자...
    • Galaxy
      2004.03.26 00:10
    • 너구리
      2004.03.25 20:30
      저 한테 있기는 한데 델파이 6버젼이 있기는 한데.. 버젼이 맞을지..그리고 FreeWare라면 드릴께요.. ...
    • 박대원
    • 2004.03.25 02:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 권영길
      2004.03.25 02:15
      http://www.techvanguards.com/products/eventsinkimp/ 여기서 제공되는 툴을 써서 이벤트관련 TLB를 생성...
    • 박대원
      2004.03.25 03:34
      답변 감사합니다. EventSinkImp 라는 프로그램을 설치하고 TypeLibrary 에서 Import 해줬습니다. 그...
    • 권영길
      2004.03.25 04:45
      제가 자세한건 살펴볼수 없으나 EventSinkImp에서 생성해주는 유닛을 사용할 경우 대략의 스토리는 이렇습...
    • 1학년
    • 2004.03.25 01:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박수영
      2004.03.25 01:26
      우선 출력할 부분이 열자리면 열자리만큼을 스패이스로 채운뒤에 숫자의 길이만큼 for i := lengt...
    • 김승재
    • 2004.03.25 00:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최성준
      2004.03.25 01:16
      질문1 : 델파이 project - options에서 forms tab에서        &n...
    • 별볼일없는
      2004.03.25 01:10
      저두 초보지만 아주 초보적인 질문이네요.. ㅋㅋ 1번건은 메인 메뉴에 porject 에서 options 들어...
    • 김승재
      2004.03.25 18:26
      ㅎㅎ
    • 서기원
      2004.03.30 02:22
      벌써 답을 찾으셨을 것 같긴 한데... ActiveX의 Destory 메소드에서 처리하시면 될겁니다. 그럼..
    • 김기원
      2004.03.25 01:17
      QRCompositeReport 를 사용해보세요... QuickRep 를 한 폼에 두개 만드시고 각각 QuickRep에 Grid1의 내용...
    • 장덕곤
      2004.03.26 07:43
      이방법도 있을거같네요 프린터버튼을 클릭할때 따로 SQL을 작성해서 돌리는 겁니다 sql은 select * from...
    • 송종환
    • 2004.03.25 00:21
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이강승
    • 2004.03.25 00:06
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.03.25 02:52
      그런데 프로그램 업데이트를 하면 파일을 카피하더라도 이미 실행중인 프로그램하고 이름이 같을텐데.. ...
    • KDDG_Cali
      2004.03.25 00:18
      폼의 FormPaint 부분에서 처리하심이..... 그럼.. GG KDDG_
    • 이강승
      2004.03.25 00:47
      답변감사합니다. 하지만 심각한 에러가 발생하더군요 ;; 다음의 방법으로도 가능하네요. 조잡한 방법같은...
    • 김기원
      2004.03.25 01:40
      FormCreate 이벤트에서 PostMessage 를 이용 해보세요...