delphi 下的BS程序设计二.docx

上传人:b****7 文档编号:10892871 上传时间:2023-02-23 格式:DOCX 页数:40 大小:197.36KB
下载 相关 举报
delphi 下的BS程序设计二.docx_第1页
第1页 / 共40页
delphi 下的BS程序设计二.docx_第2页
第2页 / 共40页
delphi 下的BS程序设计二.docx_第3页
第3页 / 共40页
delphi 下的BS程序设计二.docx_第4页
第4页 / 共40页
delphi 下的BS程序设计二.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

delphi 下的BS程序设计二.docx

《delphi 下的BS程序设计二.docx》由会员分享,可在线阅读,更多相关《delphi 下的BS程序设计二.docx(40页珍藏版)》请在冰豆网上搜索。

delphi 下的BS程序设计二.docx

delphi下的BS程序设计二

delphi2005下的B/S程序设计

(宋雨炫2004-12)

 

更新说明:

修改了上一篇的一些错误,增加了一些新内容。

有朋友来信询问了一些问题,在这里写了一个小结。

白天要工作,半夜写的,内容不多,请谅解。

等完成d8程序转到2005后,就将2005的完整程序发上来(以下内容已经过2005测试)。

刚刚拿到2005没有几天,还没有完全了解到它的新特性以及新功能,d8的很多方法在2005下也可以使用,不过也有一些函数的用法发生了变化。

才开始学习B/S编程,算是个新手,用d8也做了些东西,这篇文档是在把以前d8做的东西改到2005下过程中的一些学习心得,供大家参考。

写得比较粗糙,也比较乱,很多东西都没来得及检查,所以里面可能会有一些方法错误,望大家谅解。

本文以制作一个《论坛》为例,简单地介绍了delphi2005的B/S程序设计方法。

数据库:

SQL2000,编程:

delphi2005ARCHITECT。

一、调试准备及数据库设计

1、简单配置IIS

点击“开始”-〉“程序”-〉“管理工具”-〉“Internet信息服务(IIS)管理器”点击“网站”按鼠标右键-〉“新建”-〉“网站”

在出现的对话框中“描述”中起名,随便起,例如“1”,点击下一步:

“网站IP地址”:

随便输入例如127.0.0.1,“网站TCP端口”:

一般为80,也可输入81等,如不为80,在访问网站时则需输入http:

//127.0.0.1:

81。

点击下一步,“输入主目录路径”:

如D:

\IIS

点击下一步,然后“完成”。

这时,就能在“网站”中看到新建的网站“1”了,在“1”处点击鼠标右键选择“属性”,在对话框中其他东西不需修改,只需将“文档”中点击“添加”将以上目录中WebForm1.aspx(也就是首页,如Index.aspx等等)文件添加到其中即可点击确定即完成一个简单网站的配置。

2、数据库设计(部分)

一个论坛的数据库设计其实很繁琐,在这里用几个最常用的说明一下问题:

数据库名:

NetManager。

(1)表名:

Access_Data(记录登录用户的各类信息)

字段名类型长度说明

---------------------------------------------------------------

IDbigint8序号

IP_Addrvarchar80用户登录IP地址

Land_Datevarchar80用户登录时间-日期

Land_Timevarchar80用户登录时间-时间

Option_sysvarchar100用户的操作系统

Brow_sysvarchar100用户的浏览器类型

Current_Itemvarchar800用户当前使用的页面

Settle_Datevarchar80用户停留的-日期

Settle_Timevarchar80用户停留的-时间

UserLogvarchar80登录的用户名

UserPaswordvarchar50登录的密码

(2)表名:

Forum_Data(发布帖子的纪录)

字段名类型长度说明

-----------------------------------------------------------------

IDbigint8序号

IP_Addrvarchar80用户IP地址

Speak_Datevarchar80发言-日期

Speak_Timevarchar80发言-时间

Motifvarchar800发言论坛板块的名称

Gradevarchar50发言的类型(0:

标题,1:

回帖,..等)

Placevarchar50帖子位置(0:

置顶...等)

StateIcovarchar250帖子状态的图标(如:

多于多少回复、点击...等状态的图标)

