怎么让多个人同时 *** 作一个数据库

怎么让多个人同时 *** 作一个数据库,第1张

2共享数据 (MDB) 注释 本主题中的信息仅适用于 Microsoft Access 数据库 (mdb)。
3若要从另一台计算机上访问共享的 Microsoft Access 数据库, 另一台计算机上必 须具备下列条件之一:Access 的本地安装、Access 的网络安装(逐个用户地授 权)或运行时应用程序。
4设置共享文件夹。
5有关共享文件夹的详细信息,请使用 Microsoft Windows 的“帮助索引”。
6如果 共享文件夹位于网络服务器上,则可能需要网络管理员的协助。
7将 Microsoft Access 数据库复制到一个共享文件夹。 确保 Access 数据库设为在共享方式下打开,这是默认设置。 *** 作方法: 在“工具”菜单上,单击“选项” 。
8在“高级”选项卡上“默认打开模式”下,单击“共享” 。
9注释:共享数据库之前,应该删除文件中可能存储的任何个人信息。
注释 :本主题中的信息仅适用于 Microsoft Access 数据库 (mdb)。
10用于共享数据的方法 在多用户环境下共享数据的方法有多种。
11共享整个 Access 数据库 可以将整个 Access 数据库放在网络服务器或共享文 件夹中。
这是实现整个 Access 数据库共享的最简单的方法。
12每个用户都能共享 数据,并能使用相同的窗体、报表、查询、宏和模块。
13如果要让每个用户都以相 同的方式使用 Access 数据库,或者不能支持其他用户创建其自己的对象,则 可以采取这种策略。
14仅共享 Access 数据库中的表 可以只将表放在网络服务器上,而将其他数据库 对象都留在用户的计算机上。这种情况下,Access 数据库的性能会有所提高, 因为只有数据是通过网络发送的。当将一个数据库拆分为后端(表)和前端时, 用户可以在不影响别人的情况下,对其自己的前端数据库中的窗体、报表和其他 对象进行自定义。 在 Internet 上共享 Access 数据库对象或数据访问页 可以将一个或多个数据库 或者创建数据访问页, 对象输出为静态的 HTML 或服务器生成的 HTML 格式

P4级以上电脑一台做服务器,(内存1G以上,双硬盘可以考虑)有条件可以弄台机架式服务器,安装WINDOWS2003做为平台,24口交换机一台,弄个小机柜,把服务器和交换机装进去
购买ERP软件一套,例如用友,金蝶一类的,数据库由它来决定
服务器安装路由服务,DHCP,DNS,ERP软件,用网线连接电脑和交换机,一个简单的局域网组建完成
可以在内网共享数据,访问ERP服务器,还可以通过服务器的路由功能上外网

