powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Директива процессора
13 сообщений из 13, страница 1 из 1
Директива процессора
    #34487403
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В include-файле обьявляю переменную:

#DEFINE C_TAB_LVROOT "lvRoot"

которая хранит имя таблицы. В методе формы, в которую включен этот файл, делаю запрос с использованием даной переменной:

SELECT * FROM (DEFINE C_TAB_LVROOT), TabOther WHERE &DEFINE C_TAB_LVROOT..bitmap=TabOther.bitmap

при сохранении получаю ошибку неизвестная команда. Как побороть?
...
Рейтинг: 0 / 0
Директива процессора
    #34487433
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#DEFINE C_TAB_LVROOT 'lvRoot'

local lcCmd
text to lcCmd noshow textmerge pretext  7 
	SELECT * FROM <<C_TAB_LVROOT>>, TabOther WHERE <<C_TAB_LVROOT>>.bitmap=TabOther.bitmap
endtext

&lcCmd
...
Рейтинг: 0 / 0
Директива процессора
    #34487509
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хитро...
Но очень громосдко, это для каждого запроса надо писать скобки text... endtext. По другому никак нельзя? Тогда придётся отказыватся от этих переменных памяти, имя таблицы зашивать в программу, правда если оно завтра изменится, надо будет искать по всей програме и изменять.
...
Рейтинг: 0 / 0
Директива процессора
    #34487532
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для локальных таблиц пойдет так

Код: plaintext
1.
2.
#DEFINE C_TAB_LVROOT 'lvRoot'
SELECT * FROM C_TAB_LVROOT t1, TabOther t2 WHERE t1.bitmap=t2.bitmap
...
Рейтинг: 0 / 0
Директива процессора
    #34487606
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то что надо... работает на ура... я так понял, что так пойдёт только для курсоров (локальных таблиц), для dbf-ок нет? В даном случае переменная хранит имя КАД-а.
Хочу ещё спросить для общего развития. К свойству формы (ThisForm.oCAD) привязан КАД. Делаю тот же запрос (с предыдущего топика), только вместо переменно памяти свойство формы:

SELECT * FROM (ThisForm.oCAD.Alias), TabOther WHERE &ThisForm.oCAD.Alias..bitmap=TabOther.bitmap

так ругается. Если сделать через переменную:

cX=(ThisForm.oCAD.Alias)
SELECT * FROM (ThisForm.oCAD.Alias), TabOther WHERE &cX..bitmap=TabOther.bitmap

то работает. Первый вариант можно исправить, или он не проходит?
Большое спасибо!!!
...
Рейтинг: 0 / 0
Директива процессора
    #34487696
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просьба, если Вы начали работать с классами и объектами
забудьте макроподстановку как страшный сон
Код: plaintext
1.
2.
3.
local lcCadAlias
lcCadAlias=ThisForm.oCAD.Alias
SELECT * FROM (lcCadAlias) t1, TabOther t2 WHERE t1.bitmap=t2.bitmap


я немного не понимаю зачем из када
что-то дергать в доп.курсор. Опишите для чего Вы хотите это сделать??


не проще ли в самом каде подменить условие where
и сделать курсоррефреш???

для каких целей Вы поднимаете КАД
а затем селектом переливаете данные в доп.курсор???
...
Рейтинг: 0 / 0
Директива процессора
    #34487795
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере хранится информация: "Архивы", "Обьекты", "Пользователи", "Тематические параметры" это всё отдельные таблицы.
На основе этого строится дерево (TreeView), население которого происходит с одной таблицы. По этому я и собираю всё в кучу.
...
Рейтинг: 0 / 0
Директива процессора
    #34487886
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немного непонятно затем все собирать

ну и пусть все лежит в отдельных кадах
для построения дерева не важно, чтобы это был один курсор
а кей хитрый можно сделать или таг,
для того, чтобы затем отыскать нужный курсор и запись
...
Рейтинг: 0 / 0
Директива процессора
    #34487942
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда собираю в один курсор, для каждой порции данных (отдельного КАД-а) проптсываю в поле tbl имя КАД-а. Если в общем выглядит это так:

