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

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

Это команды фокса, а не драйвера VFPOLEDB. Из методов драйвера я знаю только Execute, параметром которого идет sql запрос к фоксу
...
Рейтинг: 0 / 0
13.08.2012, 11:14
    #37914112
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прочитать состав индексов дбф с помощью VFPOLEDB
В качестве параметра 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
13.08.2012, 14:57
    #37914577
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прочитать состав индексов дбф с помощью VFPOLEDB
Кстати, функция 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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прочитать состав индексов дбф с помощью VFPOLEDB / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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