powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как правильно добавить поле в существующую таблицу Visual FoxPro ?
10 сообщений из 10, страница 1 из 1
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37680918
i_bison
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для добавления програмно поля в таблицу
воспользовался такой конструкцией

ALTER TABLE z_config ADD is_bez_provodok L


так как программа распространена на десятке компьютеров, захотелось сделать создание поля
автоматически, там где его нет. Для этого узнаю его наличие показанным ниже способом. Не самым изящным, конечно.


LOCAL est as Logical

SELECT * FROM z_config INTO CURSOR tmp_z_config

gnFieldcount = AFIELDS(gaMyArray) && создается массив.

est = .f.
FOR nCount = 1 TO gnFieldcount
IF gaMyArray(nCount,1) == "is_bez_provodok"
est = .t.
endif
ENDFOR

DELETE FILE tmp_z_config


IF NOT est
USE z_config EXCLUSIVE
ALTER TABLE z_config ADD is_bez_provodok L
endif



При выполнении останавливается на строке

USE z_config EXCLUSIVE

Сообщение

File is in use.

Что я делаю не так?
Помогите, целый день потратил на этот кусок кода.
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37680964
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
LOCAL est as Logical

SELECT * FROM z_config INTO CURSOR tmp_z_config

gnFieldcount = AFIELDS(gaMyArray) && создается массив.

est = .f.
FOR nCount = 1 TO gnFieldcount
IF gaMyArray(nCount,1) == "is_bez_provodok"
est = .t.
endif
ENDFOR

DELETE FILE tmp_z_config


IF NOT est
*надо закрыть открытую таблицу
IF USED('z_config')
use in z_config
endiа  
USE z_config EXCLUSIVE
ALTER TABLE z_config ADD is_bez_provodok L
endif
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37680972
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил опечатку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF NOT est
*надо закрыть открытую таблицу
IF USED('z_config')
use in z_config
endif  
USE z_config EXCLUSIVE
ALTER TABLE z_config ADD is_bez_provodok L
endif
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37680973
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перебор полей ни к чему, достаточно проверить условие
type("z_config.is_bez_provodok")=='L'

Фраза "File is in use" явственно намекает, что z_config уже открыт. Для эксклюзивного открытия придется выполнить
use in select("z_config")

Ну и неплохо бы обработатьть ситуацию, а получится ли эксклюзивно открыть таблицу z_config ;)
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37681074
i_bison
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XAndy, Dag,

спасибо,

завтра попробую все советы в своей базе. уверен сработает.

насчет того что файл открыт и его надо бы закрыть я четко осознавал
в Фоксе чёрт голову сломает в изобилии команд.
Тяжкое наследие досовских времен, как сказал бы Остап Бендер.

я закрытие z_config никак подобрать не мог,

а определить наличие поля в таблице, сделал тем , что под руку подвернулось.

прикольно, что мне на досовском Клиппере создавать приходилось нехилой длинны проги
двно, очень давно.
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37681543
не надо перебирать поля, можно проще сделать

если, например, таблица mytable входит в контейнер базы данных mybase, а не свободная она, то проверить есть ли в ней поле myfield и, если его нет, то добавить его можно примерно так:

OPEN DATABASE mybase.dbc

IF INDBC("mytable.myfield,"FIELD") = .F.
USE mytable IN 0 EXCLUSIVE
ALTER TABLE 'mytable ' ADD COLUMN 'myfield' C(100)
USE IN mytable
ENDIF

CLOSE DATABASES ALL
DELETE FILE("*.bak")
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37681565
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КонецЦиклаIF INDBC("mytable.myfield,"FIELD") = .F.

Не обязательно контейнер БД использовать:
Код: sql
1.
if type("mytable.myfield") = 'U'


только предварительно таблица должна быть обязательно открыта.
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37682042
i_bison
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем принявшим участие премного благодарен.

Вот конечный код который запахал.



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
use z_config

IF type("z_config.is_bez_provodok") = 'U'

  *надо закрыть открытую таблицу
  IF USED('z_config')
     use in z_config
  endif  
  
    USE z_config EXCLUSIVE
    ALTER TABLE z_config ADD is_bez_provodok L
endif
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37682138
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это лишнее:
Код: sql
1.
2.
3.
  IF USED('z_config') 
     use in z_config
  endif


т.к. чуть выше все открыто, а
Код: sql
1.
USE z_config EXCLUSIVE


переоткрывает если в текущей рабочей области открыт z_config
...
Рейтинг: 0 / 0
как правильно добавить поле в существующую таблицу Visual FoxPro ?
    #37683161
i_bison
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

ок, попробую

у меня как раз с открытием эксклюзивно проблемы были по началу
после чего я и написал на форум

из моей каракатицы, получается все более компактный код

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


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