Q&A

  • 급급급!!! insert관련 오류같은데 아주 급합니다. 부탁드려요 ㅜ.ㅜ
델파이 이틀째공부하고 프로젝트 작성하는 왕초보입니다.

명령어도 다 모르고 아래처럼 코딩하고 나니까 실행시에 db엔진 어쩌구 저쩌구 오류가 나더라고요. 그래서 insert오류인지 아니면 bd alias부분이 오류인지...

BDE Administrator에서 db경로 작성하고 수정을 했는데 그게 잘못된건지 좀 봐주시겠습까.. 제발부탁드려요 ㅜ.ㅜ

그리고 LAN상에서 작업을 하려고 하는데 alias 설정 방법도 좀 알려주시면 고맙겠습니다.

제가 초보니까 주석좀 자세히 붙여 주시면 더 감사드리고요.

꼭좀 부탁드려요.



unit B_02Form;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, ComCtrls;



type

TB02Form = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

BtnSave: TBitBtn;

BtnDel: TBitBtn;

BtnExit: TBitBtn;

Label1: TLabel;

Label2: TLabel;

EdCode: TEdit;

EdName: TEdit;

DBGrid1: TDBGrid;

DsSm: TDataSource;

QrSm: TQuery;

QrSmCode: TStringField;

QrSmName: TStringField;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure BtnSaveClick(Sender: TObject);

private

procedure ComponentClear;

{ Private declarations }

public

{ Public declarations }

end;



var

B02Form: TB02Form;



implementation



{$R *.DFM}

procedure TB02Form.ComponentClear;

var wCc:word;

begin

//전체 Component중에서 Edit와 CheckBox초기화

for wCc := 1 to ComponentCount - 1 do

if Components[wCc] is TEdit then

TEdit(Components[wCc]).Text := ''

else if Components[wCc] is TCheckBox then

TCheckBox(Components[wCc]).Checked := False;

//저장,삭제버턴 비활성화

// btnSave.Enabled := False;

btnDel.Enabled := False;

end;



procedure TB02Form.FormClose(Sender: TObject; var Action: TCloseAction);

begin

QrSm.Close;

Action := caFree;

end;



procedure TB02Form.FormCreate(Sender: TObject);

begin

ComponentClear;

ActiveControl := EdCode; //Cursor 위치제어



// 지금까지 등록된 모든 Item 내용을 보여준다.

// 기업에서 자료가 많을경우에는 화면이 나타나는데 시간이 많이 걸릴수가 있다.

QrSm.Close;

QrSm.Sql.Clear;

QrSm.Sql.Add('Select * From CustSm');

Try

QrSm.Open;

Except

Application.MessageBox('반코드 Table에 오류 발생!!!','오류',mb_ok+mb_IconInformation);

QrSm.Close;

end;

end;

procedure TB02Form.FormShow(Sender: TObject);

begin

Left := 0; Top := 0;

end;



procedure TB02Form.BtnSaveClick(Sender: TObject);

var Q1:TQuery;

sSql:String;

begin

Q1 := TQuery.Create(Self);

Q1.DataBaseName := 'CustSm';

Q1.Sql.Clear;

sSql := 'Insert into CustSm (Code,Name) '+

' Values (:PCode,:PName) ';

Q1.Sql.Add(sSql);

Q1.ParamByName('PCode').asstring := Trim(EdCode.Text);

Q1.ParamByName('PName').asstring := Trim(EdName.Text);

// Q1.Sql.Add(sSql);

Q1.ExecSql;

close;

// SQL.Clear;

// Q1.Sql.Add(sSql);

// open;



end;



end.

