<! -- 코드시작-->
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.
<!-- 코드 끝-->
위와 같이 스트링 그리드에 디비 내용을 입력시킨고
스트링 그리드에서 자료 수정뒤에
디비에 다시저장할려는 프로그램 작성중에 에러 생기네요..
어디서 잘못된걸까요?
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를 증가시킬 필요는 없구요...(왜 이게 여기 들어있는지 잘 모르겠는.... 필요없어보임)
그렇게 해서 다시 해보세요