Q&A

  • [질문] DBGrid 에서 선택한 row의 값 불러오기..
안녕하세요
DBGrid와 쿼리를 이용해서 DBGrid에 값을 불러왔습니다..
그 중에서 사용자가 선택한 row의 데이터들을 edit 에 넣고싶은데요..

커서의 위치에 해당하는 row의 데이터들을 받아올 수 있는 방법이 있나요?

만약.. 테이블에

     이름      나이         주소             전화번호             아이디         비밀번호
-------------------------------------------------------------------------------------------
    가나다     15         서울시    010-1234-5678        aaaa         asasasas
    호호호     20         인천              NULL                  fffffff          eeeeeeeee  

라는 데이터가 했다고 했을때..

DBGrid에는

     이름      나이         주소          아이디
---------------------------------------------------
    가나다     15         서울시        aaaa
    호호호     20         인천           fffffff    

위의 형태로 일부 데이터(전화번호, 비밀번호)를 삭제하고 출력하고 있습니다.

이때, 사용자가 '가나다' row를 선택했다면 (여기서는 셀 선택 아니고 row가 선택되게 했습니다)    
그 row의 모든 데이터들 (즉...  이름,  나이, 주소, 전화번호, 아이디, 비밀번호)을
각각의 edit에 넣고 싶은것입니다..
숨겨놓은 필드(전화번호, 비밀번호)는 그 데이터를 받아올 수 없는 것인가요..?

기본적으로 edit에 넣으려면 edit1.text := ____________  라는것은 알고 있는데..
저 오른쪽의 _______________ 가 뭔지를 모르겠습니다..

만약 edit box를 db edit box를 쓰게 되면
수정된 값이 자동으로 db에 적용될수는 있는지요?
아니면 '수정'과 같은 버튼을 하나 만들어서 클릭 했을 때, 이벤트를 줘야 하는건지요..?

비슷한 답변이 몇개 있는것 같긴 했는데
제 검색 실력이 미달인건지 이해 능력이 미달인건지..  도통 잘 모르겠습니다 -_-;;;;;;


