Archive for 05月, 2007

每日一句:I have to tighten my belt this month.( 5.21 )

I’ll lay my hands on him sooner or later.
我迟早要收拾他。
—————————————————————————————————
  词组lay one’s hands on,找到,攻击。
  例句:
He’s gone with the keys again, just wait till I lay my hands on him.
他又把钥匙拿走了,等我收拾他。

访问数据库时如何解决并发问题(02)

–或者自己加锁(控制更灵活)

–锁定记录,只允许单用户修改的例子:

–创建测试环境
–创建测试表–部门表
create table 部门(departmentid int,name varchar(10))

–记录锁定表
create table lock(departmentid int,dt datetime)

go
–因为函数中不可以用getdate,所以用个视图,得到当前时间
create view v_getdate as select dt=getdate()
go
–创建自定义函数,判断记录是否锁定
create function f_chk(@departmentid int)
returns bit
as
begin
declare @re bit,@dt datetime
select @dt=dt from v_getdate
if exists(select 1 from lock where departmentid=@departmentid
and datediff(ss,dt,@dt)<5)
set @re=1
else
set @re=0
return(@re)
end
go

–数据处理测试
if dbo.f_chk(3)=1
print ‘记录被锁定‘
else
begin
–也可以是查询
begin tran
insert into lock values(3,getdate())
update 部门 set name=‘A‘ where departmentid=3
delete from lock where departmentid=3
commit tran
end

–删除测试环境
drop table 部门
drop view v_getdate
drop function f_chk

如果是死锁可以查一下:1:sp_who [...]

访问数据库时如何解决并发问题(01)

