|
|
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Как проверить Таблицу? Free или не Free не открывая БД. Или как при выполнении FREE TABLE игнорировать сообщение об ошибке 1558 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 13:18 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Если не вдаваться в подробности, зачем вообще освобождать таблицу из БД в программе, то как и любую другую ошибку можно обрабатывать ON ERROR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 15:14 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Вот нашел функцию. LPARAMETERS tcTableFullName LOCAL lcDbcFullName, lcB1, lcB2, lnOffset, lcBuffer lnFh1 = FOPEN(tcTableFullName) * Make sure that's VFP table lcBuffer = FREAD(lnFh1, 1) IF ASC(lcBuffer) <> 0x30 * not VFP table lcDbcName = "***NOT VFP TABLE***" RETURN lcDbcName ENDIF * Position of the first data record - 2 bytes = FSEEK(lnFh1, 8, 0) lcB1 = FREAD(lnFh1,1) lcB2 = FREAD(lnFh1,1) * Offset to the beginning of the DBC name lnOffset = ASC(lcB2) * 256 + ASC(lcB1) - 263 = FSEEK(lnFh1, lnOffset, 0) * The DBC name or 0x00's if it's free table lcBuffer = FREAD(lnFh1, 263) IF ASC(lcBuffer) = 0 * free table lcDbcName = "***FREE TABLE***" ELSE * table in dbc lcDbcName = LEFT( lcBuffer, AT( CHR(0), lcBuffer) - 1) ENDIF = FCLOSE(lnFh1) RETURN lcDbcName ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 15:20 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
INDBC() не подойдет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 15:30 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
ArshinВот нашел функцию. ... Если хотите понять, что именно делает данная функция и почему область ее действия довольно ограничена (есть ошибки), то почитайте описание структуры файлов DBF с которыми работает FoxPro Структура табличного файла (.dbc, .dbf, .frx, .lbx, .mnx, .pjx, .scx, .vcx) PS: статья в кодировке Windows-1251. Данная ссылка автоматом устанавливает кодировку UTF-8, поэтому надо будет изменить текущую кодировку страницы вручную. Правой кнопкой мыши на тексте статьи - Кодировка - Кирилица (Windows) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2007, 01:01 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Вот еще вычитал в книжке :-) ? CURSORGETPROP('database','mytable') Если таблица принадлежит БД, то выдаст имя БД, если таблица свободная, вернет пустую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 10:12 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Задача проверить не открывая БД или таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 23:04 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
ArshinЗадача проверить не открывая БД или таблицу. А разве приведенная Вами функция не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 23:08 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Вряд ли можно что-то узнать о файле, не открывая его каким-либо способом! ;-) Хотя, если файл "чужой", то один способ таки есть - спросить разработчика! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 23:11 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
Подходит! но Владимир М сомневается, а по его ссылке я еще не заходил. Может еще, кто вариант подбросит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 23:14 |
|
||
|
Как проверить Таблицу? Free или не Free
|
|||
|---|---|---|---|
|
#18+
При создании новых таблиц в Visual FoxPro значение нулевого байта устанавливается в одно из трех значений: 0x30, 0x31 или 0x32 в зависимости от факта использования соответствующих типов полей. В случае добавления, удаления или изменения полей произойдет и модификация данного байта, если необходимо. 0x30 Visual FoxPro 0x31 Visual FoxPro, поддержка свойства autoincrement 0x32 Visual FoxPro, поддержка полей типа Varchar, Varbinary, или Blob Это значит, что приведенную функцию надо слегка модифицировать. Вместо куска Код: plaintext 1. 2. 3. 4. 5. 6. Надо написать так: Код: plaintext 1. 2. 3. 4. 5. 6. Правда, свойство AutoIncrement было введено только в версии VFP8, а поля типа VarChar, VarBinary и Blob - в VFP9. Это значит, что если таблицы были созданы в версии от VFP3 до VFP7 включительно, то приведенный код подойдет без модификаций. В остальном, все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2007, 00:28 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34328670&tid=1589884]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 364ms |

| 0 / 0 |