一、找一张SQL server服务器版光盘,在光盘上找到目录“MSDE”并进入,运行SETUPEXE文件,并按照程序要求进行安装。安装完成重新启动计算机。
二、运行光盘中的,AUTORUNEXE文件,或让光盘自动运行,打开安装界面后,点击“安装SQL server 2000组件(C)”=》“安装数据库服务器(S)”这里程序将提示你“服务器组件在此系统上不受支持,”点“确定”。进入新的安装界面,点击“下一步”,选择默认的“本地计算机”=》“创建新的SQL server”=》“仅客户端工具”,一路点击“下一步”。直至安装结束。重新启动计算机。
三、到“开始”--“程序”-“Microsoft SQL Server”中打开“企业管理器”到“SQL Server 组”下,将“[lcoal] (Windows NT)”改成自己的的机器名,机器名在系统属性的“计算机名”里可以找到,假设我们的机器里的完整计算机名称为:SERVER,改名后,我们就会得到如图所示的样子了。关闭“企业管理器”
四、到“开始”--“程序”-“Microsoft SQL Server”中打开“客户端网络实用工具”,点“别名”如果“服务器别名配置”里没有数据,我们需要手工添加,点“添加”按钮。在“添加网络库配置”的 “网络库”选项中,我们选择默认的“Named Pipes(P)”项,并为服务器取个别名“SERVER”,这时管道名称会自动添加“\\SERVER\pipe\sql\query”我们就不要管它了。点“确定”退出。
五、这一步我们要进入注册进行一下修改了,打开注册表编辑器,找到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
MSSQLServer\MSSQLServer],这一项,里面有一个键值LoginMode默认值是“1”,现在将该值改为“2”(安装MSDE时,默认的SQL Server身份验证方式为“仅Windows"的身份验证方式,即sa用户无法验证,通过修改以上的注册表键值来将身份验证方式改为SQL Server和Windows混合验证以后,就可以用sa用户登录了)。修改完毕,重启电脑。
成功了
方法2
打开注册表(regedit),找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ ,修改那个"ab(默认)"的值为2```重启然后就可以安装Microsoft SQL Server了
不错吧
ab"是图标,只有一个选项
安装SQL Server 遇到错误提示:
以前的某个程序安装已在安装计算机上创建挂起的文件 *** 作。运行安装程序之前必须重新启动计算机!。
找了半天,没发现什么一场程序,该机器上以前没安装过SQL Server。看看系统安装了什么软件 3721 上网助手什么的赫然在目!删掉!
还是不行,搜索了一下,发现这篇Blog最有价值:
3)打开注册表编辑器,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。

在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是
30de1e9de3192ba6ce2992d27a1b6a0a,而 B
服务器生成的则是c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION
数据都是分别保存在本服务器的文件系统中。
确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:
一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;
另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。 简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION
数据。
第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各
个服务器所设置的 COOKIE 是不能相互访问的。
四、代码实现
首先创建数据表,MySQL 的 SQL 语句如下:
CREATE TABLE `sess` (
`sesskey` varchar(32) NOT NULL default '',
`expiry` bigint(20) NOT NULL default '0',
`data` longtext NOT NULL,
PRIMARY KEY (`sesskey`), KEY `expiry` (`expiry`)
) TYPE=MyISAM
sesskey 为 SESSION ID,expiry 为 SESSION 过期时间,data 用于保存 SESSION 数据。
默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定义 SESSION 各个 *** 作的处理函数。PHP 提供了 session_set_save_handle()
函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 sessionsave_handler 改成 user,可在 PHP 中进行设置: session_module_name('user');
接下来着重讲一下 session_set_save_handle() 函数,
此函数有六个参数:
session_set_save_handler ( string open, string close, string read,
string write, string destroy, string gc ) 各个参数为各项 *** 作的函数名,这些 *** 作依次是:
打开、关闭、读取、写入、销毁、垃圾回收。PHP 手册中有详细的例子,
在这里我们使用 OO 的方式来实现这些 *** 作,详细代码如下:

define('MY_SESS_TIME',3600); //SESSION 生存时长
//类定义
class My_Sess
{
/
数据库连接对象,设置成了静态变量,因为不设置为静态变量,数据库连接对象在其他方法不能被调用,目前还不清楚什么原因

@var obj
/
static public $db;
/
构造函数

@param obj $dbname 数据库连接对象
/
function __construct($dbname){
self::$db = $dbname;
}
/
初始化session,使用数据库mysql来存储session的值,利用session_set_save_handler方法实现

/
function init()
{
$domain = '';
//不使用 GET/POST 变量方式
ini_set('sessionuse_trans_sid',0);
//设置垃圾回收最大生存时间
ini_set('sessiongc_maxlifetime',MY_SESS_TIME);
//使用 COOKIE 保存 SESSION ID 的方式
ini_set('sessionuse_cookies',1);
ini_set('sessioncookie_path','/');
//多主机共享保存 SESSION ID 的 COOKIE,因为我是本地服务器测试所以设置$domain=''
ini_set('sessioncookie_domain',$domain);
//将 sessionsave_handler 设置为 user,而不是默认的 files
session_module_name('user');
//定义 SESSION 各项 *** 作所对应的方法名
session_set_save_handler(
array('My_Sess','open'),//对应于类My_Sess的open()方法,下同。
array('My_Sess','close'),
array('My_Sess','read'),
array('My_Sess','write'),
array('My_Sess','destroy'),
array('My_Sess','gc')
);
//session_start()必须位于session_set_save_handler方法之后
session_start();
}
function open($save_path, $session_name) {
//print_r($sesskey);
return true;
} //end function
function close(){
if(self::$db){
self::$db->close();
}
return true;
}
function read($sesskey) {
$sql = 'SELECT `data` FROM `sess` WHERE `sesskey`=' (self::$db->qstr($sesskey)) ' AND `expiry`>=' time();
$rs=self::$db->execute($sql);
if($rs){
if($rs->EOF){
return '';
} else {//读取到对应于 SESSION ID 的 SESSION 数据
$v = $rs->fields[0];
$rs->close();
return $v;
}
}
return '';
}
function write($sesskey,$data){
$qkey = $sesskey;
$expiry = time()+MY_SESS_TIME;
$arr = array(
'sesskey' => $qkey,
'expiry' => $expiry,
'data' => $data);
self::$db->replace('sess', $arr, 'sesskey', true);
return true;
}
function destroy($sesskey) {
$sql = 'DELETE FROM `sess` WHERE `sesskey`='self::$db->qstr($sesskey);
$rs =self::$db->execute($sql);
return true;
}
function gc($maxlifetime = null) {
$sql = 'DELETE FROM `sess` WHERE `expiry`<'time();
self::$db->execute($sql);
//由于经常性的对表 sess 做删除 *** 作,容易产生碎片,
//所以在垃圾回收中对该表进行优化 *** 作。
$sql = 'OPTIMIZE TABLE `sess`';
self::$db->Execute($sql);
return true;
}
}
//使用 ADOdb 作为数据库抽象层。
require_once('adodb/adodbincphp');
//数据库配置项,可放入配置文件中(如:configincphp)。
$db_type = 'mysql';
$db_host = '127001';
$db_user = 'root';
$db_pass = '111';
$db_name = 'sess_db';
//创建数据库连接。
$cnn=&ADONewConnection($db_type);
$cnn->Connect($db_host,$db_user,$db_pass, $db_name);
//初始化 SESSION 设置,初始化时已经包含了session_start()!
$sess = new My_Sess($cnn);
$sess->init();
$_SESSION['a']='aaa';
$_SESSION['b']='bbb';
$_SESSION['c']='ccc';
print_r($_SESSION);
>
五、遗留问题 如果网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行 *** 作,这样效率就会明显降低。考虑到 SESSION 数据一般不会很大,可以尝试用
C/Java 写个多线程的程序,用 HASH 表保存 SESSION 数据,并通过 socket 通信进行数据读写,这样 SESSION 就保存在内存中,读写速度应该会快很多。另外还可
以通过负载均衡来分担服务器负载。

只要多台电脑可以互联,局域网或者互联网,就可以通过IP访问数据库,访问的方式两种,一种是在其他电脑上安装SQL
Server客户端(2000版本以后统一成management
studio),通过企业管理器连接;另一种是通过程序远程连接,例如java程序通过jdbc连接数据库


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13199334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-19
下一篇 2023-06-19

发表评论

登录后才能评论

评论列表(0条)

保存