日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

delphi开发日志——注入“思想”,让程序操纵数据

發(fā)布時(shí)間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delphi开发日志——注入“思想”,让程序操纵数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

程序雖然已經(jīng)具有啟動(dòng)畫面,然后登錄進(jìn)入主窗體,可是沒有任何靈魂,不能與數(shù)據(jù)庫進(jìn)行交互,這次我們來讓程序來操縱數(shù)據(jù)。
接著前面,先創(chuàng)建一個(gè)DataModule1容器,用于存放數(shù)據(jù)組件,并命名為:frmDM,單元名為untDM.pas。
在frmDM窗口放入數(shù)據(jù)庫連接組件,用于連接數(shù)據(jù)庫,ADOConnection1,并命名為:conDB,然后設(shè)置它的屬性:ConnectionString為Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xfsoft;Data Source=.;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SYZ;Use Encryption for Data=False;Tag with column collation when possible=False,可以通過窗口一步一步來設(shè)置,這連接數(shù)據(jù)庫的字符串,再設(shè)置LoginPrompt=False,登錄時(shí)不彈出登錄窗口。
我們需要程序可以在運(yùn)行時(shí)設(shè)計(jì)連接數(shù)據(jù)庫的一些信息,使用INI文件的形式來現(xiàn)實(shí)讀寫程序在運(yùn)行時(shí)需要連接數(shù)據(jù)庫的配置文件,在程序目錄下創(chuàng)建一個(gè)dbConfig.ini,文件內(nèi)容為:[DataBase]
DBconstr=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xfsoft;Data Source=.;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SYZ;Use Encryption for Data=False;Tag with column collation when possible=False

在程序加入INI讀寫單元文件:untIniFile.pas 功能是讀寫剛才建立的INI文件。代碼可以參考源碼。
下面開始設(shè)置登錄窗體與數(shù)據(jù)的綁定,首先要用戶可以出現(xiàn)在下拉列表框中,這樣不需要客戶輸入,那么需要在登錄窗體創(chuàng)建后就可以選擇下拉列表框中的用戶,因此在窗體創(chuàng)建事件中初始列表框中的數(shù)據(jù),代碼如下:
procedure TfrmLogin.FormCreate(Sender: TObject);
var
? i:integer;
? testStr:string;
begin
? LoginCount:=1;
? with qryLogin do
? begin
??? Connection:=frmDM.conDB;
??? Close;
??? SQL.Clear;
??? SQL.Add('select * from [User]');
??? testStr:=SQL.Text;
??? Open;
??? for i:=1 to RecordCount do
??? begin
????? cbbUserName.Items.Add(FieldbyName('username').AsString);
????? next;
??? end;
? end;
end;

此時(shí)調(diào)試程序?qū)?huì)出錯(cuò),問題是我們沒有連接到數(shù)據(jù),因?yàn)槭浅绦蜻\(yùn)行時(shí)讀取INI文件中的連接字符串的,所以,要在數(shù)據(jù)窗體創(chuàng)建時(shí)連接數(shù)據(jù)庫,我們?cè)?font face="Courier New">untGlobal中創(chuàng)建一個(gè)ConnectDB過程,并在數(shù)據(jù)窗體的DataModuleCreate事件中調(diào)用。ConnectDB過程代碼如下:
Procedure ConnectDB;
begin
? if FileExists(ExtractFilePath(paramStr(0))+'dbConfig.ini') then
? begin
??? IniOptions.LoadFromFile(ExtractFilePath(paramStr(0))+'dbConfig.ini');? //ExtractFilePath函數(shù)引用SysUtils單元文件
??? frmDM.conDB.Connected:=False;
??? frmDM.conDB.ConnectionString:=IniOptions.DataBaseDBconstr;;
??? try
?????? frmDM.conDB.Connected:=True;
??? except
?????? MsgBox('無法連接到數(shù)據(jù)庫,請(qǐng)?jiān)O(shè)置數(shù)據(jù)庫!', MB_ICONINFORMATION);? //MB_ICONINFORMATION常量引用Windows 單元文件
?????? Application.Terminate;
??? end;
? end else begin
???? MsgBox('數(shù)據(jù)庫配置dbConfig.ini不存在,程序終止!', MB_ICONINFORMATION);? //MB_ICONINFORMATION常量引用Windows 單元文件
???? Application.Terminate;
? end;
end;

函數(shù)中用到untIniFile來讀取連接字符串,MsgBox函數(shù)是在untGlobal中自定義的一個(gè)信息提示框函數(shù)。
此時(shí)再運(yùn)行程序,可以在登錄窗體的用戶下拉框中選擇用戶名了。但是如何在單擊確定后可以和密碼匹配?如何設(shè)置
三次登錄限制?如何使用回車鍵跳到下個(gè)焦點(diǎn)?我們一個(gè)個(gè)來實(shí)現(xiàn)這些功能,先來實(shí)現(xiàn)回車的功能,只用在窗體中的FormKeyPress事件中加入如下代碼即可:
? if key=#13 then{ 判斷是按執(zhí)行鍵}
? Begin
??? key:=#0;
??? perform(WM_NEXTDLGCTL,0,0);{移動(dòng)到下一個(gè)控件}
? end
但是一定要將登錄按鈕的Default的屬性設(shè)置為False。
便當(dāng)按鈕事件的代碼如下:
? gOKPress:=True;
? qryLogin.Close;
? qryLogin.SQL.Clear;
? qryLogin.SQL.Add(format('select * from [User] where UserName=''%s'' and Password=''%s''',[cbbUserName.Text,edtPassword.Text]));
? qryLogin.Open;
? if not qryLogin.IsEmpty then
? begin
??? gCanLogin:=True;
??? {SysInfo.UserName :=ADOQuery1.FieldByName('username').AsString;
??? SysInfo.UserID :=ADOQuery1.FieldByName('userID').AsString;
??? sysInfo.NO:=UserEdit.Text ; }
? end;
? close;
? exit;

注釋掉的以后說明。
gOKPress用于取消登錄時(shí)的判斷。
FormCloseQuery中加入下面的代碼即可實(shí)現(xiàn)三次登錄的判斷:
? if gOKPress and Not gCanLogin then
? begin
???? gLoginCount:=gLoginCount+1;
???? gOKPress:=False;
?????? if (gLoginCount<4) and (gLoginCount>0) then
?????? begin
?????? ?Application.MessageBox ('用戶編號(hào)或密碼不正確,請(qǐng)重新輸入。','提示信息',MB_ICONINFORMATION);
??????? cbbUserName.SetFocus ;
??????? cbbUserName.SelectAll;
??????? CanClose:=False;
?????? end
?????? else
?????? if gLoginCount>=4 then
??? Application.MessageBox ('三次輸入不正確,登錄失敗。','提示信息',MB_ICONINFORMATION)
? end

至此,和數(shù)據(jù)庫交互的登錄窗體全部完成。
新的源碼下載:
[url]http://files.cnblogs.com/edrp/Demo.rar[/url]

總結(jié)

以上是生活随笔為你收集整理的delphi开发日志——注入“思想”,让程序操纵数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。