powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать связь с базой данных
33 сообщений из 33, показаны все 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
Убрать связь с базой данных
    #35213719
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> процедура по проверке целостности данных одна ....а вот где она будет
> хранится в контейнере мемо поля(тригер), который постоянно ломается

Ни разу не ломался контейнер.

А на случай поломки существуют backUp`ы - без которых никак не обойтись даже
на супер пупер надежном железе!


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213824
2 Galyamov Rinat

авторНи разу не ломался контейнер.

ну это проблема отсутствия опыта
(проблем очень много), иногда при опр-х шаманствах
контейнер прекрасно валится в дизайнере

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

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

(вот так, и всегда находятся любители переписать файлы по верху)

а теперь представьте, что у Вас 100 пользователей разбросаны
по всей Мск и Вам необходимо сист-ки обновлять стр-ру таблиц.

тогда и возникло решение хранения доп.словаря
в спец. месте контейнера + создание процедуры проверки
стр-ры и целостности таблиц и + создание интеллекта,
который орал и объяснял ....

любовь или не любовь вопрошавшего к БД -
это также отсутствие опыта подобных разработок +
отсутствия хороших примеров реализации + нет хороших учителей
для начала необходимо поискать на просторах этого сайта или др.
литературу по этой теме и почитать для чего это нужно.
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213831
вот пример, чтобы не быть голословным
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213916
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> автор
> Ни разу не ломался контейнер.
>
>
> ну это проблема отсутствия опыта
Ну я бы не сказал.
Проблема отсутствия плохого опыта - может и да.

> скопируйте контейнер + таблицы куда - нибудь
> откроте контейнер и сдвинь очередность полей
> скопируйте назад контейнер - посмотрите результат

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

> (вот так, и всегда находятся любители переписать файлы по верху)
Еще раз - alter table и нет проблем.

> а теперь представьте, что у Вас 100 пользователей разбросаны
> по всей Мск и Вам необходимо сист-ки обновлять стр-ру таблиц.
И еще раз: Еще раз - alter table и нет проблем. :)

Давайте отнесем этот вопрос к разделу религиозных. Т.к. при наличии прямого
доступа к файлам dbf их не спасут никакие тригерры.


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

Сейчас потихоньку переползаю на MSSQL. Вот бы я и сейчас использовал ваши
подходы - всю логику по целостности данных зашивал в клиента...


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213956
автор
Записать пару символов и
говорить, что dbf - это плохо


еще раз попытаюсь

существуют ситуации
(особенно при наличии большого числа пользователей - копий софта),
когда Вы точно не сможете предугадать даже не стр-ру таблиц (она будет идентична,
но будут местами изменена очередность полей - по различным причинам)
вот в этих ситуациях Вы не сможете просто копировать контейнер

далее,
альтер табле и так далее Вам не помогут если Вам необходимо
проехать 2 часа к клиету, а это для Мск к прим. время проезда
от Бутова в Митино

поэтому Ваше высказывание
авторНи разу не ломался контейнер.
для меня ложное и это Ваше мнение, основанное
на Вашем опыте.

мой опыт мне подсказывает,
что развалить БД - это очень просто,
и открывать ее в редакторах и удалять байты не нужно
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35213999
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, где появляется трафик, следовательно надо уже применять клиент-сервер, и для этого надо брать продукты по уровню выше VFP, а VFP использовать как клиент....но очень много средних фирм, где и руководитель, бух, юрист и программист всё в одном лице...ну и что там городить Клиент -сервер и базыданных...я думаю FoxBase III+фирмы Astonte Tate и получил массове применение, потому что не было академических теорий нормализации, концептуальной модели, целостности данных и даже чтоб работать в этих СУБД, не надо было читать мемуары Дейта...
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35214105
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> вот в этих ситуациях Вы не сможете просто копировать контейнер
Еще раз говорю. что копировать совершенно не обязательно!!!!


> далее,
> альтер табле и так далее Вам не помогут если Вам необходимо
> проехать 2 часа к клиету
А раскажите ка мне, для чего вы к нему собираетесь ехать?
Alter table спокойно выполняется и в коде.

> поэтому Ваше высказывание
> автор
> Ни разу не ломался контейнер.
> для меня ложное и это Ваше мнение, основанное
> на Вашем опыте.

Точно. Именно на моем опыте. Именно так и делаю. Alter table, т.к.
подменивать рабочие базы - это дурь. Данные в каждой копии свои. Разве что у
вас есть один на всех статичный справочник...

Если надо передать изменения в справочнике - тоже append insert update
delete как раз для этого и существуют.
Один раз прописали импорт / экспорт и контейнер рушиться не будет


> мой опыт мне подсказывает,
> что развалить БД - это очень просто,
> и открывать ее в редакторах и удалять байты не нужно
достаточно просто подложить ей свинью в виде "ЧУЖОЙ" для нее таблицы с таким
же названием файла!!!



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Убрать связь с базой данных
    #35214132
давайте прекратим разговор

извините беседа не получается

когда Вы столкнетесь с поддержкой 50-ти пользователей,
Вы поймете в чем проблема

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

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


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