
function tab(sData){
var sY = sDatasubstring(0,4);
var sM = sDatasubstring(4,6);
var sD = sDatasubstring(6);
var newData = new Date(sY,(sM-1),sD,0,0,0);
var oldData = new Date(sY,0,1,0,0,0,0);
var timer = (newDatagetTime() - oldDatagetTime())/(100086400);
alert(timer);
}
tab('20150708');
</script>你的数据库加载的文件不正确方式不正确,如果你的数据库文件是mdf类型的,你就在数据库中右键选择附加数据库,你需要把这个文件放到安装sqlserver的路径C:\Program Files\Microsoft SQL Server\MSSQL10MSSQLSERVER\MSSQL\DATA中,然后再附加就可以了。1 先登陆旧服务器上的LUM,在“清理垃圾”中将mysql和postgres的日志清除干净2 将/home/ftp, /home/mysql_data, /home/pgsql_data, /home/lum_safe_files目录打包,文件名为my_datatargz(如果有多个FTP主目录,需要将所有FTP主目录都打包):cd /home; tar -zcvf my_datatargz ftp mysql_data pgsql_data lum_safe_files3 在新服务器上安装好LuManager,但需要注意的一点就是,新服务器的上数据库版本需要与旧版本的一致,如旧版本的mysql版本为5159,新服务器上的mysql也必须是51,可以是5159,也可以是5161,但不要使用mysql55X4 在新服务器上执行lu-stop,停止lu服务5 将新服务器上的/home/ftp, /home/mysql_data, /home/pgsql_data, /home/lum_safe_files目录重命名mv /home/ftp /home/ftpoldmv /home/mysql_data /home/mysql_dataoldmv /home/pgsql_data /home/pgsql_dataoldmv /home/lum_safe_files /home/lum_safe_filesold6 将旧服务器上的备份文件my_datatargz转移到新服务器上的/home目录下,然后解压tar -zxvf my_datatargz7 在新服务器上执行lu-start,启动lu服务,然后再用旧服务器上的帐号登陆LUM便可
CREATE TABLE EMPLOYEE (EMP_NO EMPNO NOT NULL
FIRST_NAME FIRSTNAME NOT NULL
LAST_NAME LASTNAME NOT NULL
PHONE_EXT VARCHAR( )
HIRE_DATE DATE DEFAULT NOW NOT NULL
DEPT_NO DEPTNO NOT NULL
JOB_CODE JOBCODE NOT NULL
JOB_GRADE JOBGRADE NOT NULL
JOB_COUNTRY COUNTRYNAME NOT NULL
SALARY SALARY NOT NULL
FULL_NAME PUTED BY (last_name || || first_name)
PRIMARY KEY (EMP_NO))
CHECK语句是给数据库字段取值范围加约束条件 PRIMARY_KEY语句是给表建立关键字索引
如法炮制 就可以定义IBLOCAL中的所有表
IBLOCAL中的表包括
EMPLOYEE CUSTOMER DEPARTMENT EMPLOYEE_PROJECT
PROJECT SALES SALARY_HISCORY
各数据库表中的内容如下
表 EmployeeDemoDB中各数据库表的内容
━━━━━━━━━━━━━━━━━━━━━━━━━━━
数据库表名 表中内容
───────────────────────────
EMPLOYEE 雇员信息
CUSTOMER 客户信息
DEPARTMENT 部门信息
EMPLOYEE_PROJECT 雇员负责的工程
PROJECT 工程信息
SALES 销售信息
SALARY_HISTORY 雇员薪水调整的历史信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━
每个数据库表中都定义了关键字段 关于数据库表中的字段名 类型 大小 这里不再赘述
应用程序分析
TDatabase部件的使用
CSDEMO程序中定义了一个数据库模块部件 TDmEmployee 它是继承于TDataModule TDataModule是在Delphi 中才出现的专门放置数据访问部件(如TDatabase TTable和TQuery等)的框架 其它涉及数据库访问的窗体 只要在uses语句中插入数据库模块所在的库单元 该窗体上的数据库部件就可引用相应的数据库访问部件
在TDmEmployee中定义了一个TDatabase类型的部件──EmployeeDatabase EmployeeDatagase的主要属性及属性值如下
表 EmployeeDatabase部件主要属性的取值
━━━━━━━━━━━━━━━━━━━━━━━
属性 属性值
───────────────────────
AliasName IBLOCAL
DatabaseName EmployeeDemoDB
KeepConnection True
LoginPrompt False
TransIsolation tiReadCommitted
Params USERNAME = SYSDBA
PASSWORD = masterkey
Connected True
━━━━━━━━━━━━━━━━━━━━━━━
AliasName属性所指定的IBLOCAL 必须已经在BDE中配置好 DatabaseName属性指定要使用的数据库名 该数据库名是由应用程序自己定义的 因此不反应到BDE中 该属性值被TTable TQuery等DataSet部件引用 并且出现在DataSet部件的DatabaseName 下拉式列表框中 本例中的 EmployeeDemoDB 被EmployeeTable SalesTable等所有DataSet部件引用
Connected为True表明 应用程序与数据库将保持联接
KeepConnection属性为True 表明多次打开和关闭EmployeeDemoDB数据库中的任意表 应用程序将始终与数据库保持联接 这省却了重复注册的开销
LoginPrompt 属性为False 表明应用程序自动处理与数据库的联接注册 因此 Params属性中定义了注册的用户名和口令
USERNAME = SYSDBA
PASSWORD = masterkey
TransIsolation属性为tiReadCommitted表明 如果存在多个同时事务 则某一事务只允许读由其它事务提交了的数据
程序中EmployeeDatabase的应用还与事务控制等有关 下文中会介绍这方面的内容
不同数据库表的切换
在许多数据库应用中都要在不同数据库表之间相互切换 以响应用户输入条件或系统状态的变化 这时 往往需要特别的处理 例如改变光标形状或隐藏数据改变等 尤其是在客户/服务器应用程序中 因为是用SQL语句访问远程数据库 有时还要在服务器端执行计算任务 所以客户端的数据变化会有一定的间隔 因此应该让用户明白发生了什么 下面是CSDEMO在数据库表切换时的处理办法
procedure TFrmViewDemo ShowTable( ATable: string )
begin
Screen Cursor := crHourglass; { 向用户提示当前 *** 作状态 }
VaryingTable DisableControls; { 隐藏数据变化 }
VaryingTable Active := FALSE; { 关闭原来的数据库表 }
VaryingTable TableName := ATable; { 更新数据库表名 }
VaryingTable Open; { 打开数据库表 }
VaryingTable EnableControls; { 显示所作的修改 }
Screen Cursor := crDefault; { 重新设置光标形状 }
end;
crHourglass型光标表明正在执行SQL查询 DisableControls和EnableControls的作用是隐藏和显示数据变化
InterBase触发器(Trigger)的应用
在CSDEMO应用程序中 演示触发器应用的窗体是TFromTriggerDemo;
在该窗体中包含两个TDBGrid对象 DBGrid 显示EmployeeTable中的数据 DBGrid 显示SalaryHistoryTable中的数据 它们的主要属性及属性值如下
表 EmlpoyeeTable部件主要属性的取值
━━━━━━━━━━━━━━━━━━━━━
属 性 属 性 值
─────────────────────
DatabaseName EmployeeDemoDB
IndexFieldName Emp_No
TableName EMPLOYEE
━━━━━━━━━━━━━━━━━━━━━
表 SalaryHistoryTable部件主要属性的取值
━━━━━━━━━━━━━━━━━━━━━
属 性 属 性 表
─────────────────────
DatabaseName EmployeeDemoDB
IndexFieldName Emp_No
MasterFields Emp_No
MasterSource EmployeeSource
TableName SALARY_HISTORY
━━━━━━━━━━━━━━━━━━━━━
这两个表之间存在两种关系
● 连接关系
EmployeeTable的记录变化时 SalaryHistoryTable的数据要作相应的变化 这种连接关系是通过索引来实现的
● 数据一致性
对EmployeeTable中的Salary字段的值作修改必须反映到SalaryHistoryTable中 SalaryHistoryTable维护的是Salary变化的历史信息 这种数据一致性要求在本程序中是通过触发器实现的
触发器是在SQL服务器端执行的一段程序 它在服务器端被触发执行完成一定的数据计算任务
下面是InterBase服务器上与Employee表相关的触发器程序
Triggers on Table EMPLOYEE:
SAVE_SALARY_CHANGE Sequence: Type: AFTER UPDATE Active AS
BEGIN
IF (old salary <> new salary) THEN
INSERT INTO salary_history
(emp_no change_date updater_id old_salary percent_change)
VALUES (
old emp_no
now
user
old salary
(new salary old salary) / old salary)
END
因为触发器是相应于EMPLOYEE表上的数据修改由服务器自动触发执行的 所以在客户应用程序上没有显式的调用 在客户端有打开并显示数据库表内容的程序和当SALARY_HISTORY表中数据变化时的更新显示的 *** 作
lishixinzhi/Article/program/Delphi/201311/25126关于更换或者迁移域服务器:关于域服务器迁移的请教我通过部署一个简单的域管理公司40台左右的机器。域的作用主要是通过域用户来管理客户端,回收大部分的权限,使客户端系统非常稳定!整个域系统已经用了快4年了。另 外域服务器还兼任文件服务器,授权和设置了共享文件目录,让客户端可以通过这些共享目录交流和保存信息。现在公司购置了新的机器,需要将现在旧的域服务器迁移到这台新机上,旧的机器另有用途,我在考虑如何做才能让客户端受到的影响最小!先讲一下我现在的网络系统架构:ip段:192168760 2552552550DNS:1921687621DC(old):1921687621我想的迁移办法是:1先在新机上装好dc(new):19216876312在dc(new)上设置dns指向1921687621,然后作为DC(old)的额外域建立域,将dc(new)的域信息复制过来,然后配置dc(new)的dns中的ad zone,将dc(old)的dns资料也 复制过来,使dc(new)完全成为dc(old)的冗余备份!3将dc(old)的域正常卸载,让dc(new)承担起域的管理以上只是我以现有知识的设计方案,还没有实际实践,所以想请教几个问题:1dc(old)正常卸载后,dc(new)是否会自动管理起整个域?还需要什么后续的步骤吗?2另一个头痛的问题是如何使原客户端的dns指向新的dns,我想将dc(old)从网络下线后 ,直接修改dc(new)的ip为dc(old)的ip,但是觉得会有问题,不知道是否可行,或者有其他更好的办法。否则我还是要修改40多台客户端的dns指向新的dc(new)! 回答: 1这里要澄清一个问题,所有dc如果获得了完全复制,那么它们上面的数据库是完全同步的,这个通过过程是后台自动完成的,不需要人为干预。如果您的dns选择了与ad同步,那么dns的同步也是自动的。那么在新的dc作为additional dc添加进来并获得完全同步后,您所需要做的动作是,将原有primary dc所承担的角色转移过来,比如5个om,gc,如果有多站点,还有istg。注意是transfer,而不是seize。等待dc的状态稳定后,降级原来的primary dc就好了。相关的资料请参考: >
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)