Q&A

  • MySql Query에 관한 질문입니다.
제가 지금 MysqlDB를 이용한 프로그램은 만들고 있는데...
컴포넌트로 zeos를 사용하고 있습니다..
근데 Query쪽에서 에러가 납니다...
알고 계신분 꼭 좀 갈켜 주세요!!! 꼭~
소스랑 에러메세지 올립니다.

============== Error 메세지 =========================================
Project1.exe raised exception class EDatabaseError with message 'Transaction component not defined'.
Process stopped. Use Step or Run to continue.
====================================================================

================= 소스 ==============================================
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, ComCtrls, StdCtrls, Grids,
  Buttons, Db, DBTables, ZConnect, ZMySqlCon, ZQuery, ZMySqlQuery ;

type
  TFrm_user = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    BitBtn_reset: TBitBtn;
    Btn_In: TBitBtn;
    Btn_modi: TBitBtn;
    Btn_Exit: TBitBtn;
    Btn_del: TBitBtn;
    Label2: TLabel;
    SGrid_user: TStringGrid;
    name_Edit: TEdit;
    id_Edit: TEdit;
    pw_Edit: TEdit;
    Panel9: TPanel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    ZMySqlDB: TZMySqlDatabase;
    MySqlQuery_user1: TZMySqlQuery;
    MySqlQueryTemp: TZMySqlQuery;
    procedure BitBtn_resetClick(Sender: TObject);
    procedure Btn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Btn_InClick(Sender: TObject);
    procedure Btn_delClick(Sender: TObject);
    procedure name_EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure id_EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure pw_EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SGrid_userDblClick(Sender: TObject);
    procedure SGrid_userMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_user: TFrm_user;

implementation

{$R *.DFM}

procedure TFrm_user.BitBtn_resetClick(Sender: TObject);
begin
   if MESSAGEDLG('모든 정보를 초기화 하시겠습니까?',mtconfirmation,[mbyes,mbno],0)=mryes then
   begin
     name_Edit.Clear;
     id_Edit.Clear;
     pw_Edit.Clear;
   end
   else begin Exit; end;
  
end;