CaptionIcovarchar250标题图标(发布帖子时选择的图标)

CaptionNamevarchar800帖子的名称

Contentvarchar8000帖子内容

UserNamevarchar50发布用户名

Paswordvarchar50密码

Portraitvarchar80用户头像

Adagevarchar8000格言(注册用户时选择输入,通常附在发言的后面)

AdagePicvarchar250格言图片(注册用户时选择输入,通常附在发言的后面)

AttackNumvarchar50点击数

Pinkvarchar50精华帖(由斑竹来确定)

Writebackvarchar50回帖数

......等等(根据需要自行设计)。

(3)表名:

Register_Data(注册用户信息)

字段名类型长度说明

-----------------------------------------------------------------

IDbigint8序号

IP_Addrvarchar80IP地址

Usernamevarchar80用户名

Paswordvarchar80密码

Safe_quvarchar80安全问题(登录时可以选择输入)

Safe_answvarchar80安全问题回答

Emailvarchar80邮件地址

...以下选填内容...

Sexvarchar80性别

Fete_Yvarchar80出生年

Fete_Mvarchar80出生月

Fete_Dvarchar80出生日

Fromavarchar250来自哪里

QQ_codevarchar80qq号码

Msn_codevarchar80msn号码

Atman_infovarchar800自我介绍

Atman_icovarchar80头像

Atman_penvarchar80个人签名

Regist_Datevarchar80注册-日期

Regist_timevarchar80注册-时间

......等等(根据需要自行设计)。

先简单写这几个基本表,在后面主要以这几个表进行程序设计。

二、程序设计

在delphi2005下建立一个新的应用:

下一步在“Name”中输入WebApp(当然可以随便起名字了),“Location”输入D:

\IIS(在硬盘上随便建一个文件夹也可以,在配置网站时目录指向它就可以了),点击“OK”。

在右侧ProjectManager中将其名称改为Index.aspx。

下面就可以进行程序的设计。

(1)首页面设计

注意:

在每个pas文件的uses里面都要加上Borland.Vcl.SysUtils。

双击ProjectManager中的Global.asax,在ToolPalette中的DataComponents中点击SqlConnection和SqlCommand,将其放置在页面上,在SqlConnection控件的ConnectionString中写下面语句:

datasource=(local);initialcatalog=NetManager;persistsecurityinfo=False;userid=sa;password=;

再将SqlCommand的Connection指向SqlConnection。

然后在页面中切换到Global.pas文件写如下代码:

procedureTGlobal.Session_Start(sender:

System.Object;e:

EventArgs);

var

DateTime:

TDateTime;

SQLCom,Str_IpAddr,Str_Brow,Str_Option:

String;

begin

Str_IpAddr:

=Request.UserHostAddress;//取得IP地址

ifRequest.UserAgent.IndexOf('MSIE')>-1thenbegin//取得浏览器

Str_Brow:

='MicrosoftInternetExplorer'+Request.Browser.Version;

endelseStr_Option:

=Request.Browser.Browser+''+Request.Browser.Version;

ifRequest.UserAgent.IndexOf('WindowsNT5.2')>-1thenbegin//取得操作系统

Str_Option:

='Windows2003';

endelseifRequest.UserAgent.IndexOf('WindowsNT5.1')>-1thenbegin

Str_Option:

='WindowsXP';

endelseifRequest.UserAgent.IndexOf('WindowsNT5.0')>-1thenbegin

Str_Option:

='Windows2000';

endelseStr_Option:

=Request.Browser.Platform;

ShortDateFormat:

='yyyy年m月d日';//取得现在时间

DateTime:

=Time;

SqlConnection1.Open;//打开数据库

SQLCom:

='INSERTINTOAccess_Data(IP_Addr,Land_Date,Land_Time,Option_sys,Brow_sys,Current_Item,Settle_Date,Settle_Time,UserLog)VALUES('+

char(39)+Str_IpAddr+char(39)+char(44)+char(39)+DateToStr(Date)+char(39)+char(44)+

char(39)+TimeToStr(DateTime)+char(39)+char(44)+char(39)+Str_Option+char(39)+char(44)+

