单机版改为C/S模式该怎么办?

xiaoxiao0939 2003-05-24 06:41:38
我的毕业设计用的是的delphi和sqlserver,是单机版,我想把他改为C/S模式,在网上发布,该如何解决?烦请高手指教!
...全文
31 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
HanJingJingHan 2003-05-27
  • 打赏
  • 举报
回复
老大:“真不好意思,这程序我看不懂。因为我对封装、继承什么的一点都不懂,有没有比较好懂又简单的方法可以解决这个问题?还有,......”

我问:你是干什么地?
luo521 2003-05-27
  • 打赏
  • 举报
回复
你编的程序就是客户端,数据库服务器才是服务端!其实你不需要太多改程序,只需要解决并发数据的问题。程序看不懂就算了!
xiaoxiao0939 2003-05-26
  • 打赏
  • 举报
回复
真不好意思,这程序我看不懂。因为我对封装、继承什么的一点都不懂,有没有比较好懂又简单的方法可以解决这个问题?还有,除了用DATABASE控件外,还用不用别的控件?用DATABASE能实现一个服务器对应多个客户端吗?
luo521 2003-05-25
  • 打赏
  • 举报
回复
我建议你不要用ADO因为我觉得ADO太浪费系统资源,我建议你用BDE。你有多个数据库,就多用几个DATABASE控件!
客户端的并发处理我给你个例子,比如在一进销存系统中添加销售单,两个客户端添加销售单都就会引发错误,因为销售单的编号是唯一的,所以就要在产生销售单编号的程序上修改一呀,比如在销售单编号添加一个数字表示是那个客户端添加的!这样就可以避免了!
你再看看这篇文章http://www.csdn.net/Develop/Read_Article.asp?Id=14166
我建议你把对数据库的操作封装成类!我给你一个我写的程序,希望对你用有帮助
unit EASYTABLE;

interface

uses
SysUtils, Classes, DB, DBTables,Dialogs;

type
TEASYTABLE = class
Protected
EasyQuery:TQuery;
Public
Constructor Create();
Destructor Destroy();override;
Procedure setData(DatabaseName:string;DataSource:TDataSource);
Procedure UpdateTable(sql:string);
function Seach(select, selectinto, from,where,whereDesign,GroupBy,
Having,Orderby: string;whereDesignEnabled:Boolean ): string;
function inster(into,Fields,values:string):string;
function update(update,Fields,values,where:string):string;
function delete(from,where:string):string;
end;



implementation

{ TEASYTABLE }

constructor TEASYTABLE.Create();
begin
EasyQuery:=TQuery.Create(EasyQuery);

end;

destructor TEASYTABLE.Destroy;
begin
EasyQuery.Close;
EasyQuery.Free;
inherited;
end;

function TEASYTABLE.inster(into, Fields, values: string): string;
var
s:string;
begin
if (into <>'')then
s:='INSERT INTO '+into
else begin
s:='Into must have a value!';
Result:=s;
exit;
end;
if (Fields <>'')then
s:=s+' ('+Fields+') '
else begin
s:='Fields must have a value!';
Result:=s;
exit;
end;
if (values <>'')then
s:=s+'Values ('+values+') '
else begin
s:='values must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;

procedure TEASYTABLE.UpdateTable(sql: string);
begin
EasyQuery.Close;
EasyQuery.SQL.Clear;
EasyQuery.SQL.Add(sql);
EasyQuery.Open;
end;




procedure TEASYTABLE.setData(DatabaseName: string;
DataSource: TDataSource);
begin
EasyQuery.DatabaseName:=DatabaseName;
DataSource.DataSet:=EasyQuery;
end;

function TEASYTABLE.Seach(select, selectinto, from, where, whereDesign,
GroupBy, Having, Orderby: string; whereDesignEnabled: Boolean): string;
var
s:string;
sWhere:string;
begin
s:='select '+select;
if (selectinto <>'')then begin
s:=s+' into '+ selectinto;
end;
s:=s+' from '+from;
swhere:=where;
if (whereDesign<>'') and whereDesignEnabled then
if swhere=''then
swhere:=whereDesign
else
swhere:=swhere+' and ('+whereDesign+')';
if swhere<>''then
s:=s+' where '+swhere;
if GroupBy<>''then
s:=s+' Group By '+GroupBy;
if Having<>''then
s:=s+' having '+ Having;
if Orderby<>''then
s:=s+' order by '+Orderby;
result:=s;
end;

function TEASYTABLE.delete(from, where: string): string;
var
s:string;
begin
if (from <>'')then
s:='DELETE FROM '+from
else begin
s:='FROM must have a value!';
Result:=s;
exit;
end;
if (where <>'')then
s:=s+' WHERE '+where
else begin
s:='Where must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;

function TEASYTABLE.update(update, Fields, values, where: string): string;
var
s:string;
begin
if (update <>'')then
s:='UPDATE '+update+' SET '
else begin
s:='UPDATE must have a value!';
Result:=s;
exit;
end;
if (Fields <>'')and(values <>'')then
begin
while(pos(',',Fields)<>0)and (pos(',',values)<>0) do
begin
s:=s+copy(Fields,1,pos(',',Fields)-1)+'='
+copy(values,1,pos(',',values)-1)+',';
Fields:=copy(Fields,pos(',',Fields)+1,length(Fields));
values:=copy(values,pos(',',values)+1,length(values));
showmessage(Fields+' '+values);
end;
s:=s+Fields+'='+values;

end
else begin
s:='Fields and values must have a value!';
Result:=s;
exit;
end;
if (where <>'')then
s:=s+' where '+where
else begin
s:='where must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;
end.
xiaoxiao0939 2003-05-25
  • 打赏
  • 举报
回复
谢谢大家帮忙!!!等我去试试,看行不行,如果行,就剩下发布问题了,发布我去图书馆查了不少资料,可是都没有找到怎么样发布,哎,真让我烦心,还请大家帮忙!!!
xiaoxiao0939 2003-05-25
  • 打赏
  • 举报
回复
waldm01我用的是DATABASE控件不行吗?还有我一共有好几个库,那怎么办,是不是每个库都要放3个TADOQuery,TADOCconnection,和DATASOURCE呢?那起不是很麻烦?
xiaoxiao0939 2003-05-25
  • 打赏
  • 举报
回复
luo521谢谢你,可是最主要的是要怎样避免这个问题呢?还请多多指教!!!
qwertyasd 2003-05-25
  • 打赏
  • 举报
回复
sql server 用ado呀!
luo521 2003-05-24
  • 打赏
  • 举报
回复
把数据库装在一个服务器上,客户端直接调用远程数据库,还要注意客户端的并发处理,比如两个客户端同时向远程数据库的同一个表添加记录,如果这个表的有一个字段是不允许重复的,而客户端提交数据中的这个字段,是一样的,那么其中一个客户端就会产生错误,添加数据不成功!就要避免这样的错误!
walkm01 2003-05-24
  • 打赏
  • 举报
回复
用以下控件:TADOQuery,TADOConnection,和DateSource就行了。
在TADOConnection的“服务器”中填写本机的计算机名就是单机版,填写服务器名就是C/S
firetoucher 2003-05-24
  • 打赏
  • 举报
回复
sql太好转了,直接用一个服务器做数据库服务器,
改改用户的权限管理/并发操作就行了啊

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