procedure TFrm_user.Btn_ExitClick(Sender: TObject);
begin

  if MessageDlg(' 종료 하시겠습니까? ',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
   Close;
  end
  else begin exit; end

end;

procedure TFrm_user.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Release;
end;

procedure TFrm_user.FormCreate(Sender: TObject);
var
  i: integer;
begin
   Label3.Caption := '  '+formatdatetime('yyyy-mm-dd (ddd)',now);
   Edit1.Clear;
   name_Edit.Clear;
   id_Edit.Clear;
   pw_Edit.Clear;

   with SGrid_user do
   begin
         RowHeights[0] := 21;

         Cells[ 0,0] := ' 번 호';      ColWidths[ 0] :=80;
         Cells[ 1,0] := '  성  명';     ColWidths[ 1] :=100;
         Cells[ 2,0] := '  I   D';      ColWidths[ 2] :=100;
         Cells[ 3,0] := '  PassWord';  ColWidths[ 3] :=100;

   end;

   MySqlQuery_user1.Close;
   MySqlQuery_user1.SQL.Clear;
   MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
   MySqlQuery_user1.SQL.Add(' from ymember ');
   MySqlQuery_user1.SQL.Add(' order by idx ');
   MySqlQuery_user1.Open;

   SGrid_user.RowCount := MySqlQuery_user1.RecordCount +1;

   for i := 1 to SGrid_user.RowCount - 1 do
      begin

      SGrid_user.Cells[0,i]:=MySqlQuery_user1.FieldByName('idx').asstring;
      SGrid_user.Cells[1,i]:=MySqlQuery_user1.FieldByName('yname').asstring;
      SGrid_user.Cells[2,i]:=MySqlQuery_user1.FieldByName('yid').asstring;
      SGrid_user.Cells[3,i]:=MySqlQuery_user1.FieldByName('ypass').asstring;
      
      SGrid_user.RowHeights[i] := 21;
      MySqlQuery_user1.next;

     end;

end;

procedure TFrm_user.Btn_InClick(Sender: TObject);
var
i : Integer;
Data : array [1..4] of string;
begin
  Data[1]:= Edit1.Text;
  Data[2]:= name_Edit.Text;
  Data[3]:= id_Edit.Text;
  Data[4]:= pw_Edit.Text;

  if Data[2]='' then
  begin
     Showmessage('이름를 입력하세요!!');
     name_Edit.SetFocus;
     Exit;
  end
  else if data[3] ='' then begin
       showmessage('아이디를 입력하세요!!');
       id_Edit.SetFocus ;
       Exit;
  end
  else if data[4] = '' then begin
       showmessage('비밀번호를 입력하세요!!');
       pw_Edit.SetFocus ;
       Exit;
  end
  else begin
   Next;
  end;

  MySqlQuery_user1.Close;
  MySqlQuery_user1.SQL.Clear;
  MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
  MySqlQuery_user1.SQL.Add(' from ymember ');
  MySqlQuery_user1.SQL.Add(' where yid = '+ Quotedstr(trim(Data[2])));
  MySqlQuery_user1.SQL.Add(' order by idx ');
  MySqlQuery_user1.Open;


// Try
// ZMySqlDB.StartTransaction;
     if not MySqlQuery_user1.Eof then
     begin
       // 에디터 박스에 입력한 데이타를 수정 할것인지 사용자의 확인을 위해 질문한다.
       if MESSAGEDLG('아이디 '+ Trim(Data[2]) +' 가 중복 됩니다, 수정하시겠습니까?',
       mtconfirmation,[mbyes,mbno],0)=mryes then
       begin
        // 입력을 받은 데이타와 변수들과의 조화에 의해 DB에 업데이트한다.
         MySqlQueryTemp.close;
         MySqlQueryTemp.SQL.Clear;
         MySqlQueryTemp.SQL.Add(' Update YMEMBER set ' +
                           ' yname ='+ Quotedstr(Trim(data[2])) +','+
                           //' yid ='+ Quotedstr(Trim(data[3]))+','+
                           ' ypass ='+ Quotedstr(Trim(data[4])) +
                           ' Where yid = '+ Quotedstr(Trim(data[2])));

         MySqlQueryTemp.ExecSQL;

       end //if MESSAGEDLG('사원코드 ' ~ ) then
       else begin
        name_Edit.SetFocus;  // 취소버튼을 누르면 포커스가 사원코드 에디터박스로 이동한다.
       end;

     end //if not Queryuser1.Eof then

     else if MySqlQuery_user1.Eof then
     begin
      if   // 에디터 박스에 입력한 데이타(사원코드)를 저장 할것인지 사용자의 확인을 위해 질문한다.
      MESSAGEDLG('성명: '+ Trim(Data[2]) + ' 아이디: '+Trim(Data[3])+' 을 저장하시겠습니까?',
                  mtconfirmation,[mbyes,mbno],0)=mryes then
      begin
           // 입력을 받은 데이타와 변수들과의 조화에 의해 DB에 저장한다.
           MySqlQueryTemp.Close;
           MySqlQueryTemp.SQL.Clear;
           MySqlQueryTemp.SQL.Add('insert into YMEMBER(yname,yid,ypass)values('+
                             Quotedstr(Trim(Data[2]))+','+
                             Quotedstr(Trim(Data[3]))+','+
                             Quotedstr(Trim(Data[4]))+')');

           MySqlQueryTemp.ExecSQL;

      end //if MESSAGEDLG('사원코드: '+ Trim(Data[1]) ~ ) then
      else begin
        name_Edit.SetFocus;  // 취소버튼을 누르면 포커스가 사원코드 에디터박스로 이동한다.
      end;

     end; //else if QuerySawon.Eof then
//     ZMySqlDB.Commit;

      Edit1.Clear;
      name_Edit.Clear;
      id_Edit.Clear;
      pw_Edit.Clear;

      name_Edit.SetFocus;

//   Except begin
//       ZMySqlDB.Rollback;
  //  end; //Except ~

  // end; // Try ~

   MySqlQuery_user1.Close;
   MySqlQuery_user1.SQL.Clear;
   MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
   MySqlQuery_user1.SQL.Add(' from YMEMBER ');
   MySqlQuery_user1.SQL.Add(' order by idx ');
   MySqlQuery_user1.Open;

   SGrid_user.RowCount := MySqlQuery_user1.RecordCount +1;

   for i := 1 to SGrid_user.RowCount - 1 do
      begin

      SGrid_user.Cells[0,i]:=MySqlQuery_user1.FieldByName('idx').asstring;
      SGrid_user.Cells[1,i]:=MySqlQuery_user1.FieldByName('yname').asstring;
      SGrid_user.Cells[2,i]:=MySqlQuery_user1.FieldByName('yid').asstring;
      SGrid_user.Cells[3,i]:=MySqlQuery_user1.FieldByName('ypass').asstring;

      SGrid_user.RowHeights[i] := 21;
      MySqlQuery_user1.next;

     end;
//////////////////////////////////////////////////////////////////////////////////////////////////////

   MySqlQuery_user1.Close;
   MySqlQuery_user1.SQL.Clear;
   MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
   MySqlQuery_user1.SQL.Add(' from ymember ');
   MySqlQuery_user1.SQL.Add(' order by idx ');
   MySqlQuery_user1.Open;

   SGrid_user.RowCount := MySqlQuery_user1.RecordCount +1;

   for i := 1 to SGrid_user.RowCount - 1 do
      begin

      SGrid_user.Cells[0,i]:=MySqlQuery_user1.FieldByName('idx').asstring;
      SGrid_user.Cells[1,i]:=MySqlQuery_user1.FieldByName('yname').asstring;
      SGrid_user.Cells[2,i]:=MySqlQuery_user1.FieldByName('yid').asstring;
      SGrid_user.Cells[3,i]:=MySqlQuery_user1.FieldByName('ypass').asstring;

      SGrid_user.RowHeights[i] := 21;
      MySqlQuery_user1.next;

     end;

end;

procedure TFrm_user.Btn_delClick(Sender: TObject);
var
i : Integer;
Data : array [1..4] of string;
begin
   Data[1]:= Edit1.Text;
   Data[2]:= name_Edit.Text;
   Data[3]:= id_Edit.Text;
   Data[4]:= pw_Edit.Text;


  if MessageDlg(Trim(Data[2])+' , '+ Trim(Data[3]) +' 님의 정보를 삭제 하시겠습니까?',
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then

  MySqlQuery_user1.Close;
  MySqlQuery_user1.SQL.Clear;
  MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
  MySqlQuery_user1.SQL.Add(' from ymember ');
  MySqlQuery_user1.SQL.Add(' where yid = '+ Quotedstr(trim(Data[3])));
  MySqlQuery_user1.SQL.Add(' order by idx ');
  MySqlQuery_user1.Open;

//  try
//   ZMySqlDB.StartTransaction ;
     if not MySqlQuery_user1.EOF then  begin
        MySqlQueryTemp.close ;
        MySqlQueryTemp.sql.Clear ;
        MySqlQueryTemp.sql.Add('Delete from ymember '+
                          ' where yid =' + Quotedstr(data[3]));


        //Querytemp.SQL.SaveToFile('c:Bde.txt');
        MySqlQueryTemp.ExecSQL ;
        end
        else if MySqlQuery_user1.EOF then  begin
        end;
//        ZMySqlDB.Commit;

//    Except
//        ZMySqlDB.Rollback;
//    end;  //Except
//         MessageDlg('삭제 하였습니다', mtInformation,[mbOk], 0);
         //lose;
//      end;

   MySqlQuery_user1.Close;
   MySqlQuery_user1.SQL.Clear;
   MySqlQuery_user1.SQL.Add(' select idx,yname,yid,ypass ');
   MySqlQuery_user1.SQL.Add(' from ymember ');
   MySqlQuery_user1.SQL.Add(' order by idx ');
   MySqlQuery_user1.Open;

   SGrid_user.RowCount := MySqlQuery_user1.RecordCount +1;

   for i := 1 to SGrid_user.RowCount - 1 do
      begin

      SGrid_user.Cells[0,i]:=MySqlQuery_user1.FieldByName('idx').asstring;
      SGrid_user.Cells[1,i]:=MySqlQuery_user1.FieldByName('yname').asstring;
      SGrid_user.Cells[2,i]:=MySqlQuery_user1.FieldByName('yid').asstring;
      SGrid_user.Cells[3,i]:=MySqlQuery_user1.FieldByName('ypass').asstring;

      SGrid_user.RowHeights[i] := 21;
      MySqlQuery_user1.next;

     end;

   Edit1.Clear;
   name_Edit.Clear;
   id_Edit.Clear;
   pw_Edit.Clear;
  
end;
======================================================================
소스가 넘 긴가??? ^^;
그럼 고수님들 꼭 좀 갈켜 주세요!!!
1  COMMENTS
  • Profile
    정성훈 2002.06.27 22:16
    안녕하세요
    저도 비슷한 에러메시지였었는데 참고하세요..
    메뉴중에 Project==>Option 가시면 패키지 부분에
    Build With RunTime Packages 가 체크되어있는지 확인해보시구 컴파일 해보세요.


    • 안두식
    • 2002.06.27 20:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강재규
      2002.06.27 20:33
      저도 초보거등요... 도움이 되었으면 합니다... from에서 Properties에 보시면 Position의 속성을 poDes...
    • 블랙썬
      2002.06.27 20:39
      Form의 Properties에 보면 BorderIcons 라는 속성이 있습니다 여기서 최소화,최대화 등의 아이콘을 없...
    • 최용일
      2002.06.27 22:08
      안녕하세요. 최용일입니다. Project/Add to Project...메뉴를 선택해서 기본적인 함수기능이 있는 해당...
    • 델파이사랑
      2002.06.28 18:15
      감사합니다( 냉무)
    • 이재진
    • 2002.06.27 19:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.06.28 02:33
      도움이 될런지 모르지만... 차라리 휠마우스를 먹게하면 되지 않을까요... Delphi Tips에서 ...
    • 백지연
    • 2002.06.27 19:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2002.06.29 03:08
      리포트의 경로는 실행화일이 있는 subdirectory 로 하시는게 좋을듯 합니다. 예를 들어. 실행화일...
    • 강기철
      2002.06.27 19:46
      감사드립니다. 일이 빨라 질것 같네요. 좋은 날 되시길 바랍니다.^^
    • 염상철
      2002.06.27 19:18
      insert into table_4 (select * from TABLE_1 where A=3 union all select * from TABLE_2 where A=3 ...
    • 김수경
      2002.06.27 19:17
      TABLE_1, TABLE_2, TABLE_3을 JOIN명령을 이용해서 Query하신후 TABLE_4에 INSERT명령을 사용해서 ...
    • 이재봉
      2002.06.27 18:51
      begin ~ end 부분이 빠졌네요. 이걸로 함 해보세요. procedure TForm1.ComboBox1DrawItem(Control: TWin...
    • 머슴
      2002.06.27 18:45
      procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;   Rect: TRect; S...
    • 김도형
    • 2002.06.27 17:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.06.27 18:15
      combobox1.ItemIndex := 1;
    • 모범생
    • 2002.06.27 10:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.06.29 13:09
      Msdn을 보시면 Avi를 입출력하고 편집가능한 함수들이 있을 것입니다. 아마도 압축안된 Avi만 가능한것으...
    • 최용일
      2002.06.27 19:19
      안녕하세요. 최용일입니다. 그렇게 특화된 함수는 없을겁니다. 그냥 파일입출력함수를 쓰셔서 하셔야 될...
    • 정성훈
      2002.06.27 22:16
      안녕하세요 저도 비슷한 에러메시지였었는데 참고하세요.. 메뉴중에 Project==>Option 가시면 패키지 ...
    • 최용일
      2002.06.27 19:16
      안녕하세요. 최용일입니다. 함수밖에서 파라매터값을 받으시려면 참조에 의한 호출을 하셔야 합니다. C...
    • 이호성
    • 2002.06.27 06:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.27 22:05
      안녕하세요. 최용일입니다. BltTBitmapAsDib란 함수 테스트 해보았는데 잘 작동하던데요. 인터넷에서 많...
    • 하종옥
    • 2002.06.27 05:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.06.29 21:43
      가장 많이 나타나는 것중의 하나가 오라클 유저가 다른경우가 아닐까 합니다.
    • Malchus.Lee
    • 2002.06.27 05:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이선경
      2002.06.27 22:31
      옛날 경험으로는 파라독스가 원래 그래요 ...
    • 호야
      2002.06.27 05:35
      이상없이 잘되는데... ㅡㅡ;; 한가지 이상한게 있따면... Get_ProgramPath 프로시져가 실행시키는 파...
    • 한만교
    • 2002.06.27 03:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.27 04:27
      안녕하세요. 최용일입니다. brcc32.exe는 리소스컴파일러입니다. dcc32.exe가 커맨드라인컴파일러입...
    • 한만교
      2002.06.27 10:28
      drcc32.exe aaa_pro.dpr > aaa_pro.exe 이렇게 하는군여... 감사합니다
    • 하기
      2002.06.27 03:45
      ExtractFilePath(Application.ExeName); 맞나?? ^^;
    • 염상철
      2002.06.27 03:15
      copy(combobox.text,1,3) 일케 하면 코드만..뽑아 낼수 잇지 않을까여~?
    • 세미콜론
      2002.06.27 03:30
      답변 감사드리구요~ 네! 그렇게 뽑아낸 코드를 다시 그콤보에 그값을 넣었을때(코딩으루) combbox.text :...
    • 정종필
      2002.06.27 09:12
      ComboBox.ItemIndex := ComboBox.Items.IndexOf('001 홍길수'); 이렇게 하면 ComboBox 의 ItemIndex 를 해...
    • 이종택
    • 2002.06.27 02:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 염상철
      2002.06.27 03:29
      program filescommand bolrandbde 맞나여~? 여기를 걍...del루 완전히 삭제 하구.. bde를 다시 깔면 될...
    • 하기
      2002.06.27 03:04
      아마 삭제가 안되는 이유는 Alias(데이타베이스)가 Open이 되어 있는 상태인것 같은 생각이 드는군요... ...
    • 최용일
      2002.06.27 04:29
      안녕하세요. 최용일입니다. OwnerDraw로 직접 체크박스를 그려야 될거같은데요... 쫌 많이 작업이 필요...
    • 초보
    • 2002.06.27 02:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.06.27 02:49
      안녕하세요 하얀까마귀 입니다. 어떤 이미지 처리를 하실껀지 알아야 되구요.. 제 경우에는 그걸. 그...