日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在日常開發(fā)中,經(jīng)常會需要進行數(shù)據(jù)庫操作,如執(zhí)行一些 SQL 查詢、或者執(zhí)行一些 SQL 命令等,如果每次執(zhí)行操作都按照 Delphi 數(shù)據(jù)庫操作的步驟一步一步地組織語句去執(zhí)行的話,又顯得比較繁瑣,所以,有必要對數(shù)據(jù)庫的操作進行封裝,以便于在進行數(shù)據(jù)庫操作時,通過簡單地調(diào)用即可實現(xiàn)。

在本節(jié)中,我們通過 Zeos 的數(shù)據(jù)庫組件來實現(xiàn)一個簡單的數(shù)據(jù)庫操作封裝。代碼如下:

unit sqlunit; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, ZConnection, ZDataset, DB, Dialogs; type TSqlStatment = class private sSql: String; public Query: TZQuery; // 構(gòu)造函數(shù) Constructor Create(Conn: TZConnection); procedure SetSQL(sql: String); procedure Execute; procedure Open; // 析構(gòu)函數(shù) Destructor Free; end; implementation Constructor TSqlStatment.Create(Conn: TZConnection); begin Query:=TZQuery.Create(nil); Query.Connection:=Conn; end; procedure TSqlStatment.SetSQL(sql: String); begin // 設置 SQL 語句,可以包含參數(shù) sSql:=sql; try Query.Close; Query.SQL.Clear; Query.SQL.Text := sSql; Query.Prepare; except on E: EDatabaseError do MessageDlg('提示', 'DB ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); on E: Exception do MessageDlg('提示', 'ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); end; end; procedure TSqlStatment.Execute; begin // 執(zhí)行 SQL 語句,適合除 SELECT 語句之外的所有語句 try Query.ExecSQL; except on E: EDatabaseError do MessageDlg('提示', 'DB ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); on E: Exception do MessageDlg('提示', 'ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); end; end; procedure TSqlStatment.Open; begin // 執(zhí)行 SQL 查詢,即 Select 語句 try Query.Open; except on E: EDatabaseError do MessageDlg('提示', 'DB ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); on E: Exception do MessageDlg('提示', 'ERROR: '+sSql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message, mtInformation, [mbOk], ''); end; end; Destructor TSqlStatment.Free; begin Query.Destroy; end; end.

通過一段更改用戶密碼的操作,來看一下通過 TSqlStatment 實例執(zhí)行 SQL 語句的調(diào)用,代碼如下:

procedure TPasswordForm.OkButtonClick(Sender: TObject); var SqlStatment: TSqlStatment; Salt, SavedPassword, HashPassword: String; begin // 檢查密碼的輸入情況 if Length(OldEdit.Text) <= 0 then begin MessageDlg('提示', '請輸入舊密碼!', mtInformation, [mbOk], ''); Exit; end; if Length(NewEdit.Text) <= 0 then begin MessageDlg('提示', '請輸入新密碼!', mtInformation, [mbOk], ''); Exit; end; if Length(OkEdit.Text) <= 0 then begin MessageDlg('提示', '請輸入確認密碼!', mtInformation, [mbOk], ''); Exit; end; // 檢查舊密碼是否正確 SqlStatment:=TSqlStatment.Create(DBDataModule.DBConnection); SqlStatment.SetSQL('select pwd, salt from c_usrs where usr_id = :USR_ID'); SqlStatment.Query.Params.ParamByName('USR_ID').AsString:=CurrentUser.usr_id; SqlStatment.Open; if SqlStatment.Query.RecordCount <= 0 then begin MessageDlg('提示', '找不到用戶,無法修改密碼!', mtInformation, [mbOk], ''); SqlStatment.Free; Exit; end; SqlStatment.Query.First; Salt:=SqlStatment.Query.FieldByName('salt').AsString; SavedPassword:=SqlStatment.Query.FieldByName('pwd').AsString; HashPassword := MD5Print(MD5String(Salt+OldEdit.Text)); if HashPassword <> SavedPassword then begin MessageDlg('提示', '舊密碼不正確, 請重新設置!', mtInformation, [mbOk], ''); SqlStatment.Free; Exit; end; // 檢查新密碼與確認密碼是否相同,如不相同則提示 if NewEdit.Text <> OkEdit.Text then begin MessageDlg('提示', '新密碼與確認密碼不符, 請重新設置!', mtInformation, [mbOk], ''); Exit; end; // 檢查新密碼與舊密碼是否相同,如相同則沒有必要去修改 if OldEdit.Text = NewEdit.Text then begin MessageDlg('提示', '新密碼與舊密碼相同, 沒有必要修改!', mtInformation, [mbOk], ''); Exit; end; // 產(chǎn)生新的 SALT Salt:=GenGUID; // 計算新密碼的 MD5 值 HashPassword := MD5Print(MD5String(Salt+NewEdit.Text)); // 更改密碼 SqlStatment.SetSQL('update c_usrs set pwd=:PWD, salt=:SALT where usr_id = :USR_ID'); SqlStatment.Query.Params.ParamByName('PWD').AsString:=HashPassword; SqlStatment.Query.Params.ParamByName('SALT').AsString:=Salt; SqlStatment.Query.Params.ParamByName('USR_ID').AsString:=CurrentUser.usr_id; SqlStatment.Execute; SqlStatment.Free; MessageDlg('提示', '密碼已更新!', mtInformation, [mbOk], ''); ModalResult:=mrOk; end;

分享到:
標簽:Delphi
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定