4  COMMENTS
  • Profile
    약초꾼 2001.03.30 04:33
    답변이랑은 조금 거리가 있어염...^^

    insert 하는 다른 방법을 알고 있어서 이렇게 글을 올립니다.





    procedure TB02Form.BtnSaveClick(Sender : TObject);

    var

    Q1 : TQuery;

    begin

    Q1 := TQuery.Create(Self);

    with Q1 do

    try

    DatabaseName := database1.DatabaseName;

    SQL.Text := Format('insert into Custsm (Code, Name) Values (%S, %S)'

    ,[EdCode.Text, EdName.Text]);

    try Execsql;

    except ShowMessage('Custsm 에서 오류 발생'); end;

    Finally Free; end;

    end;



    위와 같이 하면 insert 해야할 필드가 많아도 ..... ^^

    참고 하시기 바랍니당....

    고수님덜의 질책 부탁합니당..

    그럼 전 이만...



    후다닥~~~~~~~~~~~~~~~~~~~~~~~~~~콰당~~~~~~~~~^^;;











    왕초보민정 wrote:

    > 델파이 이틀째공부하고 프로젝트 작성하는 왕초보입니다.

    > 명령어도 다 모르고 아래처럼 코딩하고 나니까 실행시에 db엔진 어쩌구 저쩌구 오류가 나더라고요. 그래서 insert오류인지 아니면 bd alias부분이 오류인지...

    > BDE Administrator에서 db경로 작성하고 수정을 했는데 그게 잘못된건지 좀 봐주시겠습까.. 제발부탁드려요 ㅜ.ㅜ

    > 그리고 LAN상에서 작업을 하려고 하는데 alias 설정 방법도 좀 알려주시면 고맙겠습니다.

    > 제가 초보니까 주석좀 자세히 붙여 주시면 더 감사드리고요.

    > 꼭좀 부탁드려요.

    >

    > unit B_02Form;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, ComCtrls;

    >

    > type

    > TB02Form = class(TForm)

    > PageControl1: TPageControl;

    > TabSheet1: TTabSheet;

    > Panel1: TPanel;

    > Panel2: TPanel;

    > Panel3: TPanel;

    > BtnSave: TBitBtn;

    > BtnDel: TBitBtn;

    > BtnExit: TBitBtn;

    > Label1: TLabel;

    > Label2: TLabel;

    > EdCode: TEdit;

    > EdName: TEdit;

    > DBGrid1: TDBGrid;

    > DsSm: TDataSource;

    > QrSm: TQuery;

    > QrSmCode: TStringField;

    > QrSmName: TStringField;

    > procedure FormClose(Sender: TObject; var Action: TCloseAction);

    > procedure FormCreate(Sender: TObject);

    > procedure FormShow(Sender: TObject);

    > procedure BtnSaveClick(Sender: TObject);

    > private

    > procedure ComponentClear;

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > B02Form: TB02Form;

    >

    > implementation

    >

    > {$R *.DFM}

    > procedure TB02Form.ComponentClear;

    > var wCc:word;

    > begin

    > //전체 Component중에서 Edit와 CheckBox초기화

    > for wCc := 1 to ComponentCount - 1 do

    > if Components[wCc] is TEdit then

    > TEdit(Components[wCc]).Text := ''

    > else if Components[wCc] is TCheckBox then

    > TCheckBox(Components[wCc]).Checked := False;

    > //저장,삭제버턴 비활성화

    > // btnSave.Enabled := False;

    > btnDel.Enabled := False;

    > end;

    >

    > procedure TB02Form.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > QrSm.Close;

    > Action := caFree;

    > end;

    >

    > procedure TB02Form.FormCreate(Sender: TObject);

    > begin

    > ComponentClear;

    > ActiveControl := EdCode; //Cursor 위치제어

    >

    > // 지금까지 등록된 모든 Item 내용을 보여준다.

    > // 기업에서 자료가 많을경우에는 화면이 나타나는데 시간이 많이 걸릴수가 있다.

    > QrSm.Close;

    > QrSm.Sql.Clear;

    > QrSm.Sql.Add('Select * From CustSm');

    > Try

    > QrSm.Open;

    > Except

    > Application.MessageBox('반코드 Table에 오류 발생!!!','오류',mb_ok+mb_IconInformation);

    > QrSm.Close;

    > end;

    > end;

    > procedure TB02Form.FormShow(Sender: TObject);

    > begin

    > Left := 0; Top := 0;

    > end;

    >

    > procedure TB02Form.BtnSaveClick(Sender: TObject);

    > var Q1:TQuery;

    > sSql:String;

    > begin

    > Q1 := TQuery.Create(Self);

    > Q1.DataBaseName := 'CustSm';

    > Q1.Sql.Clear;

    > sSql := 'Insert into CustSm (Code,Name) '+

    > ' Values (:PCode,:PName) ';

    > Q1.Sql.Add(sSql);

    > Q1.ParamByName('PCode').asstring := Trim(EdCode.Text);

    > Q1.ParamByName('PName').asstring := Trim(EdName.Text);

    > // Q1.Sql.Add(sSql);

    > Q1.ExecSql;

    > close;

    > // SQL.Clear;

    > // Q1.Sql.Add(sSql);

    > // open;

    >

    > end;

    >

    > end.

  • Profile
    김광섭 2001.03.29 22:57
    다른 부분은 셋팅에 관한거라 별문제가 없을듯하구여...

    인서트한 부분만 가져왔거든여... 내용을 보면여..

    TQuery에서 Q1을 동적 생성해서 쓰시네요.

    말씀하신대로 초보라면 TQuery 컴포넌트를 가져다가 쓰는게 더 조을듯 싶네요 ^^

    동적생성부분은 가져다 쓰는게 익숙해진후에 하셔두 늦지 않아요.

    여튼, 함보져~

    Q1 := TQuery.Create(Self);

    Q1.DataBaseName := 'CustSm';

    Q1.Sql.Clear;

    sSql := 'Insert into CustSm (Code,Name) '+

    ' Values (:PCode,:PName) ';

    Q1.Sql.Add(sSql);

    Q1.ParamByName('PCode').asstring := Trim(EdCode.Text);

    Q1.ParamByName('PName').asstring := Trim(EdName.Text);

    Q1.ExecSql;

    close; <-- Q1 쿼리를 닫을려고 한거같은데... Q1.Close;

    잘못된 곳은 없는데요. 단지 Q1을 동적생성해서 썼다면 메모리에서 Free 시켜줘야줘야죠 Q1.Free;



    참고로 CustSm은 Bde에 등록되어있는 얼라이어스 이름이어야 합니다.

    얼라이어스 등록은 해당DB하고 맞춰야죠.



    수정1. 단순히 쿼리컴포넌트 갖따
  • Profile
    이희정 2001.03.29 22:44
    왕초보민정 wrote:

    > 델파이 이틀째공부하고 프로젝트 작성하는 왕초보입니다.

    > 명령어도 다 모르고 아래처럼 코딩하고 나니까 실행시에 db엔진 어쩌구 저쩌구 오류가 나더라고요. 그래서 insert오류인지 아니면 bd alias부분이 오류인지...

    > BDE Administrator에서 db경로 작성하고 수정을 했는데 그게 잘못된건지 좀 봐주시겠습까.. 제발부탁드려요 ㅜ.ㅜ

    > 그리고 LAN상에서 작업을 하려고 하는데 alias 설정 방법도 좀 알려주시면 고맙겠습니다.

    > 제가 초보니까 주석좀 자세히 붙여 주시면 더 감사드리고요.

    > 꼭좀 부탁드려요.

    >

    > unit B_02Form;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, ComCtrls;

    >

    > type

    > TB02Form = class(TForm)

    > PageControl1: TPageControl;

    > TabSheet1: TTabSheet;

    > Panel1: TPanel;

    > Panel2: TPanel;

    > Panel3: TPanel;

    > BtnSave: TBitBtn;

    > BtnDel: TBitBtn;

    > BtnExit: TBitBtn;

    > Label1: TLabel;

    > Label2: TLabel;

    > EdCode: TEdit;

    > EdName: TEdit;

    > DBGrid1: TDBGrid;

    > DsSm: TDataSource;

    > QrSm: TQuery;

    > QrSmCode: TStringField;

    > QrSmName: TStringField;

    > procedure FormClose(Sender: TObject; var Action: TCloseAction);

    > procedure FormCreate(Sender: TObject);

    > procedure FormShow(Sender: TObject);

    > procedure BtnSaveClick(Sender: TObject);

    > private

    > procedure ComponentClear;

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > B02Form: TB02Form;

    >

    > implementation

    >

    > {$R *.DFM}

    > procedure TB02Form.ComponentClear;

    > var wCc:word;

    > begin

    > //전체 Component중에서 Edit와 CheckBox초기화

    > for wCc := 1 to ComponentCount - 1 do

    > if Components[wCc] is TEdit then

    > TEdit(Components[wCc]).Text := ''

    > else if Components[wCc] is TCheckBox then

    > TCheckBox(Components[wCc]).Checked := False;

    > //저장,삭제버턴 비활성화

    > // btnSave.Enabled := False;

    > btnDel.Enabled := False;

    > end;

    >

    > procedure TB02Form.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > QrSm.Close;

    > Action := caFree;

    > end;

    >

    > procedure TB02Form.FormCreate(Sender: TObject);

    > begin

    > ComponentClear;

    > ActiveControl := EdCode; //Cursor 위치제어

    >

    > // 지금까지 등록된 모든 Item 내용을 보여준다.

    > // 기업에서 자료가 많을경우에는 화면이 나타나는데 시간이 많이 걸릴수가 있다.

    > QrSm.Close;

    > QrSm.Sql.Clear;

    > QrSm.Sql.Add('Select * From CustSm');

    > Try

    > QrSm.Open;

    > Except

    > Application.MessageBox('반코드 Table에 오류 발생!!!','오류',mb_ok+mb_IconInformation);

    > QrSm.Close;

    > end;

    > end;

    > procedure TB02Form.FormShow(Sender: TObject);

    > begin

    > Left := 0; Top := 0;

    > end;

    >

    > procedure TB02Form.BtnSaveClick(Sender: TObject);

    > var Q1:TQuery;

    > sSql:String;

    > begin

    > Q1 := TQuery.Create(Self);

    > Q1.DataBaseName := 'CustSm';

    > Q1.Sql.Clear;

    > sSql := 'Insert into CustSm (Code,Name) '+

    > ' Values (:PCode,:PName) ';

    > Q1.Sql.Add(sSql);

    > Q1.ParamByName('PCode').asstring := Trim(EdCode.Text);

    > Q1.ParamByName('PName').asstring := Trim(EdName.Text);

    > // Q1.Sql.Add(sSql);

    > Q1.ExecSql;

    > close;

    > // SQL.Clear;

    > // Q1.Sql.Add(sSql);

    > // open;

    >

    > end;

    >

    > end.



    제 생각에는 우선 BDE에서 DB Alias를 더블클릭해서 에러메세지가 나지 않는지 확인하시구요.



    아마도 거기서 에러가 났거나 그게 아님 DataBase Component를 사용하셨다면 DataBase Component를 더블 클릭하면 나타나는 내용(BDE 등록정보)이 틀렸거나... 뭐 그럴 거예요.



    소스만 봐서는 잘 모르겠네요.



    그리고 정확한 에러메세지를 올려주시면 훨씬 쉽게 알 수 있을 같은데여..

  • Profile
    돌도끼 2001.03.29 22:16
    왕초보민정 wrote:

    > 델파이 이틀째공부하고 프로젝트 작성하는 왕초보입니다.

    > 명령어도 다 모르고 아래처럼 코딩하고 나니까 실행시에 db엔진 어쩌구 저쩌구 오류가 나더라고요. 그래서 insert오류인지 아니면 bd alias부분이 오류인지...

    > BDE Administrator에서 db경로 작성하고 수정을 했는데 그게 잘못된건지 좀 봐주시겠습까.. 제발부탁드려요 ㅜ.ㅜ

    > 그리고 LAN상에서 작업을 하려고 하는데 alias 설정 방법도 좀 알려주시면 고맙겠습니다.

    > 제가 초보니까 주석좀 자세히 붙여 주시면 더 감사드리고요.

    > 꼭좀 부탁드려요.

    >

    > unit B_02Form;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, ComCtrls;

    >

    > type

    > TB02Form = class(TForm)

    > PageControl1: TPageControl;

    > TabSheet1: TTabSheet;

    > Panel1: TPanel;

    > Panel2: TPanel;

    > Panel3: TPanel;

    > BtnSave: TBitBtn;

    > BtnDel: TBitBtn;

    > BtnExit: TBitBtn;

    > Label1: TLabel;

    > Label2: TLabel;

    > EdCode: TEdit;

    > EdName: TEdit;

    > DBGrid1: TDBGrid;

    > DsSm: TDataSource;

    > QrSm: TQuery;

    > QrSmCode: TStringField;

    > QrSmName: TStringField;

    > procedure FormClose(Sender: TObject; var Action: TCloseAction);

    > procedure FormCreate(Sender: TObject);

    > procedure FormShow(Sender: TObject);

    > procedure BtnSaveClick(Sender: TObject);

    > private

    > procedure ComponentClear;

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > B02Form: TB02Form;

    >

    > implementation

    >

    > {$R *.DFM}

    > procedure TB02Form.ComponentClear;

    > var wCc:word;

    > begin

    > //전체 Component중에서 Edit와 CheckBox초기화

    > for wCc := 1 to ComponentCount - 1 do

    > if Components[wCc] is TEdit then

    > TEdit(Components[wCc]).Text := ''

    > else if Components[wCc] is TCheckBox then

    > TCheckBox(Components[wCc]).Checked := False;

    > //저장,삭제버턴 비활성화

    > // btnSave.Enabled := False;

    > btnDel.Enabled := False;

    > end;

    >

    > procedure TB02Form.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > QrSm.Close;

    > Action := caFree;

    > end;

    >

    > procedure TB02Form.FormCreate(Sender: TObject);

    > begin

    > ComponentClear;

    > ActiveControl := EdCode; //Cursor 위치제어

    >

    > // 지금까지 등록된 모든 Item 내용을 보여준다.

    > // 기업에서 자료가 많을경우에는 화면이 나타나는데 시간이 많이 걸릴수가 있다.

    > QrSm.Close;

    > QrSm.Sql.Clear;

    > QrSm.Sql.Add('Select * From CustSm');

    > Try

    > QrSm.Open;

    > Except

    > Application.MessageBox('반코드 Table에 오류 발생!!!','오류',mb_ok+mb_IconInformation);

    > QrSm.Close;

    > end;

    > end;

    > procedure TB02Form.FormShow(Sender: TObject);

    > begin

    > Left := 0; Top := 0;

    > end;

    >

    > procedure TB02Form.BtnSaveClick(Sender: TObject);

    > var Q1:TQuery;

    > sSql:String;

    > begin

    > Q1 := TQuery.Create(Self);

    > Q1.DataBaseName := 'CustSm';

    > Q1.Sql.Clear;

    > sSql := 'Insert into CustSm (Code,Name) '+

    > ' Values (:PCode,:PName) ';

    > Q1.Sql.Add(sSql);

    > Q1.ParamByName('PCode').asstring := Trim(EdCode.Text);

    > Q1.ParamByName('PName').asstring := Trim(EdName.Text);

    > // Q1.Sql.Add(sSql);

    > Q1.ExecSql;

    > close;

    > // SQL.Clear;

    > // Q1.Sql.Add(sSql);

    > // open;

    >

    > end;

    >

    > end.