Q&A

  • 스트링그리드에서 디비 불러오고 다시 디비에 저장할때
<! -- 코드시작-->

unit test;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, Db, DBTables, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Query1: TQuery;
    update: TButton;
    procedure FormShow(Sender: TObject);
    procedure updateClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.FormShow(Sender: TObject);
var

i : integer;

begin
  stringgrid1.Cells[0,0] := '아이디';
  stringgrid1.Cells[1,0] := '이름';
  stringgrid1.Cells[2,0] := '내용';
  stringgrid1.Cells[3,0] := '전화번호';

  with query1 do
  begin
    close;
    sql.Clear;
    sql.Add('select id, name1, text, tel from name');
    open;
    first;
    i := 1;
    StringGrid1.RowCount := RecordCount + 1;
    //그리드의 제목을 고려해 레코드수보다 1개를 더한 값을 RowCount로 해 줍니다.
    while not eof do
    begin
      StringGrid1.Cells[0,i] := FieldByName('id').asstring;
      StringGrid1.Cells[1,i] := FieldByName('name1').asstring;
      stringgrid1.cells[2,i] := fieldbyname('text').asstring;
      stringgrid1.cells[3,i] := fieldbyname('tel').asstring;

      //각 셀에 처음부터 값을 넣어줍니다.
      Next;
      inc(i); //셀 인덱스를 증가시켜 줍니다
    end;
    close;
  end;
end;


procedure TForm1.updateClick(Sender: TObject);
var
  row_cnt : integer;
begin
  with query1 do begin
  SQL.clear;
  SQL.Add(' update name set name1=:a_name, text =:a_text, tel=:a_tel');
  sql.add('where (id=:a_id)');
    For Row_Cnt:= 1 to StringGrid1.RowCount do begin
    parambyname('a_id').AsInteger := StrtoInt(StringGrid1.Cells[0,Row_Cnt]);
    paramByName('a_name').Asstring := (StringGrid1.Cells[1,Row_Cnt]);
    paramByName('a_text').Asstring := (StringGrid1.Cells[2,Row_Cnt]);
    paramByName('a_tel').Asstring :=  (StringGrid1.Cells[3,Row_Cnt]);
    stringGrid1.RowCount := StringGrid1.RowCount + 1;
    EXecSQL;
    end;
  end;
end;

end.

<!-- 코드 끝-->

위와 같이 스트링 그리드에 디비 내용을 입력시킨고
스트링 그리드에서 자료 수정뒤에
디비에 다시저장할려는 프로그램 작성중에 에러 생기네요..

