델파이로 mysql 의 user 테이블을 다루려고합나다.
문제가 무엇인지.
DB 쪽으로 첨음이라 잘 안되네요....
참고로 ODBC 로 세팅하고 연결하면 연결되고요
새로운 USER 추가 수정하려고 하니 에러가 나서요......
또 이것이 가능한것인가
조언좀 부탁 합니다.
안치봉씨만 맨 밑으로 보세요
unit Database;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, Mask, KXEdit, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Query1: TQuery;
Database1: TDatabase;
GroupBox2: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
CheckBox13: TCheckBox;
CheckBox14: TCheckBox;
CheckBox15: TCheckBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn3: TBitBtn;
procedure DBGrid1DblClick(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Newappend:boolean;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//불러오기
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
Newappend:=False;
Label7.Caption:='기존사용자 변경';
with Query1 do begin
edit1.Text:=FieldByName('User').AsString;
Edit2.Text:=FieldByName('Password').AsString;
if FieldByName('Select_priv').AsString = 'Y' then
CheckBox1.Checked:=True
else CheckBox1.Checked:=False;
if FieldByName('Insert_priv').AsString = 'Y' then
CheckBox2.Checked:=True
else CheckBox2.Checked:=False;
if FieldByName('Update_priv').AsString = 'Y' then
CheckBox3.Checked:=True
else CheckBox3.Checked:=False;
if FieldByName('Delete_priv').AsString = 'Y' then
CheckBox4.Checked:=True
else CheckBox4.Checked:=False;
if FieldByName('Create_priv').AsString = 'Y' then
CheckBox5.Checked:=True
else CheckBox5.Checked:=False;
if FieldByName('Drop_priv').AsString = 'Y' then
CheckBox6.Checked:=True
else CheckBox6.Checked:=False;
//****************************************************************
if FieldByName('Reload_priv').AsString = 'Y' then
CheckBox7.Checked:=True
else CheckBox7.Checked:=False;
if FieldByName('Shutdown_priv').AsString = 'Y' then
CheckBox8.Checked:=True
else CheckBox8.Checked:=False;
if FieldByName('Process_priv').AsString = 'Y' then
CheckBox9.Checked:=True
else CheckBox9.Checked:=False;
if FieldByName('File_priv').AsString = 'Y' then
CheckBox10.Checked:=True
else CheckBox10.Checked:=False;
if FieldByName('Grant_priv').AsString = 'Y' then
CheckBox11.Checked:=True
else CheckBox11.Checked:=False;
if FieldByName('references_priv').AsString = 'Y' then
CheckBox12.Checked:=True
else CheckBox12.Checked:=False;
//****************************************************************
if FieldByName('Index_priv').AsString = 'Y' then
CheckBox13.Checked:=True
else CheckBox13.Checked:=False;
if FieldByName('Alter_priv').AsString = 'Y' then
CheckBox14.Checked:=True
else CheckBox14.Checked:=False;
if FieldByName('Host').AsString = '%' then
CheckBox15.Checked:=True
else CheckBox15.Checked:=False;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Close;
end;
//적용시키기
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
database1.StartTransaction;
With Query1 do begin
if Newappend then begin
SQL.Clear;
SQL.Add('INSERT INTO User');
SQL.Add(' (Host,User,Password,Select_priv,Insert_priv,Update_priv,');
SQL.Add(' Delete_priv,Create_priv,Drop_priv,Reload_priv,');
SQL.Add(' Shutdown_priv,Process_priv,File_priv,Grant_priv,');
SQL.Add(' references_priv,Index_priv,Alter_priv)');
SQL.Add('VALUES(:sHost,:sUser,:sPassword,:sSelect_priv,:sInsert_priv,:sUpdate_priv,');
SQL.Add(' :sDelete_priv,:sCreate_priv,:sDrop_priv,:sReload_priv,');
SQL.Add(' :sShutdown_priv,:sProcess_priv,:sFile_priv,:sGrant_priv,');
SQL.Add(' :sreferences_priv,:sIndex_priv,:sAlter_priv)');
end
else //Newappend=False 거래테이블 업데이트
begin
SQL.Clear;
SQL.Add('UPDATE User');
SQL.Add('SET Host= :sHost, User= :sUser, Password= :sPassword,');
SQL.Add(' Select_priv= :sSelect_priv, Insert_priv= :sInsert_priv,');
SQL.Add(' Update_priv= :sUpdate_priv, Delete_priv= :sDelete_priv,');
SQL.Add(' Create_priv= :sCreate_priv, Drop_priv= :sDrop_priv,');
SQL.Add(' Reload_priv= :sReload_priv, Shutdown_priv= :sShutdown_priv,');
SQL.Add(' Process_priv= :sProcess_priv,File_priv= :sFile_priv,');
SQL.Add(' Grant_priv= :sGrant_priv, references_priv= :sReferences_priv,');
SQL.Add(' Index_priv= :sIndex_priv, Alter_priv= :sAlter_priv');
SQL.Add('WHERE User = :sUser');
end;//if end;
if CheckBox15.Checked then
ParamByName('sHost').AsString :='%'
else ParamByName('sHost').AsString :='localhost';
ParamByName('sUser').AsString :=Edit1.Text;
ParamByName('sPassword').AsString :=Edit2.Text;
if CheckBox1.Checked then
ParamByName('sSelect_priv').AsString :='Y'
else ParamByName('sSelect_priv').AsString :='N';
if CheckBox2.Checked then
ParamByName('sInsert_priv').AsString :='Y'
else ParamByName('sInsert_priv').AsString :='N';
if CheckBox3.Checked then
ParamByName('sUpdate_priv').AsString :='Y'
else ParamByName('sUpdate_priv').AsString :='N';
if CheckBox4.Checked then
ParamByName('sDelete_priv').AsString :='Y'
else ParamByName('sDelete_priv').AsString :='N';
if CheckBox5.Checked then
ParamByName('sCreate_priv').AsString :='Y'
else ParamByName('sCreate_priv').AsString :='N';
if CheckBox6.Checked then
ParamByName('sDrop_priv').AsString :='Y'
else ParamByName('sDrop_priv').AsString :='N';
if CheckBox7.Checked then
ParamByName('sReload_priv').AsString :='Y'
else ParamByName('sReload_priv').AsString :='N';
if CheckBox8.Checked then
ParamByName('sShutdown_priv').AsString :='Y'
else ParamByName('sShutdown_priv').AsString :='N';
if CheckBox9.Checked then
ParamByName('sProcess_priv').AsString :='Y'
else ParamByName('sProcess_priv').AsString :='N';
if CheckBox10.Checked then
ParamByName('sFile_priv').AsString :='Y'
else ParamByName('sFile_priv').AsString :='N';
if CheckBox11.Checked then
ParamByName('sGrant_priv').AsString :='Y'
else ParamByName('sGrant_priv').AsString :='N';
if CheckBox12.Checked then
ParamByName('sReferences_priv').AsString :='Y'
else ParamByName('sReferences_priv').AsString :='N';
if CheckBox13.Checked then
ParamByName('sIndex_priv').AsString :='Y'
else ParamByName('sIndex_priv').AsString :='N';
if CheckBox14.Checked then
ParamByName('sAlter_priv').AsString :='Y'
else ParamByName('sAlter_priv').AsString :='N';
ExecSQL;
Database1.Commit;
end;//with
except
Database1.Rollback;
Application.MessageBox('저장에 실패하였습니다.','저장실패',MB_OK);
end;
end;//Apply click
procedure TForm1.FormCreate(Sender: TObject);
begin
Newappend:=True;
end;
end.
요즘 많이 바쁜가봐요...
꼼짝을 못하는것 같아요
그래도 내가 전화해서 귀찬게 해도 잘 대답해줘서
고마워요
빠른시일네에 시간 한번 냅시다.
영양보충도 하고 머리도 좀 식히고
우리들 보충수업좀 부탁해요...
> 델파이로 mysql 의 user 테이블을 다루려고합나다.
> 문제가 무엇인지.
> DB 쪽으로 첨음이라 잘 안되네요....
> 참고로 ODBC 로 세팅하고 연결하면 연결되고요
> 새로운 USER 추가 수정하려고 하니 에러가 나서요......
> 또 이것이 가능한것인가
> 조언좀 부탁 합니다.
>
> 안치봉씨만 맨 밑으로 보세요
>
>
>
> unit Database;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, Mask, KXEdit, ExtCtrls;
>
> type
> TForm1 = class(TForm)
> Label1: TLabel;
> GroupBox1: TGroupBox;
> Label2: TLabel;
> Label3: TLabel;
> BitBtn1: TBitBtn;
> BitBtn2: TBitBtn;
> DBGrid1: TDBGrid;
> DataSource1: TDataSource;
> Query1: TQuery;
> Database1: TDatabase;
> GroupBox2: TGroupBox;
> CheckBox1: TCheckBox;
> CheckBox2: TCheckBox;
> CheckBox3: TCheckBox;
> CheckBox4: TCheckBox;
> CheckBox5: TCheckBox;
> CheckBox6: TCheckBox;
> CheckBox7: TCheckBox;
> CheckBox8: TCheckBox;
> CheckBox9: TCheckBox;
> CheckBox10: TCheckBox;
> CheckBox11: TCheckBox;
> CheckBox12: TCheckBox;
> CheckBox13: TCheckBox;
> CheckBox14: TCheckBox;
> CheckBox15: TCheckBox;
> Label4: TLabel;
> Label5: TLabel;
> Label6: TLabel;
> Label7: TLabel;
> Edit1: TEdit;
> Edit2: TEdit;
> BitBtn3: TBitBtn;
> procedure DBGrid1DblClick(Sender: TObject);
> procedure BitBtn3Click(Sender: TObject);
> procedure BitBtn1Click(Sender: TObject);
> procedure FormCreate(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> Newappend:boolean;
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
> //불러오기
> procedure TForm1.DBGrid1DblClick(Sender: TObject);
> begin
> Newappend:=False;
> Label7.Caption:='기존사용자 변경';
> with Query1 do begin
> edit1.Text:=FieldByName('User').AsString;
> Edit2.Text:=FieldByName('Password').AsString;
>
> if FieldByName('Select_priv').AsString = 'Y' then
> CheckBox1.Checked:=True
> else CheckBox1.Checked:=False;
>
> if FieldByName('Insert_priv').AsString = 'Y' then
> CheckBox2.Checked:=True
> else CheckBox2.Checked:=False;
>
> if FieldByName('Update_priv').AsString = 'Y' then
> CheckBox3.Checked:=True
> else CheckBox3.Checked:=False;
>
> if FieldByName('Delete_priv').AsString = 'Y' then
> CheckBox4.Checked:=True
> else CheckBox4.Checked:=False;
>
> if FieldByName('Create_priv').AsString = 'Y' then
> CheckBox5.Checked:=True
> else CheckBox5.Checked:=False;
>
> if FieldByName('Drop_priv').AsString = 'Y' then
> CheckBox6.Checked:=True
> else CheckBox6.Checked:=False;
> //****************************************************************
> if FieldByName('Reload_priv').AsString = 'Y' then
> CheckBox7.Checked:=True
> else CheckBox7.Checked:=False;
>
> if FieldByName('Shutdown_priv').AsString = 'Y' then
> CheckBox8.Checked:=True
> else CheckBox8.Checked:=False;
>
> if FieldByName('Process_priv').AsString = 'Y' then
> CheckBox9.Checked:=True
> else CheckBox9.Checked:=False;
>
> if FieldByName('File_priv').AsString = 'Y' then
> CheckBox10.Checked:=True
> else CheckBox10.Checked:=False;
>
> if FieldByName('Grant_priv').AsString = 'Y' then
> CheckBox11.Checked:=True
> else CheckBox11.Checked:=False;
>
> if FieldByName('references_priv').AsString = 'Y' then
> CheckBox12.Checked:=True
> else CheckBox12.Checked:=False;
> //****************************************************************
> if FieldByName('Index_priv').AsString = 'Y' then
> CheckBox13.Checked:=True
> else CheckBox13.Checked:=False;
>
> if FieldByName('Alter_priv').AsString = 'Y' then
> CheckBox14.Checked:=True
> else CheckBox14.Checked:=False;
>
> if FieldByName('Host').AsString = '%' then
> CheckBox15.Checked:=True
> else CheckBox15.Checked:=False;
> end;
> end;
>
> procedure TForm1.BitBtn3Click(Sender: TObject);
> begin
> Close;
> end;
> //적용시키기
> procedure TForm1.BitBtn1Click(Sender: TObject);
> begin
> try
> database1.StartTransaction;
> With Query1 do begin
> if Newappend then begin
> SQL.Clear;
> SQL.Add('INSERT INTO User');
> SQL.Add(' (Host,User,Password,Select_priv,Insert_priv,Update_priv,');
> SQL.Add(' Delete_priv,Create_priv,Drop_priv,Reload_priv,');
> SQL.Add(' Shutdown_priv,Process_priv,File_priv,Grant_priv,');
> SQL.Add(' references_priv,Index_priv,Alter_priv)');
>
> SQL.Add('VALUES(:sHost,:sUser,:sPassword,:sSelect_priv,:sInsert_priv,:sUpdate_priv,');
> SQL.Add(' :sDelete_priv,:sCreate_priv,:sDrop_priv,:sReload_priv,');
> SQL.Add(' :sShutdown_priv,:sProcess_priv,:sFile_priv,:sGrant_priv,');
> SQL.Add(' :sreferences_priv,:sIndex_priv,:sAlter_priv)');
> end
> else //Newappend=False 거래테이블 업데이트
> begin
> SQL.Clear;
> SQL.Add('UPDATE User');
> SQL.Add('SET Host= :sHost, User= :sUser, Password= :sPassword,');
> SQL.Add(' Select_priv= :sSelect_priv, Insert_priv= :sInsert_priv,');
> SQL.Add(' Update_priv= :sUpdate_priv, Delete_priv= :sDelete_priv,');
> SQL.Add(' Create_priv= :sCreate_priv, Drop_priv= :sDrop_priv,');
> SQL.Add(' Reload_priv= :sReload_priv, Shutdown_priv= :sShutdown_priv,');
> SQL.Add(' Process_priv= :sProcess_priv,File_priv= :sFile_priv,');
> SQL.Add(' Grant_priv= :sGrant_priv, references_priv= :sReferences_priv,');
> SQL.Add(' Index_priv= :sIndex_priv, Alter_priv= :sAlter_priv');
> SQL.Add('WHERE User = :sUser');
> end;//if end;
>
> if CheckBox15.Checked then
> ParamByName('sHost').AsString :='%'
> else ParamByName('sHost').AsString :='localhost';
>
> ParamByName('sUser').AsString :=Edit1.Text;
> ParamByName('sPassword').AsString :=Edit2.Text;
>
> if CheckBox1.Checked then
> ParamByName('sSelect_priv').AsString :='Y'
> else ParamByName('sSelect_priv').AsString :='N';
>
> if CheckBox2.Checked then
> ParamByName('sInsert_priv').AsString :='Y'
> else ParamByName('sInsert_priv').AsString :='N';
>
> if CheckBox3.Checked then
> ParamByName('sUpdate_priv').AsString :='Y'
> else ParamByName('sUpdate_priv').AsString :='N';
>
> if CheckBox4.Checked then
> ParamByName('sDelete_priv').AsString :='Y'
> else ParamByName('sDelete_priv').AsString :='N';
>
> if CheckBox5.Checked then
> ParamByName('sCreate_priv').AsString :='Y'
> else ParamByName('sCreate_priv').AsString :='N';
>
> if CheckBox6.Checked then
> ParamByName('sDrop_priv').AsString :='Y'
> else ParamByName('sDrop_priv').AsString :='N';
>
> if CheckBox7.Checked then
> ParamByName('sReload_priv').AsString :='Y'
> else ParamByName('sReload_priv').AsString :='N';
>
> if CheckBox8.Checked then
> ParamByName('sShutdown_priv').AsString :='Y'
> else ParamByName('sShutdown_priv').AsString :='N';
>
> if CheckBox9.Checked then
> ParamByName('sProcess_priv').AsString :='Y'
> else ParamByName('sProcess_priv').AsString :='N';
>
> if CheckBox10.Checked then
> ParamByName('sFile_priv').AsString :='Y'
> else ParamByName('sFile_priv').AsString :='N';
>
> if CheckBox11.Checked then
> ParamByName('sGrant_priv').AsString :='Y'
> else ParamByName('sGrant_priv').AsString :='N';
>
> if CheckBox12.Checked then
> ParamByName('sReferences_priv').AsString :='Y'
> else ParamByName('sReferences_priv').AsString :='N';
>
> if CheckBox13.Checked then
> ParamByName('sIndex_priv').AsString :='Y'
> else ParamByName('sIndex_priv').AsString :='N';
>
> if CheckBox14.Checked then
> ParamByName('sAlter_priv').AsString :='Y'
> else ParamByName('sAlter_priv').AsString :='N';
>
> ExecSQL;
> Database1.Commit;
> end;//with
> except
> Database1.Rollback;
> Application.MessageBox('저장에 실패하였습니다.','저장실패',MB_OK);
> end;
> end;//Apply click
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> Newappend:=True;
> end;
>
> end.
>
>
>
>
>
>
>
> 요즘 많이 바쁜가봐요...
> 꼼짝을 못하는것 같아요
> 그래도 내가 전화해서 귀찬게 해도 잘 대답해줘서
> 고마워요
> 빠른시일네에 시간 한번 냅시다.
> 영양보충도 하고 머리도 좀 식히고
> 우리들 보충수업좀 부탁해요...
>
>
>
아마도 윈도용 mysql을 사용하시는 것 같군요.
데몬이 이상없이 실행중인 상태라면
ODBC로 연결해서 사용할 경우에는 에러가 많이 나는 것으로 알고 있습니다.
정확한 이유는 저도 잘 모르겠습니다만...
자료실에 가면 제가 올려놓은 Winzeos라는 윈도용 MySql컴포넌트가 있습니다.
그걸 다운받아서 사용해 보시면 어떨런지. 제법 쓸만한 것 같더군요.
도움이 되었는지 모르겠군요.