고수님들의 자세한 설명 (예제가 있다면 더 감사하겠습니다 ^^;) 부탁드리겠습니다~
그냥 넘기지 마시고.. 도와주세요.... (_ _)
2  COMMENTS
  • Profile
    김병윤 2008.06.05 12:37
    기본적으로 DATA는
    Query한값을 --> DataSource를 통해 --> DBGrid에 보여줍니다.
    결과적으로 Query의 값이 실제 데이터를 불러온 부분이란 것이죠
    row가 변하면 같이 변하게 할때
    일반 Edit사용시에는 Query의 AfterScroll 이벤트를 사용해서 스크롤이 일어날때

    IF Not Query.IsEmpty Then
    Begin
    Edit1.Text := Query.FieldByName('전화번호').AsString;
    Edit2.Text := Query.FieldByName('비밀번호').AsString;
    End
    Else Begin
    Edit1.Text := '';
    Edit2.Text := '';
    End;

    뭐 이런식으로 표현해주시면 됩니다.

    그리고 DBEdit를 사용하신다면 수정하고 다른 곳으로 Focus가 이동하게 되면 저장이 됩니다.
    (Query의 경우 RequestLive 속성을 True로 해주시고 사용하셔야 합니다.)
    하지만 정확한 저장을 위해 수정(Edit) 저장(Post)버튼을 두고 수정,저장 작업이 되도록 하는것이 좋을 듯 보입니다.
  • Profile
    화이팅 2008.06.07 05:33
    고맙습니다..^^ 덕분에 잘 해결되었습니다~
    • steps
    • 2008.06.14 02:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.15 02:26
      자답입니다. 코드에서 이미지처리에 리용된 GDI PLUS가 문제였습니다. GDI Plus를 쓴 경우 우의 증상...
    • 화이팅
    • 2008.06.14 00:54
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깔쌈보이
      2008.06.14 02:51
      with mainf do begin 문장에 보면 name := 어쩌구 구문 있죠? 이 구문에 한글이 들어가서 발생한 오류입...
    • 화이팅
      2008.06.14 03:44
      이름을 바꾸니 위와같은 에러는 발생하지 않네요.. 깔삼보이님 감사합니다^^ 근데 실행을 시키면 아무런...
    • 석주현
      2008.06.19 02:44
      Form2.QuickRep1.Prepare; 를 해주시고 Preview 를 하셔야 합니다.
    • 김길남
    • 2008.06.14 00:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.13 20:21
      이름으로 찾는 FindComponent를 사용해 보세요. 그리고 FrmMain는 그촘의 이름입니다. <!--CodeS--&...
    • 강태원
      2008.06.13 20:53
      아하 저런 함수가 있었군요. 감사합니다. 이제 할수 있을듯...^^
    • 이정욱
      2008.06.13 21:04
      한가지 더 팁을 알려드리면, FindComponent 를 사용하셔도 무방합니다. 하지만 성능상의 잇점을 조금...
    • 강태원
      2008.06.14 00:15
      아하.. 밑쪽의 방법도 괜찮은데요?^^; 근데 이미 다 해놨는데... 바꿔야 하나...(이놈의 게으름..-...
    • 석주현
      2008.06.14 11:52
      아래쪽의 방법이 더 나은거 같네요. 코드 컴프리트 같은 책이나 아니면 보통 프로그래밍 관련 책들을 ...
    • 천천히
    • 2008.06.11 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.12 02:22
      for문 다음에 rowcount := rowcount + 1; 이렇게하면 보이겠네요. 전번에 처럼 rowcount로 하시면...
    • 홍성락
      2008.06.12 04:38
      2가지 방법으로 해보겠습니다. 1방법은 그냥 넣을때 곰마를 넣습니다, 그러나 실제 데이타와 다르므로 ...
    • 천천히
      2008.06.13 00:06
      님말씀대로 formatfloat 함수
    • 홍성락
      2008.06.13 03:10
      FormatFloat인자가 Variant라서 그런가봅니다 Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarTo...
    • 천천히
      2008.06.13 19:09
      홍성락님..답변 감사합니다.. 그런데 또 에러가... ㅠ..ㅠ Cells[1, i+1] := FormatFloat('#,##0', ...
    • 홍성락
      2008.06.13 20:15
      아마 위에서 말한것 처럼 데이타에 숫자가아닌 값이 있나 보네요. try를 사용해 함수내 놓거나 별고 함...
    • 천천히
      2008.06.14 00:26
      감사합니다.. 해결했습니다... ^^; 복 받으세요...
    • 플루토
    • 2008.06.11 01:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.11 05:23
      파일을 다운로드하든 메모리에 스트림으로 써넣든 클라이언트에 이미지자료가 오기전에는 불가능합니다.
    • 이정욱
      2008.06.11 06:26
      만약 이미지가 커서 그런다면, 이미지 썸네일을 생성 후 받아서 보여주시면 됩니다.
    • 장성호
      2008.06.10 03:14
      <!--CodeS--> procedure TForm1.Button2Click(Sender: TObject); var idx: Integer; begin ...
    • 강태원
      2008.06.10 18:05
      아 C++ 처럼 형변환이 가능하군요. 감사합니다.
    • 석주현
      2008.06.10 03:06
      DateTimeToFileTime(EncodeDateTime(2008,6,9, 17,25,00,00)); EncodeDateTime 으로 한번 해보세요. ...
    • 이정욱
      2008.06.11 00:29
      FileTimeToLocalFileTime 를 참고해보세요 ^^ 우리나라의 GMT 타임 존이 다르기 때문입니다. 위의 ...
    • 석주현
      2008.06.11 09:41
      역씨 정욱님 대단하시네요. ^^ 저도 좋은거 배웠네요.
    • 장성호
      2008.06.10 03:54
      OpenDialog에서 파일명이 들어가는 부분은 ComboBox 입니다. vcl에서도 마찬가지 그렇지만 ComboB...
    • 백록화
      2008.06.10 00:49
      edit 의 imemode 가 imDontCare 이라면...다른 콤포넌트의 영향을 받을수 있습니다. edit1 에 들어오기전...
    • 바다소리
      2008.06.10 01:16
      감사 합니다 검색을위해 호출되는 하위 폼의 edit box에 imemode를 한글로 했었는데 거기서 영향을 ...
    • 임정미
      2008.06.09 09:31
      해결했습니다. 배열크기는 SetLength(value , s_count); 로 정해놓고 for 문은 scount+1 만큼 ...
    • 이정욱
      2008.06.09 20:10
      윽.. 도와드리려고 했는데... 챙피해 하지 마세요 ^^; 전 더 한 실수도 많이 한답니다.ㅜㅜ 꽤 긴...
    • 석주현
      2008.06.09 22:26
      ㅎㅎ 저도 캡춰해서 분석하다가 말았습니다. 제가 보긴 코드를 좀 나누고 좀 리펙토링 하셔야 할 것 ...
    • 이정욱
      2008.06.06 13:13
      test (a,b) 로 그냥 호출 하시면 됩니다. 그리고 그냥 ShowMessage(b); 하시면 제데로 출력될 것입니...
    • 플루토
      2008.06.06 20:24
      네 감사합니다. 수정했어요^ ^
    • 구창민
      2008.06.06 03:02
      이정욱님 편역한...델파이7 Check 또는 아래 델마당에 어떤분이 추천하셨던 책이네요.. 류종택님 저서....
    • 홍성락
      2008.06.05 23:29
      자료실에 [문자를 좌로 스크롤 하는 소스-이미지 사용]으로 올렸습니다. 수정하시면서 사용해 보세요
    • 김광식
      2008.06.11 00:54
      감사합니다...
    • 화이팅
    • 2008.06.05 10:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2008.06.05 12:37
      기본적으로 DATA는 Query한값을 --> DataSource를 통해 --> DBGrid에 보여줍니다. 결과적으로 Query의 ...
    • 화이팅
      2008.06.07 05:33
      고맙습니다..^^ 덕분에 잘 해결되었습니다~
    • 왕초보
    • 2008.06.05 02:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.06.05 03:00
      포트 번호는 보통 Ip를 통해서 호스트를 찾고 포트번호를 통해서 호스트 내의 통신 접속점을 구분하기 위...
    • 장성호
      2008.06.05 06:22
      TServerSocket의 Port를 100000으로 하고 Active=true해 놓은후에 netstat -a 해보세요 TCP 에...
    • 석주현
      2008.06.04 22:54
      디버깅 하시면서 쿼리의 결과가 제대로 나오는지 확인 부터 해보세요. 디비 구성이 어떤지 모르지만 ...
    • 이정욱
      2008.06.04 22:57
      저도 가끔 이런경우를 보는데, 아마도 for 문의 최적화 때문일 수도 있습니다. 디버깅을 해보시면, co...
    • 석주현
      2008.06.04 23:20
      아 그러고 보니 정욱님 말씀 처럼 최적화에 따라 달라지는 경우가 있습니다. 음 저 같으면요. v...