powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать связь с базой данных
25 сообщений из 33, страница 1 из 2
Убрать связь с базой данных
    #35211605
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(VFP9) Есть таблица, как проверить, есть ли у неё связь с базой данных, а если есть, то убрать эту связь....
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211626
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Removes a database reference from a table.

FREE TABLE TableName
 


Parameters
TableName 
Specifies the name of the table from which the database reference is removed.

Remarks
If a database is accidentally deleted from disk, references to the database remain in the tables formerly contained in the database. FREE TABLE removes the database references from a table, making it possible for you to open the table or add the table to a different database.

Caution  
FREE TABLE should never be issued to remove a table from a database if the database exists on disk. If the database exists on disk, FREE TABLE may render the database unusable. Use REMOVE TABLE instead. Unlike FREE TABLE, REMOVE TABLE removes all references from the database to primary indexes, default values, and validation rules associated with the table.
 
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211640
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211671
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, но тут возникла ещё одна проблема, прежде чем вводить эту команду, надо проверить, есть ли эта связь или нет..., а потом вводить free table.
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211763
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со стороны таблицы:

Код: plaintext
1.
2.
USE MyTable
?CursorGetProp("DataBase")

Со стороны базы данных

Код: plaintext
?InDBC("MyTable","Table")

Правда, тут есть ряд тонкостей в идентификации таблицы и базы данных. Но, думаю, по ходу сам разберешся.
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211765
могу дать поц-ку чистки на низком уровне - но это не для слабонервных
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211801
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо это сделать в программе...
Приходит таблица, есть два варианта, либо она со связью, либо без...
Если у неё есть связь (use mytable и тут начинается про link), но прежде чем использовать команду use table и просматривать свойства, эту связь надо убрать...но опять же в программу не введёшь
Free table
use mytable
Потому что связи может и не оказаться...поэтому до открытия таблицы и использования Free table, надо узнать, есть ли эта связь...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211813
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е.
if функция определения связи(есть связь)
Free table
endif
use mytable
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211828
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Function ERASEBYTEINSTRU
Lparameters FULLCTABLENAME, ISMODIDBFFILE
If Empty(FULLCTABLENAME)
	Return .F.
Endif
DBFOPENHANDLE = Fopen(FULLCTABLENAME,  12 )
If DBFOPENHANDLE< 0 
	Return .F.
Endif
= Fseek(DBFOPENHANDLE,  27 )
CDXMEMODBCBYTE = Fread(DBFOPENHANDLE,  1 )
If Asc(CDXMEMODBCBYTE)>= 4  .And. ISMODIDBFFILE=.T.
	NEWCDXMEMODBCBYTE = Chr(Asc(CDXMEMODBCBYTE)- 4 )
	= Fseek(DBFOPENHANDLE,  27 )
	= Fwrite(DBFOPENHANDLE, NEWCDXMEMODBCBYTE)
Endif
ISINTABLECHR13 = .F.
For FORFSCAN =  1  To  10000 
	If Fread(DBFOPENHANDLE,  1 )=Chr( 13 )
		ISINTABLECHR13 = .T.
		Exit
	Endif
Endfor
If ISINTABLECHR13=.T.
	If ISMODIDBFFILE=.T.
		Fwrite(DBFOPENHANDLE, Replicate(Chr( 0 ),  263 ))
		= Fclose(DBFOPENHANDLE)
	Else
		DBFLINKTODBC = Fread(DBFOPENHANDLE,  263 )
		= Fclose(DBFOPENHANDLE)
		Return DBFLINKTODBC
	Endif
Else
	= Fclose(DBFOPENHANDLE)
	Return .F.
Endif
Return .T.
Endfunc


для того чтобы узнать не юзая и не открывая контейнер БД
необходимо в заголовке определить наличие привязки - как это сделать можно понять из
показанного примера

структура заголовка дбф - в хелпе к фоксу
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211835
позови

так

ERASEBYTEINSTRU('полный путь + имя')
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35211863
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ERASEBYTEINSTRU('полный путь + имя'), передаётся один параметр, а принимается два, а второй параметр это что?
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212072
а 2-й - это чтобы связь грохнуть

если туда передашь истину
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212184
Погодин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а INDBC() для проверки не подходит ?
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212232
А что происходит при использовании Free table БЕЗ проверки наличия связи? Ругается?
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212233
попробую предположить
что как раз у вопрошавшего и нет контейнеров,
т.е. к нему поступают откуда-то файлы и их необх-мо
отвязать

2 q1w1e1
при отвязке потеряются имена если таковые имелись (более 10 символов)

функ-я, которую я Вам показал
применялась мной успешно для восстановления испорченных контейнеров
+ восстановление структуры и индексов,
поэтому приходилось в случае необходимости от котейнера все отвязать, проверить,
и правильно все назад положить
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212249
+ ссылочка
по теме
http://www.sql.ru/forum/actualthread.aspx?tid=411139&hl=isintablechr13
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212377
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 12345вышелзайчикпогулять

Для поиска первого байта со ссылкой на контейнер базы данных вместо "бесконечного" перебора можно считать значение 8 и 9 байтов (начало собственно данных) и из полученного значения отнять 264 (263 байта ссылка на контейнер и 1 байт завершения заголовка)
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35212423
не спорю,
но Вы упустили момент того, что
код писался при царе горохе
код делался для порушенных БД и таблиц,
так, что при некотор.ситуациях происходит смещение
и адекватно найти конец можно только перебором,
что было протестировано на многих БД Мск,
полет был гарантированный и управляемый