*--- Images
#DEFINE C_PATHIMG_ARCHIVES ".\Graphics\archives.ico"
#DEFINE C_PATHIMG_USERGROUPS ".\Graphics\usergroups.ico"
#DEFINE C_PATHIMG_USERS ".\Graphics\users.ico"
#DEFINE C_PATHIMG_PARAMSGRP ".\Graphics\paramsgrp.ico"
#DEFINE C_PATHIMG_PARAMSTBL ".\Graphics\paramstbl.ico"

*--- Tables
#DEFINE C_TABLE_LVROOT "lvRoot"
#DEFINE C_TABLE_ARCHIVES "Archives"
#DEFINE C_TABLE_SSECTIONS "Ssections"
#DEFINE C_TABLE_USERGROUPS "UserGroups"
#DEFINE C_TABLE_USERS "Users"
#DEFINE C_TABLE_GRPINGRP "Grpingrp"
#DEFINE C_TABLE_PARAMSGRP "ParamsGrp"
#DEFINE C_TABLE_PARAMSTBL "ParamsTbl"

DEFINE CLASS Form1 AS FORM
Name=Form1

PROCEDURE Init
.TreeView1.OBJECT.ImageList=.ImageList1.OBJECT

WITH This
IF !.opendbc() &&Создание КОД-ов
RETURN .F.
ENDIF

.ImageList() &&Заполнение ImageList
.UnionAll() &&Обьединение КАД-ов в один курсор

ENDWITH
ENDPROC

PROCEDURE ImageList
WITH This
.Imagelist1.OBJECT.ListImages.Clear

SELECT rootimage, bitmap FROM (C_TABLE_LVROOT) INTO CURSOR CiRoot
SCAN
COPY MEMO CiRoot.rootimage TO (CiRoot.bitmap)
ENDSCAN
SELECT section_img, bitmap FROM (C_TABLE_SSECTIONS) INTO CURSOR CiSsections
SCAN
COPY MEMO CiRoot.section_img TO (CiSsections.bitmap)
ENDSCAN

SELECT bitmap, LenTextAA(C_TABLE_LVROOT,10) AS tbl FROM CiRoot;
UNION ALL;
SELECT LenTextAA(C_PATHIMG_ARCHIVES,100), LenTextAA(C_TABLE_ARCHIVES,10) AS tbl FROM CiRoot WHERE RECNO()=1;
UNION ALL;
SELECT bitmap, LenTextAA([C_TABLE_SSECTIONS],10) AS tbl FROM CiSsections;
UNION ALL;
SELECT LenTextAA(C_PATHIMG_USERGROUPS,100), LenTextAA(C_TABLE_USERGROUPS,10) AS tbl FROM CiRoot WHERE RECNO()=1;
UNION ALL;
SELECT LenTextAA(C_PATHIMG_USERS,100), LenTextAA(C_TABLE_USERS,10) AS tbl FROM CiRoot WHERE RECNO()=1;
UNION ALL;
SELECT LenTextAA(C_PATHIMG_PARAMSGRP,100), LenTextAA(C_TABLE_PARAMSGRP,10) AS tbl FROM CiRoot WHERE RECNO()=1;
UNION ALL;
SELECT LenTextAA(C_PATHIMG_PARAMSTBL,100), LenTextAA(C_TABLE_PARAMSTBL,10) AS tbl FROM CiRoot WHERE RECNO()=1;
INTO CURSOR CiAll

SELECT RECNO() AS imageid, bitmap, tbl FROM CiAll INTO CURSOR CiAll01
SCAN
.Imagelist1.OBJECT.ListImages.Add(imageid,,LOADPICTURE(bitmap))
ENDSCAN
ENDWITH
ENDPROC

