powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите разобраться с Seek()
3 сообщений из 3, страница 1 из 1
Помогите разобраться с Seek()
    #35061282
3a60p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичек в FoxPro и наткнулся на вот такие непонятки:
- У меня есть код, который генерит Id для разноименных таблиц:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 Param tcAlias 
  Local lcAlias, ;
    lnID, ;
    lcOldReprocess, ;
    lnOldArea
  lnOldArea = Select() 
  lcOldReprocess = Set("Reprocess")
  Set Reprocess to Automatic 
  If Parameters() <  1 
  lcAlias =Upper(Alias()) 
  Else
    lcAlias = Upper( tcAlias )
  EndIF
  If !Used("IDS")         
  	Use Ids In  0 
  EndIF
  Select Ids
  IF Seek(lcAlias,"IDS","cTable")
  	IF Rlock()             
  	lnID = Ids.nNext_Id
    Repl Ids.nNext_Id With Ids.nNext_Id+ 1 
  	Unlock
    EndIF
  EndIF
  Select(lnOldArea)
  Set Reprocess to lcOldReprocess
  Return lnID
вот - по задумке он должен обращаться к таблице IDS и сверив название таблицы для ввода с названием переменной cTable выдавать следующий по порядку номер Id для этой таблицы и записывать его вместо старого с таблицу IDS.

Однако при запуске ругется на "lcAlias" в
Код: plaintext
IF Seek(lcAlias,"IDS","cTable")

- "Index tag is not found"

Пробовал запускать без

Код: plaintext
IF Seek(lcAlias,"IDS","cTable")

тогда работает но счетчик для ID получается один для всех cTable

Подскажите как мне lcAlias определить, чтоб он читался Seek()
...
Рейтинг: 0 / 0
Помогите разобраться с Seek()
    #35061347
3a60pЯ новичек в FoxPro и наткнулся на вот такие непонятки:
- У меня есть код, который генерит Id для разноименных таблиц:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 Param tcAlias 
  Local lcAlias, ;
    lnID, ;
    lcOldReprocess, ;
    lnOldArea
  lnOldArea = Select() 
  lcOldReprocess = Set("Reprocess")
  Set Reprocess to Automatic 
  If Parameters() <  1 
  lcAlias =Upper(Alias()) 
  Else
    lcAlias = Upper( tcAlias )
  EndIF
  If !Used("IDS")         
  	Use Ids In  0 
  EndIF
  Select Ids
  IF Seek(lcAlias,"IDS","cTable")
  	IF Rlock()             
  	lnID = Ids.nNext_Id
    Repl Ids.nNext_Id With Ids.nNext_Id+ 1 
  	Unlock
    EndIF
  EndIF
  Select(lnOldArea)
  Set Reprocess to lcOldReprocess
  Return lnID
вот - по задумке он должен обращаться к таблице IDS и сверив название таблицы для ввода с названием переменной cTable выдавать следующий по порядку номер Id для этой таблицы и записывать его вместо старого с таблицу IDS.

Однако при запуске ругется на "lcAlias" в
Код: plaintext
IF Seek(lcAlias,"IDS","cTable")

- "Index tag is not found"

Пробовал запускать без

Код: plaintext
IF Seek(lcAlias,"IDS","cTable")

тогда работает но счетчик для ID получается один для всех cTable

Подскажите как мне lcAlias определить, чтоб он читался Seek()
Значит так. Ругается Фокс не на lcAlias.
Согласно справки формат функции Seek следующий:
автор
SEEK(eExpression [, nWorkArea | cTableAlias [, nIndexNumber | cIDXIndexFileName | cTagName]])

Т.е. первым параметром идет то, что ты ищешь (искомое значение); вторым параметром - в какой рабочей области/таблице проводить поиск; третьим - по какому индексу рабочей таблицы.
Второй и третий параметры являются необязательными (т.е. если укажешь в SEEK только значение, то оно будет искаться в текущей таблице по текущему индексу)

Ошибка "Index tag is not found" говорит тебе, что у данной таблицы (IDS) нет индекса с названием "cTable". Может ты его стер когда-то, а может его и не было вовсе - как знать...

Пример использования функции SEEK:
Код: plaintext
1.
2.
3.
4.
CLOSE DATABASES
OPEN DATABASE (HOME( 2 ) + 'Data\testdata')
USE customer ORDER cust_id  && Opens Customer table, index cust_id
? SEEK('CHOPS')  && Returns .T., record found
 
...
Рейтинг: 0 / 0
Помогите разобраться с Seek()
    #35061392
3a60p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий
Значит так. Ругается Фокс не на lcAlias.
Согласно справки формат функции Seek следующий:
автор
SEEK(eExpression [, nWorkArea | cTableAlias [, nIndexNumber | cIDXIndexFileName | cTagName]])

Т.е. первым параметром идет то, что ты ищешь (искомое значение); вторым параметром - в какой рабочей области/таблице проводить поиск; третьим - по какому индексу рабочей таблицы.
Второй и третий параметры являются необязательными (т.е. если укажешь в SEEK только значение, то оно будет искаться в текущей таблице по текущему индексу)

Ошибка "Index tag is not found" говорит тебе, что у данной таблицы (IDS) нет индекса с названием "cTable". Может ты его стер когда-то, а может его и не было вовсе - как знать...


спасибо за разъяснения с SEEK() и толкования ошибки.

Теперь ошибки нет и прога вроде как выполняется, криво только - но с этим уж попробую сам %)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите разобраться с Seek()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]