char(39)+Str_Brow+char(39)+char(44)+char(39)+'首页'+char(39)+char(44)+

char(39)+DateToStr(Date)+char(39)+char(44)+char(39)+TimeToStr(DateTime)+char(39)+char(44)+

char(39)+'游客'+char(39)+')';

SqlCommand1.CommandText:

=SQLCom;

SqlCommand1.ExecuteNonQuery;

SqlConnection1.Close;

end;

这段代码是用户登录时记录用户的各种信息,并将其写入数据库。

将登录信息在这里,可以防止用户刷新浏览器而造成的重复记录,同时也可以更方便的统计当前在线用户数量。

在这段代码里面没有记录在线用户数量,可根据需要设定一个参数往数据库里面写,大概方法就是:

procedureTGlobal.Session_Start(sender:

System.Object;e:

EventArgs);会话开始时取得在线记录+1,

procedureTGlobal.Session_End(sender:

System.Object;e:

EventArgs);会话结束时取得在线记录-1,

用户每次登录将在线用户显示在页面上。

这类方法很多,你可以在网上搜索一下C#或其他asp的例子文章,然后参照上面的写法直接套用到delphi上面。

再打开Index.aspx文件,在ToolPalette中的DataComponents中点击SqlConnection(方法与上面相同)将其放置在页面上,再点击SqlDataAdapter,放置到页面,在其“填充”里面的SelectCommand的CommandText写下面的语句:

SELECT*FROMAccess_Data,Connection指向SqlConnection。

在SqlDataAdapter点击鼠标右键,选择GenerateDataSet,

选择New,点击“OK”,就生成了一个DataSet,

切换到index.pas,写如下代码:

procedureTWebForm1.Page_Load(sender:

System.Object;e:

System.EventArgs);

var

i,RecoNumber:

integer;

begin

SqlConnection1.Open;//打开数据库

SqlDataAdapter1.Fill(DataSet5);

RecoNumber:

=DataSet5._Table.Rows.Count-1;//取得记录数

Str_OldLandTime.Visible:

=False;

Str_OldLandTime.Text:

='您是首次访问';

i:

=0;

Str_IpAddr.Text:

=Request.UserHostAddress;

whileRecoNumber>-1dobegin

ifi<>0thenbegin

ifDataSet5._Table.Rows[RecoNumber].Item[1].ToString=Str_IpAddr.Textthenbegin

Str_OldLandTime.Text:

=DataSet5._Table.Rows[RecoNumber].Item[2].ToString+

''+DataSet5._Table.Rows[RecoNumber].Item[3].ToString;

break;

end;

end;

ifDataSet5._Table.Rows[RecoNumber].Item[1].ToString=Str_IpAddr.Textthenbegin

ifi=0thenbegin

Str_Option.Text:

=DataSet5._Table.Rows[RecoNumber].Item[4].ToString;

Str_Brow.Text:

=DataSet5._Table.Rows[RecoNumber].Item[5].ToString;

Str_LandTime.Text:

=DataSet5._Table.Rows[RecoNumber].Item[2].ToString+

''+DataSet5._Table.Rows[RecoNumber].Item[3].ToString;

Str_UserName.Text:

=DataSet5._Table.Rows[RecoNumber].Item[9].ToString;

end;

i:

=i+1;

end;

RecoNumber:

=RecoNumber-1;

end;

Str_OldLandTime.Visible:

=True;

ifStr_UserName.Text<>('游客')thenbegin

Str_Log.Visible:

=False;Str_Regist.Visible:

=False;

Str_1.Visible:

=False;Str_2.Visible:

=False;

endelsebegin

Str_Log.Visible:

=True;Str_Regist.Visible:

=True;

Str_1.Visible:

=True;Str_2.Visible:

=True;

end;

SqlConnection1.Close;

end;

这段代码是将用户的登陆信息显示在页面上,用户首次登陆的名称都是“游客”在执行完登录过程后,才以注册名显示在页面上,同时显示上一次登录的时间。

如果是“游客”页面将显示“注册”、“登陆”等文字选项,如果是注册用户已登陆则不显示。

