Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать связь с базой данных / 25 сообщений из 33, страница 1 из 2
25.03.2008, 12:00
    #35211605
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
(VFP9) Есть таблица, как проверить, есть ли у неё связь с базой данных, а если есть, то убрать эту связь....
...
Рейтинг: 0 / 0
25.03.2008, 12:07
    #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
25.03.2008, 12:10
    #35211640
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
спасибо...
...
Рейтинг: 0 / 0
25.03.2008, 12:18
    #35211671
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
Да, но тут возникла ещё одна проблема, прежде чем вводить эту команду, надо проверить, есть ли эта связь или нет..., а потом вводить free table.
...
Рейтинг: 0 / 0
25.03.2008, 12:42
    #35211763
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
Со стороны таблицы:

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

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

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

Правда, тут есть ряд тонкостей в идентификации таблицы и базы данных. Но, думаю, по ходу сам разберешся.
...
Рейтинг: 0 / 0
25.03.2008, 12:42
    #35211765
Убрать связь с базой данных
могу дать поц-ку чистки на низком уровне - но это не для слабонервных
...
Рейтинг: 0 / 0
25.03.2008, 12:51
    #35211801
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
Мне надо это сделать в программе...
Приходит таблица, есть два варианта, либо она со связью, либо без...
Если у неё есть связь (use mytable и тут начинается про link), но прежде чем использовать команду use table и просматривать свойства, эту связь надо убрать...но опять же в программу не введёшь
Free table
use mytable
Потому что связи может и не оказаться...поэтому до открытия таблицы и использования Free table, надо узнать, есть ли эта связь...
...
Рейтинг: 0 / 0
25.03.2008, 12:54
    #35211813
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать связь с базой данных
т.е.
if функция определения связи(есть связь)
Free table
endif
use mytable
...
Рейтинг: 0 / 0
25.03.2008, 12:57
    #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
25.03.2008, 12:58
    #35211835
Убрать связь с базой данных
позови

так

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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

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


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

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

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

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

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

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


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


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