Delphi- 操作数据库基础
Delphi其实是一门挺好的语言,有很多优点。在操作数据库这块和C#/.Net有很多相似的地方,也是基于组件的形式,也是基于ADO,我很喜欢这种方式。本文记录一下自己学习了一段时间Delphi后,参考了一下书和源码后,如何操作一下MSSQLSEVER数据库,方便日后查阅。
一、新建一个Data Module,配置数据库连接字符串(类型于.Net里面的web.Config配置数据库连接字符串)

这里的单元为FDM,Data Module的名字叫F_DM,之后其他FORM,新建一个ADOQuery都可以在Connection处填上 F_DM.ADOConnection。这样就不用每次新建FORM都去配置连接字符串。
代码:
1 implementation 2 3 {$R *.dfm} 4 5 procedure TF_DM.DataModuleCreate(Sender: TObject); 6 var 7 connStr: string; 8 begin 9 10 try 11 connStr := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=123456;Initial Catalog=StBusinessLeague;Data Source=.'; 12 Adoconnection1.ConnectionString := connStr; 13 14 ADOQuery1.Close; 15 ADOQuery1.SQL.Clear; 16 ADOQuery1.SQL.Add('select * from UserInfo'); 17 ADOQuery1.Active := True; 18 ADOQuery1.Open; 19 20 except 21 Exit; 22 end; 23 end; 24 25 end.
二、登陆界面的编写
界面如下截图:

代码编写如下:
 
1 procedure TFormLogin.btnLoginClick(Sender: TObject); 2 var 3 strName:string; 4 strPwd:string; 5 begin 6 strName:= edtName.Text; 7 strPwd:= edtPwd.Text; 8 9 10 QryLogin.SQL.Clear; 11 QryLogin.SQL.Add('SELECT * FROM UserInfo WHERE UserName=:UserName AND Password=:Password'); 12 QryLogin.Parameters.ParamByName('UserName').Value := strName; 13 QryLogin.Parameters.ParamByName('PassWord').Value := strPwd; 14 QryLogin.Open; 15 16 if QryLogin.RecordCount > 0 then 17 FormMain.ShowModal 18 else 19 ShowMessage('error!'); 20 end;
三、主界面的编写

代码如下:
 
1 {$R *.dfm} 2 uses MainAdd, MainUpdate; 3 procedure TFormMain.FormShow(Sender: TObject); 4 begin 5 qryNews.Close; 6 qryNews.SQL.Clear; 7 qryNews.SQL.Add('select * from LinkInfo'); 8 qryNews.Open; 9 end; 10 11 procedure TFormMain.btnSearchClick(Sender: TObject); 12 var 13 strTitle: string; 14 begin 15 16 strTitle:= edtName.Text; 17 18 qryNews.Close; 19 qryNews.SQL.Clear; 20 qryNews.SQL.Add('select * from LinkInfo where LinkName like ''%'+strTitle+'%'''); 21 qryNews.Open; 22 end; 23 24 procedure TFormMain.btnAddClick(Sender: TObject); 25 begin 26 Application.CreateForm(TFormMainAdd,FormMainAdd); 27 FormMainAdd.ShowModal; 28 FormMainAdd.Free; 29 end; 30 31 procedure TFormMain.btnUpdateClick(Sender: TObject); 32 begin 33 Application.CreateForm(TFormMainUpdate,FormMainUpdate); 34 FormMainUpdate.ShowModal; 35 FormMainUpdate.Free; 36 end; 37 38 procedure TFormMain.btnDeleteClick(Sender: TObject); 39 var 40 Ids: string; 41 begin 42 43 try 44 IF Application.MessageBox('是否删除当前记录?','提示',MB_YESNO)= ID_YES then 45 qryNews.Delete; 46 except 47 Application.MessageBox('不能删除','提示',MB_YESNO); 48 end; 49 50 // Ids := qryNews.FieldByName('Id').AsString; 51 // qryNews.Close; 52 // qryNews.SQL.Clear; 53 // qryNews.SQL.Add('delete LinkInfo where Id=:Id;'); 54 // qryNews.Parameters.ParamByName('Id').Value := Ids; 55 // qryNews.ExecSQL; 56 // 57 // qryNews.SQL.Clear; 58 // qryNews.SQL.Add('select * from LinkInfo'); 59 // qryNews.Open; 60 61 end; 62 63 end.
四、更新界面编写
如下截图:
  