어디서 잘못된걸까요?
2  COMMENTS
  • Profile
    민스맘 2005.05.03 19:06




      with query1 do begin
      SQL.clear;
      SQL.Add(' update name set name1=:a_name, text =:a_text, tel=:a_tel');
      sql.add('where (id=:a_id)');
        For Row_Cnt:= 1 to StringGrid1.RowCount do begin
        parambyname('a_id').AsInteger := StrtoInt(StringGrid1.Cells[0,Row_Cnt]);
        paramByName('a_name').Asstring := (StringGrid1.Cells[1,Row_Cnt]);
        paramByName('a_text').Asstring := (StringGrid1.Cells[2,Row_Cnt]);
        paramByName('a_tel').Asstring :=  (StringGrid1.Cells[3,Row_Cnt]);
        stringGrid1.RowCount := StringGrid1.RowCount + 1;
        EXecSQL;
        end;
      end;
    end;


    우선 for 문을 고쳐야 할것 같구요....RowCount - 1 로...
    그리고 for 문안에 RowCount를 증가시킬 필요는 없구요...(왜 이게 여기 들어있는지 잘 모르겠는.... 필요없어보임)


    그렇게 해서 다시 해보세요
  • Profile
    구자형 2005.05.03 19:52
    • 박진규
    • 2005.05.04 06:49
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.04 19:47
      TDateTime 형을 쓰시구욤 등록하실때는 DateToStr로 등록하셨다가 다시 TDateTime으로 바꾸실때는 StrToD...
    • 석주현
      2005.05.04 18:47
      그냥 현재 시각에서 더하는 것을 예로 들면요. 헬프를 찾아 보시면 알지만 시간은 Double 형입니다. 결...
    • Runo
      2005.05.04 00:22
      ADO를 패치해야 하는걸로 알구 있구요.... 일단 임시적인 방법으로는 AdoQuery Properties의 LockType을...
    • 구자형
    • 2005.05.03 09:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 민스맘
      2005.05.03 19:06
        with query1 do begin   SQL.clear;   SQL.Add(' update name ...
    • 구자형
      2005.05.03 19:52
    • 손군
    • 2005.05.03 07:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정찬희
      2005.05.03 21:47
      가끔씩 쓰는 방법입니다만... <!--CodeS--> type   TControlAccess = class(TContro...
    • 도끼로이마까
      2005.05.03 18:33
      TControl내에 선언된 Color property는 protected 입니다. TForm의 경우도 마찬가지입니다..TControl로 ...
    • 엄마미안
      2010.01.29 23:02
      2005년 그시절엔 내가 이런 질문을 했었군.. 참.... 그당시는 많이 몰랐네요.
    • 송인화
    • 2005.05.03 03:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 18:39
      웹 서버에 스크립트를 작성하셔야 할 듯합니다. 파일 이름을 인자로받구요... 웹 루트부터 파일과 디렉...
    • 김성진
      2005.05.03 05:05
      제가 생각하기에는 쉬운 방법은 이렇습니다. 1. ftp나 telnet등을 사용하셔서 파일리스트를 가져온다 2. ...
    • nilriri™
      2005.05.03 03:49
      레포트를 작성하실때 빈 폼을 만드시고 퀵레포트 컴포넌트를 올려 놓으시고 작업을 하신듯 하네요 ...
    • D
    • 2005.05.02 22:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 주웰
    • 2005.05.02 22:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 00:25
      <!--CodeS--> {$WARNINGS OFF} FileSetAttr('AAA.TXT', faHidden); {$WARNINGS ON} <!--CodeE...
    • 주웰
      2005.05.03 02:34
      우선 답변 감사 드립니다. 참고로 결백증 절대 아닙니당...^^;; 잘때 항상 뭐 묻은 강아지랑 껴안고 자는...
    • 최용일
      2005.05.03 22:06
      안녕하세요. 최용일입니다. 아마 델파이 6이나 7을 쓰시는것 같은데... Kylix때문에 생긴 경고이구요...
    • 권태훈
      2005.05.02 22:17
      윈속 포함하시고 datalen := ntohs(Word((@recvbuff[2])^)); 하시면 됩니다.
    • 김홍균
      2005.05.02 22:27
      여기 저기 물어보니 swap 이게 바꿔주는거라 하더군요. ntohs 대신 swap 써도 같은 값 나오던데 두개가 ...
    • 이중철
      2005.05.03 02:45
      swap이란 Function이 있었군요 결론적으로는 두개다가 같아요 하는일이.. 저는 몰라서 다 만들어서 썼...
    • 소대봉
    • 2005.05.02 20:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이준희
      2005.05.02 23:02
      interface uses Windows; function getSystemFolder():string; var   SysDir: array[0.....
    • 강인규
      2005.05.02 21:00
      <!--CodeS--> const   MAX_PATH = 255; var   dir: array [0..MAX_PATH] ...
    • 박진규
    • 2005.05.02 20:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2005.05.02 21:08
      구현하는것은 큰 문제가 아니나 부동소수점 연산에서 문제가 발생할 것으로 보여집니다. 아래의 코드를 ...
    • 도끼로이마까
      2005.05.03 18:16
      시리얼 포트 프로그래밍에 관련된 문서입니다. 이것을 먼저 공부하시는게 좋을듯 싶습니다... http:/...
    • 조수석
    • 2005.05.02 07:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2005.05.03 00:00
      우와.. OS(Operating System)를 만들어보실려고 하시는군요.. 그건 굉장히 힘들고, 어려운 작업입니다.. ...
    • 조수석
      2005.05.04 03:25
      굉장히 어렵네요...! ..아무튼 상세한 답변 너무 감사드립니다. 감사합니다.
    • 양소영
    • 2005.05.02 06:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.05.03 01:02
      용도가 뭔가요? -1,-2를 인덱스로 가질때 무슨 작업을 하실려구 그런 인덱스값이 필요하신건지? 함수...
    • 세라핌
      2005.05.02 02:33
      istool이라는 프로그램사용하시면 쉽게 됩니다. http://www.istool.org InnoSetup 스크립트를 편하...
    • 화니
      2005.05.02 02:36
      파일하나를 나누는 겁니다. 이쪽에서는 1부터 1000byte까지 저쪽은 1001부터 2000까지 이런식으로요 ...
    • 주선종
    • 2005.05.01 19:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 18:44
      새창을 막을려는 이유를 설명해 주세요.. 델파이는 VCL 자체가 thread safe가 아니기 때문에 thread ...
    • 주선종
      2005.05.03 22:02
      답변주셔서 감사합니다. 새창을 막으려는 이유는 특별한 이유가 있는게 아니라 ActiveX기능에 새창을...
    • 최동열
    • 2005.05.01 00:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2005.05.02 00:42
      결론적으로 그게 가능할까요? RDBMS에서 권한이 없는데, 어떻게든지 사용하게끔 한다? 이것은 해킹하겠다...
    • nilriri™
      2005.05.01 09:19
      자신이 만든 테이블에 대한 권한이 없다?? RDBMS의 사용자 권한 설정에 문제가 있는거 아닐까요? DBA...