+ это я и не отрицал если Вы посмотрите ссылку
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213672
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По правде говоря, я не совсем понимаю предназначение базы данных (контейнера таблиц), ведь все хранимые процедуры, отношения(не путать с табл.), тригеры(программы по проверки вставки-удаления) и т.д., хранятся в мемо полях этого контейнера, но
1. программы(тригеры, хранимые процедуры) лучше хранить и компилировать в prg-файле, так как он затем компилируется в программу
2. всё равно программа начиная работу, начинает проверять, если такая таблица, нет табл., создаётся структура табл...., есть ли такой индекс, нет - создаётся индекс, отношение также проверяется и т.д. , создаётся всё, что нужно для работы программы...
но может я не прав...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213682
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: q1w1e1
> По правде говоря, я не совсем понимаю предназначение базы данных
> (контейнера таблиц), ведь все хранимые процедуры, отношения(не путать с
> табл.), тригеры(программы по проверки вставки-удаления) и т.д., хранятся в
> мемо полях этого контейнера, но
> 1. программы(тригеры, хранимые процедуры) лучше хранить и
> компилировать в prg-файле, так как он затем компилируется в программу

Тригеры и прочие ХП должны быть НЕРАЗДЕЛЬНЫ с данными. Ведь они
предназначенны для контроля целостности.
И не важно чем ты пытаешься изменить эти данные. Программой или просто
открыв таблицу в Фоксе.

Естественно от низкоуровнего доступа наличие ХП не спасет.


> 2. всё равно программа начиная работу, начинает проверять, если такая
> таблица, нет табл., создаётся структура табл...., есть ли такой индекс,
> нет - создаётся индекс, отношение также проверяется и т.д. , создаётся
> всё, что нужно для работы программы...

Наличие таблицы - да - задача программы, ведь именно этой программе нужна та
или иная таблица. А вот проконтролировать ссылочную целостность - это к
отдельно взятому модулю не имеет никакого отношения. Это общий вопрос для
всех программ, работающих с ДАННЫМ КОНКРЕТНЫМ набором данных. Естественно
логичнее всего повешать такой контроль на саму базу данных.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213686
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ввод, удаление и изменение данных идёт через интерфейс например форм и открывая форму в методе Load(или до запуска формы в процедуре), уже начинается открытие таблиц и построение relation, котрая и контролирует целостность...и модуль получается гибким, и ты можешь эту программу изменить контроль отослать по электронке любому заказчику, а базу данных отсылать это уже проблема...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213697
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Ввод, удаление и изменение данных идёт через интерфейс например форм
> и открывая форму в методе Load(или до запуска формы в процедуре), уже
> начинается открытие таблиц и построение relation, котрая и контролирует
> целостность...и модуль получается гибким, и ты можешь эту программу
> изменить контроль отослать по электронке любому заказчику, а базу данных
> отсылать это уже проблема...

Ты не отделяешь котлет и мух!!!

Целостность данных и ссылочная целостность - это задача базы данных. Бизнес
логика - это задача приложения.

Отослать упакованный (pack, а затем rar) контейнер - не вижу никаких
проблем!!!


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213699
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Отослать упакованный (pack, а затем rar) контейнер - не вижу никаких
> проблем!!!

Это раз. А второе - бизнес логика может меняться довольно таки часто, а вот
логика отслеживания целостности данных - только при добавлении новой
таблицы. (Ну или если сразу не сделал грамотно, то конечно.... )


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213709
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
процедура по проверке целостности данных одна ....а вот где она будет хранится в контейнере мемо поля(тригер), который постоянно ломается или в текстовом файле программы, который независим от контейнера это и есть мобильность и гибкость...ввода и проверки....которую можно применять над любыми совокупностями таблиц, а не зашитыми жёстко в контейнере только для данных таблиц контейнера...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213718
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> процедура по проверке целостности данных одна ....а вот где она будет
> хранится в контейнере мемо поля(тригер), который постоянно ломается или в
> текстовом файле программы, который независим от контейнера это и есть
> мобильность и гибкость...ввода и проверки....которую можно применять над
> любыми совокупностями таблиц, а не зашитыми жёстко в контейнере только для
> данных таблиц контейнера...

Если программа маленькая - ну может быть и то с большой натяжкой!!!!

Скажем, иногда приходится в базе ковыряться руками и попутно что-то менять.
Будь процедура в отдельном файле - я бы про нее забвал.
А так ХП отрабатывают автоматом и, в зависимости от того, под кем я работаю
с таблицами (админ /не админ) какие-то вещи позволяет делать с
предупреждениями, а критичные даже под админом запрещает.

Самое прикольно. что с при работе с данными напрямую при наличии грамотных
ХП - правил и тригерров, практически не возможно поломать данные, даже
если по запарке сделал что-нить не то, естественно касатся только критичных
вещей.

Например у меня невозможно удалить показания счетчика, если на основании их
уже выставлен счет абоненту. И хоть ты руками удаляй, хоть из программы - не
важно. Отработают тригеры и привет!

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


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


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