在数据库访问时。如果处理并发访问的问题
或者当一个操作员对一个对象作读操作时。另一个操作员对此对象作写操作的时候
如何避免死锁发生
/**********    加锁     ***************
设table1(A,B,C)
A      B      C
a1     b1     c1
a2     b2     c2
a3     b3     c3
1)排它锁
新建两个连接
在第一个连接中执行以下语句

begin tran
   update table1
   set A=‘aa‘
   where B=‘b2‘
   waitfor delay ‘00:00:30‘  –等待30秒
commit tran

在第二个连接中执行以下语句

begin tran
   select * from table1
   where B=‘b2‘
commit tran

若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒
2)共享锁
在第一个连接中执行以下语句

begin tran
   select * from table1 holdlock -holdlock人为加锁
   where B=‘b2‘
   waitfor delay ‘00:00:30‘  –等待30秒
commit tran

在第二个连接中执行以下语句

begin tran
   select A,C from table1
   where B=‘b2‘
   update table1
   set A=‘aa‘
   where B=‘b2‘
commit tran

若同时执行上述两个语句,则第二个连接中的select查询可以执行
而update必须等待第一个连接中的共享锁结束后才能执行 即要等待30秒
3)死锁
增设table2(D,E)
D      E
d1     e1
d2     e2
在第一个连接中执行以下语句

begin tran
   update table1
   set A=‘aa‘
   where B=‘b2‘
   waitfor    delay ‘00:00:30‘
   update table2
   set D=‘d5‘
   where [...]

每日一句:I have racked my brain.( 5.18 )

I have racked my brain.
我已经绞尽了脑汁。
—————————————————————————————————
  词组rack one’s brain,英文的解释是to cause great mental suffering,to torture brain by means of the rack.,即,用尽心思去思考事情,太用心了,好象饱受精神上的折磨。用汉语中的“绞尽脑汁”来形容正好。

批处理文件

一、什么叫做批处理文件?
批处理文件(文件名为*.BAT)就是将一些常用的命令写入一个文本文件内。当我们要使用这个文件时,只要键入批处理文件的文件名,批处理文件就会依照文件中的命令来执行全部或者是一部分指定要执行命令。如此我们便可简化我们的工作,而不用每一次都需要手动键入很多的命令来执行一些动作。
一个批处理文件的建立,因为必须是一个文本文件;所以只要有字处理功能的软件,都可用来建立此文本文件,例如EDIT,WORDSTAR,PE2……等程序皆可。
二、什么是自动批处理?
自动批处理文件(AUTOEXEC.BAT),是批处理文件的一种,处于引导盘(一般为C盘或A盘)的根目录下,当每一次开机时,系统将自动到引导盘的根目录下查找它,如果找到了就自动执行它。
三、批处理文件中可以使用哪些命令?
只要能够在DOS的系统提示符下执行的命令,或应用软件执行文件名称,都能写在批处理文件中,批处理命令也可包含在内,详细如下:
1.DOS的内部命令
2.DOS的外部命令
3.COM的命令文件
4.EXE的可执行文件
5.批文件命令:CALL,ECHO,FOR,GOTO,IF,PAUSE,REM,SHIFT
6.其他的批文件
四、批处理文件命令
BATCH DOS 命令1.功能: 批处理命令是存储在一个特殊的批处理文件(Batch File)中的DOS命令。当执行一个批处理文件时,DOS将依次执行文件内所存储的各项DOS命令。
2.格式:[d:][path][filename.bat][parameters]
3.说明: ①、批处理文件的扩展名应为.BAT。
②、当执行批处理文件时,您可将参数(parameters)传给一名称为file-name.bat的文件,给予不同的参数,将可以执行类似的工作。
③、如果要停止批处理文件的动作,只要按下ctrl+break二键,即可停止正在执行的命令,并且出现下述信息:
terminate batch job?(Y/N)
如果按下Y键就可以终止批处理文件的执行工作。如果按N键,那系统将会继续执行其它的批处理文件中的命令。
4.范例: ①、如果在test.bat文件内包括一些替换参数,将使得在执行时,可以使用您所提供的值来替换它。例如:
copy %1.mac %2.mac
type %2.prn
type %0.bat
%0,%1,%2这三个可以被代换的参数,于执行时将使用批处理文件时的三个参数顺序依次来代换之。
%0参数永远使用批处理文件的文件名来取代。
在一个批处理文件内最多可以使用10个替换参数(%0到%9)
②、当您要执行test.bat的批处理文件时,系统将依照%1,%2等顺序给予适当的参数。例如:
A:\>test a:prog1 b:prog2
于是系统将以test代表%0,以a:\prog1代表%1,以b:\prog2代表%2因此在执行此命令时,就相当于直接在键盘上依次输入下述DOS命令一样:
copy a:\prog1.mac b:\prog2.mac
type b:\prog2.prn
typt test.bat
③、批处理文件亦可使用DOS的环境变量。环境变量于使用时前后都要加上一个%符号。例如要取用DOS PATH的值,您必需输入%PATH%。下例是先假设将变量destination定义为一台磁盘驱动器代码:
SET [...]

批处理文件指南

后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢?
  比如,在启动wps软件时,每次都必须执行
  C:\>cd wps
  C:\WPS>spdos
  C:\WPS>py
  C:\WPS>wbx
  C:\WPS>wps
  如果每次用WPS之前都这样执行一次,您是不是觉得很麻烦呢?
  如果有一个方法,只需编写一个批处理文件,就会自动执行刚才的所有命令,您想不想学呢?
  当您看完此节,自己编写的第一个批处理文件顺利执行时,您一定会大吃一惊的。
  此外电脑每次启动时都会寻找autoexec.bat这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正自动化。
  echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。
call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)
pause 运行此句会暂停,显示Press any key to continue… 等待用户按任意键后继续   
rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的   

  例:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。
  批处理文件的内容为:         文件表示:
    echo off            不显示命令行
    dir c:\*.* >a.txt       将c盘文件列表写入a.txt
    call c:\ucdos\ucdos.bat    调用ucdos
    echo 你好            显示”你好”
    pause              暂停,等待按键继续
    rem 使用wps           注释将使用wps
    cd ucdos            进入ucdos目录
    wps               使用wps  
  批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。 [...]

简单的局域网自动更新程序2

Option Explicit
‘**************************************************************************
Private Const App_Name = “Society”
Private Const ExePath = “\\fileserver\DataSource\SocietyUpdate\“
‘**************************************************************************
Private Sub ExeRefresh()
Dim S1 As String
Dim s2 As String
Dim S3 As String
Dim S4 As String
Dim strLcFile As String
Dim a As Long
‘On Error Resume Next
S1 = “yy”
If Len(App.path) > 3 Then
     S1 = App.path + “\” + Trim(App_Name) + “.exe”
     S3 = App.path + “\” + App_Name [...]

简单的局域网自动更新程序1

‘能够在局域网中自动更新指定文件,本身也可以自动升级。对测试时的程序很有用。

‘Main.bas
Option Explicit
Private Declare Function FindFirstFile Lib “kernel32″ Alias “FindFirstFileA” (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib “kernel32″ Alias “FindNextFileA” (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib “kernel32″ (ByVal hFindFile As Long) As Long
Private Declare Function CreateDirectory Lib “kernel32″ Alias “CreateDirectoryA” (ByVal lpPathName As [...]

每日一句:Keep me updated.( 5.16 )

Keep me updated.
有什么新情况?
—————————————————————————————————
  动词update,升级,更新。中文的直译是“让我保持更新的状态”,就是在要求别人把某件事的最新进展告诉你。反过来,如果是你要告诉别人某件事的最新进展,你就可以说:Let me update. 注意,前面一句用的是动词的过去分词,作为形容词使用;后面一句用的是动词原形。