如何通过OLEDB锁定一个具有sono ='12345'的foxpro表而不是锁定整个表?使用rlock(),我可以按编号锁定记录,但不知道如何使用过滤器锁定记录。
这是我如何按记录号码锁定表格
string vfp = "[ SET EXCLUSIVE OFF ] + chr(13) + ";
vfp += " [ USE table IN 0 ALIAS a_table ] + chr(13) +";
vfp += " [ LOCK('1,2,3,4', 'a_table ') ]";
dbConn.Open();
using (OleDbCommand cmd = dbConn.CreateCommand())
{
cmd.CommandText = "Exec( " + vfp + " ) ";
cmd.ExecuteNonQuery();
}
答案 0 :(得分:0)
如果将“记录指针”放在要锁定的记录上,然后在没有参数的情况下调用RLOCK(),记录将被锁定。
这一系列命令将执行此操作:
SET EXCLUSIVE OFF
USE table IN 0 ALIAS a_table
SELECT a_table
LOCATE FOR sono='12345'
RLOCK()
这假设LOCATE命令实际上找到了sono ='12345'的记录。
或者,如果您有可以使用的索引,则可以使用SEEK命令或SEEK()函数。
答案 1 :(得分:0)
你必须设置过滤器,然后循环过滤器并将记录号存储到var,然后根据var中的记录号保存RLOCK。
//Perhaps use a SQL Command to filter
USE mytable in o ALIAS a_table
SELECT RECNO() AS ID FROM mytable INTO CURSOR myCursor NOFILTER
SELECT myCursor
idList = ""
LOCATE &&Same as GO TOP
SCAN
idList = idList + ALLTRIM(STR(ID)) + ", "
ENDSCAN
SET MULTILOCKS ON &&Remember to turn this ON
isAllRecordsLocked = RLOCK(idList, 'a_table') &&Perform RLOCK()