Q&A

  • insert into...
저기 소스를 올립니다... 간다한건데... 저장버튼을 눌리면...
에러메시지가 insert into 문 오류 라고 나오는데.... 틀린부분이 없는것 같아요..
그리고는 저장 버튼 코딩에 있는 DB_Refresh;  를 가리킵니다...
함 봐주세요.....

unit Main_Manage;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls;

type
  TfrmMForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Bit1: TBitBtn;
    Bit2: TBitBtn;
    Bit3: TBitBtn;
    Bit4: TBitBtn;
    Bit5: TBitBtn;
    DBGrid1: TDBGrid;
    ADOQuery1: TADOQuery;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    procedure Bit5Click(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure Bit4Click(Sender: TObject);
    procedure Bit1Click(Sender: TObject);
    procedure Bit3Click(Sender: TObject);
    procedure Bit2Click(Sender: TObject);
    procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DBGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
  DB_Insert : String;
    procedure DB_Refresh;
    procedure DB_Input;
    procedure Cls_Edit;
    procedure Dsp_Edit;
    procedure Move_Cell;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMForm1: TfrmMForm1;

implementation

{$R *.DFM}

procedure TfrmMForm1.DB_Refresh;
begin
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('Select * From 고객카드');
  adoquery1.SQL.Add('Order By 상호');
  adoquery1.Open;
end;

procedure TfrmMForm1.DB_Input;
begin
  adoquery1.Parameters.ParamValues['N1'] := Trim(Edit1.Text);
  adoquery1.Parameters.ParamValues['N2'] := Trim(Edit2.Text);
  adoquery1.Parameters.ParamValues['N3'] := Trim(Edit3.Text);
  adoquery1.Parameters.ParamValues['N4'] := Trim(Edit4.Text);
  adoquery1.Parameters.ParamValues['N5'] := Trim(Edit5.Text);
  adoquery1.Parameters.ParamValues['N6'] := Trim(Edit6.Text);
  adoquery1.Parameters.ParamValues['N7'] := Trim(Edit7.Text);
  adoquery1.Parameters.ParamValues['N8'] := Trim(Edit8.Text);
end;

procedure TfrmMForm1.Cls_Edit;
begin
  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
  Edit4.Text := '';
  Edit5.Text := '';
  Edit6.Text := '';
  Edit7.Text := '';
  Edit8.Text := '';
end;

procedure TfrmMForm1.Dsp_Edit;
begin
  Edit1.Text := adoquery1.FieldByName('상호').AsString;
  Edit2.Text := adoquery1.FieldByName('대표자').AsString;
  Edit3.Text := adoquery1.FieldByName('종목').AsString;
  Edit4.Text := adoquery1.FieldByName('업태').AsString;
  Edit5.Text := adoquery1.FieldByName('주소').AsString;
  Edit6.Text := adoquery1.FieldByName('사업자 번호').AsString;
  Edit7.Text := adoquery1.FieldByName('승인번호').AsString;
  Edit8.Text := adoquery1.FieldByName('비고').AsString;
end;

procedure TfrmMForm1.Move_Cell;
begin
  if bit1.Caption = '취소' then
  begin
    bit1.Caption := '추가';
    bit2.Enabled := True;
    bit4.Enabled := True;
    DB_Insert := '불가능';
  end;
  Dsp_Edit;
end;



procedure TfrmMForm1.Bit5Click(Sender: TObject);
begin
close;
end;

procedure TfrmMForm1.FormClick(Sender: TObject);
begin
  Cls_Edit;
  Dsp_Edit;
  DB_Insert := '불가능';
end;

procedure TfrmMForm1.Bit4Click(Sender: TObject);
var
  Input_Str : String;
begin
  Input_Str := InputBox('상호입력', '찾을 이름을 입력하세요','');

  if Trim(Input_Str) <> '' then
  begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('Select * From 고객카드');
    adoquery1.SQL.Add('Where 상호 Like :NAME1');
    adoquery1.Parameters.ParamByName('NAME1').Value := '%' + Input_Str + '%';
    adoquery1.Open;
  end;
end;

procedure TfrmMForm1.Bit1Click(Sender: TObject);
begin
  if bit1.Caption = '추가' then
  begin
    DB_Insert := '가능';
    bit1.Caption := '취소';
    bit2.Enabled := False;
    bit4.Enabled := False;
    Cls_Edit;
  end
  else
  begin
    DB_Insert := '불가능';
    bit1.Caption := '추가';
    bit2.Enabled := True;
    bit4.Enabled := True;
    DB_Refresh;
    Dsp_Edit;
  end;

Edit1.SetFocus;

end;

procedure TfrmMForm1.Bit3Click(Sender: TObject);
var
  Select_no : Integer;
begin
  if Trim(Edit1.Text) = '' then
  begin
    ShowMessage('상호를 입력하지 않으면 추가나 저장을 할 수 없습니다.');
    Edit1.SetFocus;
    Exit;
  end;

  if DB_Insert = '가능' then
  begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('Insert Into 고객카드');
    adoquery1.SQL.Add('(상호, 대표자, 종목, 업태, 주소, 사업자 번호, 승인번호, 비고)');
    adoquery1.SQL.Add('Values');
    adoquery1.SQL.Add('( + :N1 + '', ');
    adoquery1.SQL.Add(''' + :N2 + '', ');
    adoquery1.SQL.Add(''' + :N3 + '', ');
    adoquery1.SQL.Add(''' + :N4 + '', ');
    adoquery1.SQL.Add(''' + :N5 + '', ');
    adoquery1.SQL.Add(''' + :N6 + '', ');
    adoquery1.SQL.Add(''' + :N7 + '', ');
    adoquery1.SQL.Add(''' + :N8 + )');
    DB_Input;
    DB_Insert :='불가능';
    bit1.Caption := '추가';
    bit2.Enabled := True;
    bit4.Enabled := True;
  end
  else
  begin
    Select_no := adoquery1.FieldByName('번호').AsInteger;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('Update 고객카드');
    adoquery1.SQL.Add('Set 상호 = :N1, ');
    adoquery1.SQL.Add('대표자 = :N2, ');
    adoquery1.SQL.Add('종목 = :N3, ');
    adoquery1.SQL.Add('업태 = :N4, ');
    adoquery1.SQL.Add('주소 = :N5, ');
    adoquery1.SQL.Add('사업자 번호 = :N6, ');
    adoquery1.SQL.Add('승인번호 = :N7, ');
    adoquery1.SQL.Add('비고 = :N8 ');
    adoquery1.SQL.Add('Where 번호 = :N9');
    DB_Input;
    adoquery1.Parameters.ParamValues['N9'] := Select_no;
  end;
  adoquery1.ExecSQL;

***************************************************
  DB_Refresh;           이부분입니다...
***************************************************

  Edit1.SetFocus;
end;

procedure TfrmMForm1.Bit2Click(Sender: TObject);
var
  ret_msg : Integer;
  Select_no : Integer;
begin
  if adoquery1.RecordCount <> 0 then
  begin
    ret_msg := MessageDlg('삭제하겠습니까?', mtWarning, [mbYes, mbNo], 0);

    if ret_msg = mrYes then
    begin
      Select_no := adoquery1.FieldByName('번호').AsInteger;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('Delete From 고객카드');
      adoquery1.SQL.Add('Where 번호 = :N1');
      adoquery1.Parameters.ParamValues['N1'] := Select_no;
      adoquery1.ExecSQL;
      DB_Refresh;
      Dsp_Edit;
    end
    else
    Application.MessageBox('삭제가 취소되었습니다.','삭제취소',MB_OK);
  end;
end;

procedure TfrmMForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  Move_Cell;
end;

procedure TfrmMForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key >=33) And (Key <= 40) then
  Move_Cell;
end;

end.
2  COMMENTS
  • Profile
    염상철 2002.03.12 03:49
    adoquery1.SQL.Add('Insert Into 고객카드');
        adoquery1.SQL.Add('(상호, 대표자, 종목, 업태, 주소, 사업자 번호, 승인번호, 비고)');
        adoquery1.SQL.Add('Values');
        adoquery1.SQL.Add('( + :N1 + '', ');
        adoquery1.SQL.Add(''' + :N2 + '', ');
        adoquery1.SQL.Add(''' + :N3 + '', ');
        adoquery1.SQL.Add(''' + :N4 + '', ');
        adoquery1.SQL.Add(''' + :N5 + '', ');
        adoquery1.SQL.Add(''' + :N6 + '', ');
        adoquery1.SQL.Add(''' + :N7 + '', ');
        adoquery1.SQL.Add(''' + :N8 + )');

    제생각으러는 이부분이 틀린것 같네여... insert 문법이 틀린것 같아요..
    adoquery1.SQL.Add('insert into 고객카드(상호,대표자,종목,...비고) values');
    adoquery1.SQL.Add('(:N1,');
    adoquery1.SQL.Add('(:N2,');
    adoquery1.SQL.Add('(:N3,');

                       .
                       .
                       .
                       .
                       .
    adoquery1.SQL.Add(':N8 )');
    이렇게 하시고..밑에 파라미터를 잡아 주시던지..
    n1~n8이 변수라면...
    따옴표 쓰는게 틀렸어염..~~

    adoquery1.SQL.Add('Values');
        adoquery1.SQL.Add('(" ' + N1 + ' ", ');
        adoquery1.SQL.Add(' " ' + N2 + ' ", ');
        adoquery1.SQL.Add(' " ' + N3 + ' ", ');
        adoquery1.SQL.Add(' " ' + N4 + ' ", ');
        adoquery1.SQL.Add(' " ' + N5 + ' ", ');
        adoquery1.SQL.Add(' " ' + N6 + ' ", ');
        adoquery1.SQL.Add(' " ' + N7 + ' ", ');
        adoquery1.SQL.Add(' " ' + N8 + ' " )');

    이렇게 쌍따옴표를 쓰셔야 insert문에서 에러가 안날겁니다.~~

    어쨋든 도움이 되셨으면 좋겠네염..




  • Profile
    최영환 2002.03.12 03:46
    insert into 라는 오류가 발생한다면..해당 쿼리문이 잘못된듯 합니다..
    입력하고자 하는 파라메터 값을 보면 전부 스트링인것 같은데 맞는지요?
    전부 스트링 이라면 다음의 파라메터중에서 N1 의 양쪽과 N8의 오른쪽
    에 ' <= 요게 빠진거 아닌가요?

        adoquery1.SQL.Add('Values');
        adoquery1.SQL.Add('( + :N1 + '', ');
        adoquery1.SQL.Add(''' + :N2 + '', ');
        adoquery1.SQL.Add(''' + :N3 + '', ');
        adoquery1.SQL.Add(''' + :N4 + '', ');
        adoquery1.SQL.Add(''' + :N5 + '', ');
        adoquery1.SQL.Add(''' + :N6 + '', ');
        adoquery1.SQL.Add(''' + :N7 + '', ');
        adoquery1.SQL.Add(''' + :N8 + )');