在这里直接判断是否注册用户登录可以防止猜测页面操作,例如有的用户可以直接在地址栏输入http:

//127.0.0.1/forum_page.aspx?

fpage=1&tid=1等等内容,从而跳过登陆过程,同时用户登录后,不管在地址栏直接输入那个板块的地址,都将是注册用户的登陆。

......等等,还有不少内容,主要的就介绍这么多吧。

(2)发布帖子页面设计

放置数据连接的方法与上面相同,在这里就不说了。

procedureTWebForm2.Page_Load(sender:

System.Object;e:

System.EventArgs);

var

tRow:

TableRow;

tCell:

TableCell;

ViewPage,lop,t,RecoNumber,RecoNumber_sub,i,pagn,num,Total:

integer;

ThYpImg,ThYpCaption,pg:

HyperLink;

tpg,sname,sitem,s:

string;

begin

SqlConnection1.Open;

SqlDataAdapter1.Fill(DataSet11);

RecoNumber:

=DataSet11._Table.Rows.Count-1;//取得记录数

whileRecoNumber>-1dobegin

ifDataSet11._Table.Rows[RecoNumber].Item[1].ToString=Request.UserHostAddressthenbegin

Str_UserName.Text:

=DataSet11._Table.Rows[RecoNumber].Item[9].ToString;

break;

end;

RecoNumber:

=RecoNumber-1;

end;

SqlConnection1.Close;

ifStr_UserName.Text<>('游客')thenbegin

Str_Log.Visible:

=False;Str_Regist.Visible:

=False;

Str_1.Visible:

=False;Str_2.Visible:

=False;

endelsebegin

Str_Log.Visible:

=True;Str_Regist.Visible:

=True;

Str_1.Visible:

=True;Str_2.Visible:

=True;

end;

////////////////////

tpg:

=Request.Item['fpage'].ToString;

Total:

=StrToInt(Request.Item['tid'].ToString);

iftpg='1'thensitem:

='公告栏';

iftpg='2'thensitem:

='站务处理';

iftpg='3'thensitem:

='留言板';

Label1.Text:

=sitem;

/////////////////////

SqlDataAdapter2.SelectCommand.CommandText:

='SELECT*FROMForum_DataWHERE(Motif='+char(39)+sitem+char(39)+')AND(Grade=''0'')'+

'ORDERBYIDDESC';

SqlConnection1.Open;

DataSet12.Clear;

SqlDataAdapter2.Fill(DataSet12);

DataSet12.AcceptChanges;

fort:

=0to4dobegin

ift>(DataSet12._Table.Rows.Count-1)thenbreak;

ift=0thenbegin

Topnew1.Text:

=DataSet12._Table.Rows[t].Item[9].ToString;

Topnew1.NavigateUrl:

='placard_page.aspx?

page='+DataSet12._Table.Rows[t].Item[0].ToString;

end;

ift=1thenbegin

Topnew2.Text:

=DataSet12._Table.Rows[t].Item[9].ToString;

Topnew2.NavigateUrl:

='placard_page.aspx?

page='+DataSet12._Table.Rows[t].Item[0].ToString;

end;

ift=2thenbegin

Topnew3.Text:

=DataSet12._Table.Rows[t].Item[9].ToString;

Topnew3.NavigateUrl:

='placard_page.aspx?

page='+DataSet12._Table.Rows[t].Item[0].ToString;

end;

ift=3thenbegin

Topnew4.Text:

=DataSet12._Table.Rows[t].Item[9].ToString;

Topnew4.NavigateUrl:

='placard_page.aspx?

page='+DataSet12._Table.Rows[t].Item[0].ToString;

end;

ift=4thenbegin

Topnew5.Text:

=DataSet12._Table.Rows[t].Item[9].ToString;

Topnew5.NavigateUrl:

='placard_page.aspx?

page='+DataSet12._Table.Rows[t].Item[0].ToString;

end;

end;

SqlConnection1.Close;

/////////////////////

SqlConnection1.Open;

SqlDataAdapter2.SelectCommand.CommandText:

='SELECT*FROMForum_Dat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1