powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как получить поля, входящие в PK для VFP
10 сообщений из 10, страница 1 из 1
Как получить поля, входящие в PK для VFP
    #32108594
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем!
Подскажите, как мне получить для каждой таблицы из базы данных .DBC поля, которые входят в ее первичный ключ.
Для одной таблицы это можно получить, если сделать use <tablename> и
?KEY(1)
Но мне нужно для всех таблиц - и не на экран, а лучше всего в отдельную таблицу!

В принципе, мне это вообще бы лучше через ADO получать; только я подозреваю, что это невозможно.
К сожалению, в VFP разбираюсь плохо - гуру, откликнитесь!
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108736
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
CLEAR 
SET EXCLUSIVE OFF 
OPEN DATABASE ?
n=ADBOBJECTS(laTables, "TABLE" )
IF n> 0 
  FOR i= 3  TO n
    ?'Table:'+laTables[i]
      USE (laTables[i])
      lcIndex='*'
      x= 0 
      DO WHILE !EMPTY(lcIndex)
        x=x+ 1 
        lcIndex=KEY(x)
        IF lcIndex='*'
          ?'No indexes'
          lcIndex=''
        ELSE
          IF !EMPTY(lcIndex)
            ?'Index '+LTRIM(STR(x))+': '+lcIndex
        ENDIF 
      ENDIF 
    ENDDO  
    USE 
  ENDFOR 
ENDIF 
CLOSE DATABASES 
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108764
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!!!!
Только несколько дурацких вопросов:
1.Почему цикл с i= 3 ????
2. А вместо вывода на экран при помощи ? , как можно в таблицу записать?
Сейчас под рукой VFP нет, поэкспиременировать не могу.
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108814
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> 1.Почему цикл с i=3 ????

Ooops, забыл исправить после отладки. for i=1..

> 2. А вместо вывода на экран при помощи ?, как можно в таблицу записать?

Код: plaintext
1.
INSERT INTO dbf_name [(fname1 [, fname2, ...])]
   VALUES (eExpression1 [, eExpression2, ...])
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108877
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один дурацкий вопрос (наверно уже задолбал :))
Попытался начать пр-му с
Код: plaintext
1.
2.
3.
4.
5.
create table  "dbdir.dbf"  free
(
  objectname character( 30 ),
  pk_index character ( 128 )
)
...

На первой же строчке ругается - Syntax Error!
Создание таблиц надо как-то обставлять?
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108889
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] 
    ( FieldName1 FieldType [( nFieldWidth [, nPrecision] )] [NULL | NOT NULL] 
    [CHECK lExpression1 [ERROR cMessageText1]] 
    [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]] 
    [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS]
    [, FieldName2 ... ] 
    [, PRIMARY KEY eExpression2 TAG TagName2 | , UNIQUE eExpression3 TAG TagName3 [COLLATE cCollateSequence]]
    [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] [COLLATE cCollateSequence] 
    REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]] ) 
    | FROM ARRAY ArrayName


Если таблица временная лучше использовать create cursor, файл автоматически удалится после USE:
Код: plaintext
1.
2.
3.
CREATE CURSOR alias_name 
   (fname1 type [(precision [, scale])] [NULL | NOT NULL] 
   [CHECK lExpression [ERROR cMessageText]] [DEFAULT eExpression] [UNIQUE] [NOCPTRANS] [, fname2 ...]) 
   | FROM ARRAY ArrayName


В твоем случае:
Код: plaintext
create cursor dbdir (objectname c( 30 ), pk_index c( 128 ))


ЗЫ Если переносишь команду на другую строку используй ';', аналогично '_' в бейсике.
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32108998
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Не похож он на MSSQL :)
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #32109152
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Не похож он на MSSQL :)

В этом свои плюсы и минусы :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как получить поля, входящие в PK для VFP
    #33635696
nikoloz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..
...
Рейтинг: 0 / 0
Как получить поля, входящие в PK для VFP
    #33639871
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi nikoloz!

Не уверен что правильно понял вопрос...

1) TAGCOUNT() + PRIMARY() + KEY()
2) ATAGINFO() - для более-менее свежей версии фокса.

Эти функции позволяют получить индексное выражение для тега первичного
ключа.
Какого-либо надёжного способа преобразовать индексное выражение в список
полей я не знаю - правда я так-же не знаю нужно ли это - по идее для
большинства применений должно быть достаточно именно самого значения
индексного выражения... Без расщепления его на кусочки.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как получить поля, входящие в PK для VFP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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