powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прочитать состав индексов дбф с помощью VFPOLEDB
5 сообщений из 5, страница 1 из 1
Прочитать состав индексов дбф с помощью VFPOLEDB
    #37911572
AleGol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как сторонней программой, используя VFPOLEDB, узнать список индексов и их состав?
...
Рейтинг: 0 / 0
Прочитать состав индексов дбф с помощью VFPOLEDB
    #37911586
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleGol,

смотрите в сторону функций ataginfo()/cdx()
...
Рейтинг: 0 / 0
Прочитать состав индексов дбф с помощью VFPOLEDB
    #37914049
AleGol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Это команды фокса, а не драйвера VFPOLEDB. Из методов драйвера я знаю только Execute, параметром которого идет sql запрос к фоксу
...
Рейтинг: 0 / 0
Прочитать состав индексов дбф с помощью VFPOLEDB
    #37914112
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве параметра Execute() указывается процедура . Т.е. набор команд. Одна команда Select-SQL - это просто частный случай использования.

Впрочем, если Вас интересует только список индексов, то можно использовать еще один ActiveX элемент ADOX. Официально он называется "Microsoft ActiveX® Data Objects Extensions for DDL and Security"

Ниже пример для отображения структуры базы Access из среды FoxPro. Думаю сам сможете адаптировать пример под свои нужды

Код: sql
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.
loCat=CREATEOBJECT("ADOX.Catalog")  
  loCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" +;  
          "Data Source="+lcMDB+";"  
    
  FOR EACH lotab IN loCat.Tables  
  	?""  
  	?"Table Name ", loTab.name, "Indexes ",lotab.Indexes.Count  
  	FOR EACH loIndex IN loTab.Indexes  
      	?? " index name ", loIndex.name  
  	NEXT  
  	  
  	FOR lii=1 TO loTab.Keys.Count  
      	IF loTab.Keys(lii-1).Type=adKeyPrimary  
  	       loKey=loTab.Keys(lii-1)  
      	   ?loKey.Name+": "  
  	       FOR liy=1 TO loKey.Columns.Count  
      	       ??loKey.Columns(liy-1).Name+IIF(liy=loKey.Columns.Count,"","+")  
  	       NEXT  
      	   lokey = null  
  	       EXIT  
      	ENDIF  
  	NEXT  
    
  ENDFOR
 
  
...
Рейтинг: 0 / 0
Прочитать состав индексов дбф с помощью VFPOLEDB
    #37914577
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, функция ATagInfo() не поддерживается VFPOLEDB. Поэтому, если действовать только средствами VFPOLEDB, то придется обойтись функциями tag(), key(), tagCount() примерно так

Код: sql
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.
27.
28.
29.
30.
loConn = Createobject("Adodb.connection")
m.tcDataSource  = FullPath("data1.dbc")
loConn.ConnectionString = "Provider=VFPOLEDB;Data Source=" + m.tcDataSource+";Exclusive=Off"
loConn.Open()  

* Создаем курсор, куда пойдет запись результатов
* одновременно открывая нужную таблицу
lcSelect = "Select Space(10) as tagName, Space(240) as tagExp into cursor tagInfo readWrite from table1 where .f."

lcSelect = [execScript("] + lcSelect + [")]
loConn.Execute(lcSelect)

* Собственно сканирование индексов
lcSelect = "select table1" + Chr(13) + ;
		"for lnI=1 to Tagcount('table1')" + Chr(13) + ;
		"cTag = Tag(lnI,'table1')" + Chr(13) + ;
		"cKey = Key(lnI,'table1')" + Chr(13) + ;
		"insert into tagInfo (tagName, tagExp) values (cTag, cKey)" + Chr(13) + ;
		"endfor"

lcSelect = [execScript("] + lcSelect + [")]
loConn.Execute(lcSelect)

* Смотрим результат
recordSet = loConn.Execute('select * from tagInfo')
Do while recordSet.Eof() = .F.
	?recordSet.Fields("tagName").value
	?recordSet.Fields("tagExp").value
	recordSet.moveNext()
EndDo



Получить значение фильтра индекса через SYS(2021) не получилось. Вроде и ошибки нет, но и результата она не возвращает. Пустая строка остается.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прочитать состав индексов дбф с помощью VFPOLEDB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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