刚转VB没多久,不知道VB里面怎么设置记录锁定。
数据库用的是SqlServer2000
我现在是想在VB查询出很多记录后点一条记录查看、修改、保存,由于多人会有同时操作一条数据的可能性,现在试图在一个人在点修改按钮后就把记录锁定,其他人只能查看,不能再点修改,也不能保存这条记录,直到第一个人取消或者保存记录为止,请问这个应该怎么做?
其实以前在delphi里面也不知道怎么设置的了,拿原来的代码来看也看不出什么,好像什么都没设置就可以用的,VB里面不行-_-!~~望不吝赐教,thanks

解决方案 »

  1.   

    个人认为SQL数据库本身就有并发操作的机制,其实不用担心这些。在代码用容错处理就可以了。
      

  2.   

    对数据库的增加、修改或删除操作时多用事务来控制:
    private sub command1_click()
    on error goto err:
    conn.begintrans    '开启事务
        conn.execute "insert into tablename(...) values(...)"
        conn.execute "update tablename set ... where ..."
        conn.execute "delete from tablename ... where ..."
    conn.committrans  '提交事务
        exit sub
    err:
        conn.rollbacktrans  '回滚事务
        exit sub
    end sub
      

  3.   

    舉個例子給你看了
    CREATE PROC dbo.procDinner_note
    AS
    BEGIN TRAN
    SET NOCOUNT ON
    SET ANSI_WARNINGS ON
    SET XACT_ABORT  ON --光晟員工每日3餐,時間為一個月(本月1日到最后一天)
    DECLARE @in_start_time datetime
    SET @in_start_time=CONVERT(varchar(10),GETDATE(),120)
    UPDATE  ht_server.dbo.person_file
    SET dine='Y',dinner_num=9,in_start_time=@in_start_time,in_end_time=DATEADD(second,-1,DATEADD(month,1,@in_start_time))
    FROM ht_server.dbo.person_file A,
    (SELECT  person_no
    FROM person  
    WHERE enable='1' AND ISNULL(bed_no,'')<>'' AND LEFT(LTRIM(position_no),1)='A' AND  ISNULL(rice_type,'')<>'A' AND ISNULL(tax_level,'')<>'B'
    )B
    WHERE A.person_no=B.person_no AND A.enable='1' AND A.detp_no='A0000'IF @@ERROR<>0  GOTO error_sign
    COMMIT TRAN
    SELECT 1
    error_sign:
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRAN
    SELECT 0
    END
      

  4.   

    dim mydb as database
    set mydb=opendatabase(App.Path & "\yyjxc.mdb",True)
    msgbox "数据库已经被独占方式锁定!"
      

  5.   

    锁定的方式由你ado的open语句的LockType参数决定:
    LockType   可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一。常量 说明 
    AdLockReadOnly (默认值)只读 — 不能改变数据。 
    AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。 
    AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。 
    AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。 说明打开 Recordset 前设置 LockType 属性可指定打开时提供者应该使用的锁定类型。读取该属性可返回在打开的 Recordset 对象上正在使用的锁定类型。Recordset 关闭时 LockType 属性为读/写,打开时该属性为只读。提供者可能不支持所有的锁定类型。如果某提供者不支持所需的 LockType 设置,则将替换为其他类型的锁定。要确定 Recordset 对象可用的实际锁定功能,请通过 adUpdate 和 adUpdateBatch 使用 Supports 方法。如果 CursorLocation 属性被设置为 adUseClient,将不支持 adLockPessimistic 设置。设置不支持的值不会产生错误,因为此时将使用支持的最接近的 LockType 的值。远程数据服务用法   当在客户端 (ADOR) 的 Recordset 对象上使用时,LockType 属性只能设置为 adLockOptimisticBatch。