2013-05-02 3 views
0

как заблокировать таблицу foxpro, которая имеет sono = '12345' от OLEDB вместо блокировки всего стола? используя rlock(), я могу блокировать записи по номеру, но не знаю, как заблокировать записи с помощью фильтра.OLEDB FOXPRO LOCK RECORD

вот как я блокировать таблицу по номеру записи

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

Какова ваша цель блокировать записи через OleDB. Блокировка будет доступна только в течение всего времени соединения, и если вы отключитесь до завершения того, что вы пытались сделать, вы потеряете блокировки. Опция Джерри, по-видимому, наиболее близка к решению нескольких блокировок записей. Тем не менее, похоже, что вы будете делать больше, и в конечном итоге попытаетесь построить всю процедуру, выполняемую с помощью вызова ExecScript(). Я не обязательно вижу это как практическое. – DRapp

ответ

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(), если у вас есть индекс, который вы можете использовать.

+0

как я могу найти всю запись со sono = '12345'? – RoyT

+0

Как сказал Джерри, вам нужно будет составить список номеров записей записей с sono = '12345', а затем заблокировать записи. – LAK

0

Вам необходимо установить фильтр FILTER TO, затем пропустить фильтр и сохранить номера записей в var, а затем RLOCK на основе номеров записей в var.

//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() 
Смежные вопросы