아래의 엉터리소스좀 보아주시고 수정을 바랍니다.
화면에는
ibdatabase, ibtransaction, ibquery, ibupdatesql, datasorce 및
dbgrid, dbedit, dbtext, editbox등을 배열하여 테스트중이고, 테이블의 자료는 5개정도 넣은후 시험중인데 신규 Append에관한 지식이 부족합니다.
여러 고수님들의 가르침을 바랍니다.
여기서익히는 배움을 아주 보람있게 생각합니다.
감사합니다.
procedure TForm1.Button8Click(Sender: TObject);
var
RegNo, RegName, RegTel, RegJumin, RegNick, RegPost:String;
RegAdd1, RegAdd2, RegKind, RegDate, Regvisit,RegMember : String;
RegFamily, RegPoint, RegCharge, RegMoney: Integer;
begin
NoteBook1.PageIndex:=0;
with Ibquery1 do begin
Close;
SQL.Clear;
Regno:=IntToStr(recordcount+1);
RegName:=Edit5.Text;
RegTel:=Edit6.Text;
//RegPhone:=Edit7.Text;
RegJumin:=Edit8.Text;
RegNick:=Edit9.Text;
RegPost:=Edit10.Text;
RegAdd1:=Edit11.Text;
RegAdd2:=Edit12.Text;
RegFamily:=0;
RegKind:='1';
RegMember:=Edit14.Text;
RegPoint:=0;
RegCharge:=0;
RegMoney:=0;
Regdate:=FormatDateTime('yyyy-mm-dd',NOW);
Regvisit:=FormatDateTime('yyyy-mm-dd',NOW);
SQL.Add('Insert INTO vcust ');
begin
//Insert;
FieldByName('VNO').AsString := regno; //여기서부터 필드를 찾을수 없다고 에러가 나는군요...
FieldByName('vname' ).AsString :=Trim(Edit5.Text) ;
FieldByName('vtel' ).AsString := Trim(Edit6.Text);
FieldByName('v_jumin' ).AsString :=Edit8.Text;
FieldByName('RegNick').AsString := Trim(Edit9.Text);
FieldByName('post_no' ).AsString := Edit10.Text;
FieldByName('add1' ).AsString := Trim(Edit11.Text);
FieldByName('add2' ).AsInteger := 0;
FieldByName('family' ).AsString := 'O'; //여기가 중요합니다.
FieldByName('v_kind').AsString := '1';
FieldByName('v_point' ).AsInteger := 0;
FieldByName('v_charge' ).AsInteger := 0;
FieldByName('regist_date' ).AsDateTime := StrToDateTime(Edit13.Text);
FieldByName('last_visit' ).AsDateTime := StrToDateTime(Edit13.Text);
FieldByName('v_s_money' ).AsInteger := 0;
FieldByName('membership)').AsString := Edit14.Text;
Post;
end;
end;
if ibtransaction1.InTransaction then
begin
try
ibquery1.applyupdates;
ibtransaction1.commit;
ibquery1.Open;
except
ibtransaction1.rollback;
end;
end
else
showmessage('트랜잭션 모드가 아님!');
end;
또한 친절한 리플 달아주신것 재삼 감사 드립니다.
지도해주신대로 인터베이스 소스를 약간 수정하여 보았습니다.
다음소스중 걸리는 부분의 주석을 보아주셨으면 합니다.
1.Table명 'vcust'
2.필드의 갯수= 16개
3.사용한 컴포넌트 : IbDataBase1 , IbTransaction1, IbQuery1, IbUpDateSql1, DataSorce1 등 5가지 콤포넌트를 배열하였고
실행시 자동접속된 디비그리드의 필드 데이터들이 나타난 상태입니다.
문제는 데이터를 추가하려고 소스를 작성했었는데 나현호님의 지도에따라 소스를 수정한다고 해 보았습니다만 어느 한 줄에서 걸리는군요...
4.마지막레코드의 키필드값('vno')보다 '1'큰값을 키로 잡아야 하는데 RecondCount값을 사용 하는것도 꺼림칙 합니다.
5.부족한 컴포넌트는 없는지 살펴주신후 아래 소스를 다시한버 점검하여(가능하면 수정)주신다면 정말 감사 하겟습니다.
아직가지는 흉내에 불과한 아주 초보적인 무례를 널리 이해하여 주시기 바랍니다.
감사합니다.
procedure TForm1.Button8Click(Sender: TObject);
var
RegNo, RegName, RegTel, RegJumin, RegNick, RegPost:String;
RegAdd1, RegAdd2, RegKind, RegDate, Regvisit,RegMember : String;
RegFamily, RegPoint, RegCharge, RegMoney: Integer;
begin
NoteBook1.PageIndex:=0;
with Ibquery1 do begin
Close;
SQL.Clear;
//SQL.Add('select * from vcust ');
Regno:=IntToStr(recordcount+1);//Regno:=edit7.Text;
RegName:=Edit5.Text;
RegTel:=Edit6.Text;
RegJumin:=Edit8.Text;
RegNick:=Edit9.Text;
RegPost:=Edit10.Text;
RegAdd1:=Edit11.Text;
RegAdd2:=Edit12.Text;
RegFamily:=0;
RegKind:='1';
RegMember:=Edit14.Text;
RegPoint:=0;
RegCharge:=0;
RegMoney:=0;
Regdate:=FormatDateTime('yyyy-mm-dd',NOW);
Regvisit:=FormatDateTime('yyyy-mm-dd',NOW);
SQL.Add('Insert');
SQL.Add('(vno,vname,vtel,v_jumin,v_nick,post_no,add1,add2,family,v_kind,v_point,v_charge,regist_date,last_visit,v_s_money,membership)') ;
SQL.Add('VALUES');
SQL.Add('(:RegNo,:RegName,:RegTel,RegJumin,:RegNick,:RegPost,:RegAdd1,:Regadd2,:RegFamily,:RegKind,:RegPoint,:RegCharge,:Regdate,:lastvisit,:RegMoney,:RegMember)');
//ExecSQL;
end;
if ibtransaction1.InTransaction then
begin
try
ibquery1.applyupdates; //여기에서 걸리는군요...
ibtransaction1.commit;
ibquery1.Open;
except
ibtransaction1.rollback;
end;
end
else
showmessage('트랜잭션 모드가 아님!');
end;
나현호 wrote:
> 1.
> TQuery를 사용하여 자료를 Select 하거나 Insert, Update, Delete 할 수 있는데
> SELECT 쿼리문을 사용할때는 TQuery.Open 메소드를 사용합니다.
> 그러나 SELECT 이외 (INSERT, UPDATE, DELETE) 쿼리를 사용할때는 TQuery.ExecSQL
> 메소드를 사용합니다. (이점을 모르시는것 같아 상기 시켜 드립니다.)
>
> 2.
> SELECT 한 필드의 값을 가져올때는 Field 를 이용합니다.
> 일반적으로 FieldByName('필드명').AsString 과 같이 사용을 하게 됩니다.
> 그러나 INSERT 나 UPDATE 또는 DELETE 시 파라메터를 사용할때는
> Param을 사용해야 합니다.
> 이것도 일반적인 사용법은 ParamByName('파라메터명').AsString 과 같습니다.
> 파라메터는 ":" 걸로 선언합니다.
> ex) INSERT INTO 테이블명 VALUES(:파라메터명, :파라메터명2)
>
> 3. INSERT SQL 사용은 두가지 방법이 있습니다.
> - 전체 필드에 값을 넣어 추가 하는 방법
> " INSERT INTO 테이블명 VALUES(:파람1,:파람2,:파람2) "
> 이때에는 테이블이 생성될때 순의 필드로 그 값을 정의 해서 사용해야 합니다.
> - 일부 필드에 값을 넣어 추가 하는 방법
> " INSERT INTO 테이블명 (필드1,필드2,필드3) VALUES(:파람1,:파람2,:파람2) "
>
> 자 그럼 무엇이 어떻게 틀렸는지 아시겠지요. 수정해 보세요 ^^
>
>
>
> 인터기초 wrote:
> > 아래의 엉터리소스좀 보아주시고 수정을 바랍니다.
> > 화면에는
> > ibdatabase, ibtransaction, ibquery, ibupdatesql, datasorce 및
> > dbgrid, dbedit, dbtext, editbox등을 배열하여 테스트중이고, 테이블의 자료는 5개정도 넣은후 시험중인데 신규 Append에관한 지식이 부족합니다.
> > 여러 고수님들의 가르침을 바랍니다.
> > 여기서익히는 배움을 아주 보람있게 생각합니다.
> > 감사합니다.
> >
> >
> > procedure TForm1.Button8Click(Sender: TObject);
> > var
> > RegNo, RegName, RegTel, RegJumin, RegNick, RegPost:String;
> > RegAdd1, RegAdd2, RegKind, RegDate, Regvisit,RegMember : String;
> > RegFamily, RegPoint, RegCharge, RegMoney: Integer;
> > begin
> > NoteBook1.PageIndex:=0;
> > with Ibquery1 do begin
> > Close;
> > SQL.Clear;
> > Regno:=IntToStr(recordcount+1);
> > RegName:=Edit5.Text;
> > RegTel:=Edit6.Text;
> > //RegPhone:=Edit7.Text;
> > RegJumin:=Edit8.Text;
> > RegNick:=Edit9.Text;
> > RegPost:=Edit10.Text;
> > RegAdd1:=Edit11.Text;
> > RegAdd2:=Edit12.Text;
> > RegFamily:=0;
> > RegKind:='1';
> > RegMember:=Edit14.Text;
> > RegPoint:=0;
> > RegCharge:=0;
> > RegMoney:=0;
> > Regdate:=FormatDateTime('yyyy-mm-dd',NOW);
> > Regvisit:=FormatDateTime('yyyy-mm-dd',NOW);
> >
> > SQL.Add('Insert INTO vcust ');
> > begin
> > //Insert;
> > FieldByName('VNO').AsString := regno; //여기서부터 필드를 찾을수 없다고 에러가 나는군요...
> > FieldByName('vname' ).AsString :=Trim(Edit5.Text) ;
> > FieldByName('vtel' ).AsString := Trim(Edit6.Text);
> > FieldByName('v_jumin' ).AsString :=Edit8.Text;
> > FieldByName('RegNick').AsString := Trim(Edit9.Text);
> > FieldByName('post_no' ).AsString := Edit10.Text;
> > FieldByName('add1' ).AsString := Trim(Edit11.Text);
> > FieldByName('add2' ).AsInteger := 0;
> > FieldByName('family' ).AsString := 'O'; //여기가 중요합니다.
> > FieldByName('v_kind').AsString := '1';
> > FieldByName('v_point' ).AsInteger := 0;
> > FieldByName('v_charge' ).AsInteger := 0;
> > FieldByName('regist_date' ).AsDateTime := StrToDateTime(Edit13.Text);
> > FieldByName('last_visit' ).AsDateTime := StrToDateTime(Edit13.Text);
> > FieldByName('v_s_money' ).AsInteger := 0;
> > FieldByName('membership)').AsString := Edit14.Text;
> > Post;
> > end;
> >
> > end;
> >
> > if ibtransaction1.InTransaction then
> > begin
> > try
> >
> > ibquery1.applyupdates;
> > ibtransaction1.commit;
> > ibquery1.Open;
> > except
> > ibtransaction1.rollback;
> > end;
> > end
> > else
> > showmessage('트랜잭션 모드가 아님!');
> >
> > end;