代码:
uses Main;
procedure TFormMainUpdate.btnOKClick(Sender: TObject);
var
  strSql:string;
  Ids:string;
begin
//    FormMain.qryNews.Edit;
//    FormMain.qryNews.FieldByName('LinkType').AsString:= edtLikeType.Text;
//    FormMain.qryNews.FieldByName('LinkName').AsString:= edtLinkName.Text;
//    FormMain.qryNews.FieldByName('LinkUrl').AsString:= edtLinkUrl.Text;
//    FormMain.qryNews.FieldByName('CreateDate').AsString:= edtCreateDate.Text;
//    FormMain.qryNews.FieldByName('LinkOrder').AsString:=edtOrder.Text;
//    FormMain.qryNews.UpdateRecord;
//    FormMain.qryNews.Post;
    Ids := FormMain.qryNews.FieldByName('Id').AsString;
    strSql:= 'Update LinkInfo set LinkType=:LinkType,LinkName=:LinkName where Id=:Id';
    FormMain.qryNews.Close;
    FormMain.qryNews.SQL.Clear;
    FormMain.qryNews.SQL.Add(strSql);
    FormMain.qryNews.Parameters.ParamByName('Id').Value := Ids;
    FormMain.qryNews.Parameters.ParamByName('LinkType').Value := edtLikeType.Text;
    FormMain.qryNews.Parameters.ParamByName('LinkName').Value := edtLinkName.Text;
    FormMain.qryNews.ExecSQL;
end;
procedure TFormMainUpdate.FormShow(Sender: TObject);
begin
    edtLikeType.Text := FormMain.qryNews.FieldByName('LinkType').AsString;
    edtLinkName.Text := FormMain.qryNews.FieldByName('LinkName').AsString;
    edtLinkUrl.Text := FormMain.qryNews.FieldByName('LinkUrl').AsString;
    edtCreateDate.Text := FormMain.qryNews.FieldByName('CreateDate').AsString;
    edtOrder.Text := FormMain.qryNews.FieldByName('LinkOrder').AsString;
end;
end.
五、添加界面的编写
如下截图:

代码:
uses Main;
procedure TFormMainAdd.btnOKClick(Sender: TObject);
var
  strSql:string;
begin
    try
      FormMain.qryNews.Insert;
      FormMain.qryNews.FieldByName('LinkType').AsString:= edtLikeType.Text;
      FormMain.qryNews.FieldByName('LinkName').AsString:= edtLinkName.Text;
      FormMain.qryNews.FieldByName('LinkUrl').AsString:= edtLinkUrl.Text;
      FormMain.qryNews.FieldByName('CreateDate').AsString:= edtCreateDate.Text;
      FormMain.qryNews.FieldByName('LinkOrder').AsString:=edtOrder.Text;
      FormMain.qryNews.UpdateRecord;
      FormMain.qryNews.Post;
    except
       Application.MessageBox('请输入正确的内容','提示',MB_OK);
       Exit;
    end;
    
    
//    strSql:= 'Insert Into LinkInfo(LinkType,LinkName,LinkUrl,CreateDate,LinkOrder) '
//                +'Values(:LinkType,:LinkName,:LinkUrl,:CreateDate,:LinkOrder)';
//    FormMain.qryNews.Close;
//    FormMain.qryNews.SQL.Clear;
//    FormMain.qryNews.SQL.Add(strSql);
//
//    FormMain.qryNews.Parameters.ParamByName('LinkType').Value := edtLikeType.Text;
//    FormMain.qryNews.Parameters.ParamByName('LinkName').Value := edtLinkName.Text;
//    FormMain.qryNews.Parameters.ParamByName('LinkUrl').Value := edtLinkUrl.Text;
//    FormMain.qryNews.Parameters.ParamByName('CreateDate').Value := edtCreateDate.Text;
//    FormMain.qryNews.Parameters.ParamByName('LinkOrder').Value := edtOrder.Text;
//
//    FormMain.qryNews.ExecSQL;
end;
end.
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号