PROCEDURE UnionAll
SELECT rootname AS name, imageid, root_id AS tbl_id, tbl FROM C_TABLE_LVROOT t1, CiAll01 WHERE t1.bitmap=CiAll01.bitmap AND;
CiAll01.tbl=C_TABLE_LVROOT;
UNION ALL;
SELECT descriptio AS name, imageid, archive_id AS tbl_id, tbl FROM (C_TABLE_ARCHIVES), CiAll01 WHERE CiAll01.tbl=C_TABLE_ARCHIVES;
UNION ALL;
SELECT sectname AS name, imageid, section_id AS tbl_id, tbl FROM C_TABLE_SSECTIONS t2, CiAll01 WHERE t2.bitmap=CiAll01.bitmap AND;
CiAll01.tbl=C_TABLE_SSECTIONS;
UNION ALL;
SELECT name_group AS name, imageid, group_id AS tbl_id, tbl FROM (C_TABLE_USERGROUPS) t3, CiAll01 WHERE CiAll01.tbl=C_TABLE_USERGROUPS;
AND EXISTS(SELECT * FROM C_TABLE_GRPINGRP t4 WHERE t4.group_id=t3.group_id AND t4.ingroup_id=0 AND group_id>0);
UNION ALL;
SELECT fullname AS name, imageid, user_id AS tbl_id, tbl FROM C_TABLE_USERS t5, CiAll01 WHERE CiAll01.tbl=C_TABLE_USERS AND t5.user_id>0;
UNION ALL;
SELECT g_label AS name, imageid, group_id AS tbl_id, tbl FROM (C_TABLE_PARAMSGRP), CiAll01 WHERE CiAll01.tbl=C_TABLE_PARAMSGRP;
UNION ALL;
SELECT p_label AS name, imageid, param_id AS tbl_id, tbl FROM (C_TABLE_PARAMSTBL), CiAll01 WHERE CiAll01.tbl=C_TABLE_PARAMSTBL;
INTO CURSOR CiAll02

SELECT RECNO() AS id, * FROM CiAll02 INTO CURSOR CiAll03
ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
Директива процессора
    #34488204
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы можете объяснить, с какой целью Вы вообще используете директивы прекомпилятора в отношении имен файлов и таблиц?

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

Другими словами, даже если у Вас поменяются пути доступа или имена файлов, Вам все равно придется заново перекомпилировать все приложение. Вы хотите поставлять пользователю голые исходники вместе с FoxPro?
...
Рейтинг: 0 / 0
Директива процессора
    #34490641
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная програма будет использовтся внутри одного предприятия где есть постоянный програмист, который если шо может подключится. Директивы прекомпилятора я раньше не осползовал, счас увидел как в других программах они оиспользуются, решил попробовать у себя, может в данном месте их использование не совсем умесно. Я ещё не прочуствовал в чём соль использования директив прекомпилятор. Пока у меня понятие такое, что если например надо поменять имя файла или таблицы, то не надо шарить по всей программе и менять старое на новое, а только помень в Include-файле. А то что программу нужно будет перекомпелировать, об этом не догадывался, спасибо за информацию. Но в данном случае думаю, что это не сильно усугубляет ситуацию.
Конешно, хотелось бы програмировать правельно, используя инструменты VFP по их назначению, чтобы программы получались простые и понятные. Но пока от этого далёк, остаётся только стремится. Большую помощь на этом пути приносит общение в кругу програмистов, в часности на этом форуме.
Огромное всем спасибо! Правое дело делаете!!!
...
Рейтинг: 0 / 0
Директива процессора
    #34491240
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Директивы компилятора

Вместо "директивы компилятора" в этой статье надо читать "директивы ПРЕкомпилятора"
...
Рейтинг: 0 / 0
Директива процессора
    #34491918
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не перекомпилировать - стоит положить эти пременные в ini файли и считывать их при запуске программы .
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Директива процессора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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