powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно наивный вопросик
41 сообщений из 41, показаны все 2 страниц
Можно наивный вопросик
    #34191040
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос глупый но в конце рабочего дня вхожу в ступор:
как выбрать значение из поля таблицы в переменную по условию?
select поле from таблица where условие into переменная не прокатывает

Если я чайник, я с этим согласен:-)
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34191055
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
select <field> from <yourtable> where <condition> into array <yourvar>
?<yourvar>
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34191611
BMJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMJ
Гость
А просто: переменная=полетаблицы, с использованием IIF,ICASE прокатит?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34191625
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Легко и не напрягаясь.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34191666
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PyroTechnicВопрос глупый но в конце рабочего дня вхожу в ступор:
как выбрать значение из поля таблицы в переменную по условию?
select поле from таблица where условие into переменная не прокатывает

Если я чайник, я с этим согласен:-)

select не может не прокатывать. Это как крокодилы не летают. Собственно говоря, IIF(,,) и where в запросе - одно и то-же.

select * from Table where Pole='abcd' into cursor MyCur
sele MyCur
&& Если требуется перебор
scan

MyVar = Pole
.... что-то делаем
endscan
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204648
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть я понял, просто выбрать значение поля по условию в переменную нельзя, надо как-то изгаляться, так?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204708
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicто есть я понял, просто выбрать значение поля по условию в переменную нельзя, надо как-то изгаляться, так?
Скорее всего, Вы не совсем точно представляете себе, что Вы имеете и что хотите получить.
Результатом запроса в общем случае является несколько строк, поэтому сохранить его можно только в массиве, а не в переменной, как и указал Вам проходящий.

Если по выбранному Вами условию будет выбрана лишь одна строка, то и результирующий массив будет состоять лишь из одного элемента. В FoxPro к первому элементу массива можно обращаться по имени массива без индекса, т.е. как к переменной. Что Вы и хотели получить.

Но если Вы уверены, что Вашему условию удовлетворяет лишь одна запись, проще воспользоваться командами LOCATE, SEEK или функцией SEEK().

С уважением.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204771
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо fox_vik, успокоил
вообщем строку выбрал, дальше новый глупый вопрос (может быть)
строка есть путь. как его задать я понял, на всякий случай, если не прав - исправьте:

SET PATH TO FULLPATH(v_array)

Теперь дальше. в этом каталоге находятся таблицы, сформированные при помощи foxpro2.6, карочь в них нет указания на кодовую страницу. при их открытии фокс про эту страницу спрашивает. таблиц 39. причем по замыслу приложения они будут постоянно меняться (в смысле удаляться, а на их место копироваться новые, но такие же). Как убрать этот запрос, подскажите лабуху:-))
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204773
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще вопрос:
а можно путь из массива использовать в selecte без предварительного set path
что-нибудь типа select * from v_array\table?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204779
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicкарочь в них нет указания на кодовую страницу. при их открытии фокс про эту страницу спрашивает. таблиц 39. причем по замыслу приложения они будут постоянно меняться (в смысле удаляться, а на их место копироваться новые, но такие же). Как убрать этот запрос, подскажите лабуху:-))
1. Нужен обязательно файл config.fp где была бы указана кодовая таблица...

CODEPAGE=866

(но может и 1251 в зависимости от того, что Вам надо)

Этот файл должен быть там откуда стартует Ваше приложение...
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204781
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicи еще вопрос:
а можно путь из массива использовать в selecte без предварительного set path
что-нибудь типа select * from v_array\table?
Этот вопрос я не понял...
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204783
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
положил туда (где файлы проекта), перезапустил фокс. спрашивает все равно. может из-за того, что пока проект? или от того что фокс 9-й?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204786
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch PyroTechnicи еще вопрос:
а можно путь из массива использовать в selecte без предварительного set path
что-нибудь типа select * from v_array\table?
Этот вопрос я не понял...
Ну в смысле мы можем написать select * from c:\temp\table.dbf?
а как сделать чтобы в запрос вместо жесткого пути к таблице подставлялся путь из переменной?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204789
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicи еще вопрос:
а можно путь из массива использовать в selecte без предварительного set path
что-нибудь типа select * from v_array\table?В понимании ошибка. Прежде чем использовать команду SELECT... таблицу необходимо открыть в рабочей области FoxPro. Для этого используется команда USE ... в которой и можно (повторяю можно) использовать прямой путь. Но лучше путь до таблиц прописать в CONFIG.FPW - файле строкой SET PATH ... (об этом много говорилось), либо использовать команду SET PATH и тогда можно будет использовать команду USE в которой просто указывать имя таблицы (на мой взгляд это удобнее). И так теперь таблица открыта. Вот теперь можно задавать выборку информации с помощью команды SELECT ... в которой будет использоваться только что открытая таблица.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204793
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь ошибся я!!!
У меня сработало:
Код: plaintext
SELECT * FROM E:\D\КЛАДР\base\DOMA.dbf
и выборка прошла.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204798
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicСпасибо fox_vik, успокоил
вообщем строку выбрал, дальше новый глупый вопрос (может быть)
строка есть путь. как его задать я понял, на всякий случай, если не прав - исправьте:

SET PATH TO FULLPATH(v_array)
Если Вы используете в последующих обращениях к таблицам их полный путь, то использовать SET PATH TO нет необходимости. Кроме того, SET PATH TO без ADDITIVE отменит предудущие команды SET PATH TO

PyroTechnicТеперь дальше. в этом каталоге находятся таблицы, сформированные при помощи foxpro2.6, карочь в них нет указания на кодовую страницу. при их открытии фокс про эту страницу спрашивает. таблиц 39. причем по замыслу приложения они будут постоянно меняться (в смысле удаляться, а на их место копироваться новые, но такие же). Как убрать этот запрос, подскажите лабуху:-))

Убрать вопрос можно командой SET CPDIALOG OFF

На компе, где у Вас установлен VFP9 в папке :\Program Files\Microsoft Visual FoxPro 9\Tools\CPZero\ есть файл cpzero.prg. Включите его в проект.
Команда DO cpzero WITH lcFileName,866 установит в таблице, полный путь которой хранится в lcFileName, русскую досовскую кодировку. После этого, даже если в config.fpw будет установлена CODEPAGE=1251, VFP будет правильно читать досовскую таблицу.
Т.е. каждый раз перед первым открытием досовской таблицы или ее использованием в SELECT выполните для нее:
SET CPDIALOG OFF
DO cpzero WITH lcFileName,866
и она откроется без вопросов и с правильной кодировкой. Эта кодировка сохраница в таблице и после ее закрытия.

PyroTechnicи еще вопрос:
а можно путь из массива использовать в selecte без предварительного set path
что-нибудь типа select * from v_array\table?

Можно select * from (v_array+"\tablename.dbf")
либо select * from (v_array+"\"+lcTableName), если имя таблицы хранится в переменной. Естественно, пути и имена должны быть без конечных/начальных незначащих пробелов.
Правильнее будет select * from (ADDBS(v_array)+lcTableName).

С уважением.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204799
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать макроподстановку:
Код: plaintext
1.
2.
m.v_path = "E:\D\КЛАДР\base\"
m.my_cmd = "SELECT * FROM " + m.v_path + "DOMA.dbf"
&my_cmd
Работает.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204808
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот же проблема...
Ну и попробуй сам! Что мешает?
Код: plaintext
select * from c:\temp\table.dbf
Хочешь переменную? Пиши переменную!
Код: plaintext
1.
x="c:\temp\table.dbf"
select * from (x)
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204810
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри за неактуальность... Отвлекся...
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204817
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно:
Код: plaintext
1.
m.v_path = "E:\D\КЛАДР\base\"
SELECT * FROM (v_path + "DOMA.dbf")
Работает.
Но, на мой взгляд, чем это неудобно. Тем, что надо помнить перечень всех таблиц, которые учавствуют в SELECT-ах, а эти SELECT-ы могут быть сложными и использовать много таблиц. И по логике эти таблицы скорее всего надо закрывать, чтобы не засоряли. Поэтому я использую выше описанный метод и не заморачиваюсь. Т.е. если открыл таблицу командой USE, то обязательно ее закрываю. Как бы говоря операторные скобки (Begin ... End). Но на вкус и цвет друга нет. Так что каждый по своему.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204828
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир САМожно использовать макроподстановку:
Код: plaintext
1.
2.
m.v_path = "E:\D\КЛАДР\base\"
m.my_cmd = "SELECT * FROM " + m.v_path + "DOMA.dbf"
&my_cmd
Работает.
Такой вариант будет работать до тех пор, пока ни встретится путь с пробелами. Например, для
m.v_path=”C:\Program Files\”
VFP выдаст ошибку.

С уважением.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204841
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT * FROM ('E:\D\КЛАДР\base\21 12\DOMA.dbf')
И с пробелами работает.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204843
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
m.v_path = "'E:\D\КЛАДР\base\21 12\"
m.my_cmd = "SELECT * FROM " + m.v_path + "DOMA.dbf'"
&my_cmd
И с пробелами работает. Дополнительные кавычки нужны.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204845
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше использовать квадратные скобки
Код: plaintext
SELECT * FROM ([E:\D\КЛАДР\base\ 21   12 \DOMA.dbf])
или
Код: plaintext
1.
2.
m.v_path = "[E:\D\КЛАДР\base\21 12\"
m.my_cmd = "SELECT * FROM " + m.v_path + "DOMA.dbf]"
&my_cmd
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204935
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
новую плюху кидаю:-)
как заставить ADIR сработать на директории, отличной от текущей?
в параметрах ADIR есть только ArrayName:-(
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204956
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicновую плюху кидаю:-)
как заставить ADIR сработать на директории, отличной от текущей?
в параметрах ADIR есть только ArrayName:-(

Вам лень справку почитать? Там это ясно описано.


Код: plaintext
1.
2.
cFileSkeleton 
Specifies a file skeleton so you can store information about files with names or extensions that match a search criterion. For example, the criterion can be all tables, all text files, all files with names that have A as their first letter, and so on. Such general searches are done by including the wildcards * and ? in cFileSkeleton. A question mark represents a single character; an asterisk represents any number of characters. You can use any number of wildcards in any position within the file skeleton. 
You can specify a drive and/or directory to search for matching file names. If you don't specify a drive and a directory, Visual FoxPro places information about files in the current directory into the array. 
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34204960
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MegaBrain, я лох. Спасибо!!!:-))))))
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205099
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще вопросик

! (cmd /k) unrar e -o+ "(ADDBS(v_input)+v_arcname)" "(v_work)"

cmd /k - чтобы посмотреть что не так

в скобках должно получаться значение пути, оно так и получается, но в командную строку передается выражение как есть, без вычисления. Как заставить вычисляться?:-)
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205109
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicеще вопросик

! (cmd /k) unrar e -o+ "(ADDBS(v_input)+v_arcname)" "(v_work)"

cmd /k - чтобы посмотреть что не так

в скобках должно получаться значение пути, оно так и получается, но в командную строку передается выражение как есть, без вычисления. Как заставить вычисляться?:-)
Здесь такой фокус не пройдет.
Сначала сформируйте строку команды. Что-то вроде:
Код: plaintext
1.
lcCommand="! (cmd /k) unrar e -o '"+ ADDBS(v_input)+v_arcname+"'"
&lcCommand

С уважением.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205119
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, в Windows путь должен быть в двойных кавычках. Поэтому что-то вроде:
Код: plaintext
1.
lcCommand='! (cmd /k) unrar e -o "'+ ADDBS(v_input)+v_arcname+'"'
&lcCommand

Для примера у меня распаковка:
Код: plaintext
1.
2.
lcCommand="RUN /n "+gcStartPath+'WinRAR.exe e "'+tcFileName+'" "'+THIS.c_dr_temp_path+'"'
&lcCommand

С уважением.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205295
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox_vik GREAT THANKS!!!
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205410
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще глупый вопросик
нужно проверить присутствует значение из array среди значений поля из таблицы. Как лучше всего это сделать? пробовал так:
USE pack_content
FOR x=1 TO ALEN(v_dbfiles,1)
LOCATE FOR pack_content.file_name=RTRIM(v_dbfiles(x,1),'.DBF')
IF FOUND() then
? RTRIM(v_dbfiles(x,1),'.DBF')+" passed"
ELSE
? RTRIM(v_dbfiles(x,1),'.DBF')+" not passed"
ENDIF
ENDFOR
Выдает следующее: по первому значению массива - попадание, а дальше нет, потому что сравнение почему то идет только с первым значением из поля таблицы. Где не прав, подскажите?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205673
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, серьезно какой-то бред. Способ, который я нарисовал, четко работает с одной таблицей, но не работает с другой. не может ли это быть оттого что в таблице, где не работает, всего один столбец?:-(
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205706
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока все молчали, я проблему решил. нарисовалась новая: в цикле идет выборка из таблицы, которая при следующем цикле должна замениться другой (туда разархивируются зипы, см. выше)
как снять блокировку с этой таблицы, не дергая другие. есть какой-нибудь вариянт окромя CLOSE TABLES?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205726
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicЕще глупый вопросик
нужно проверить присутствует значение из array среди значений поля из таблицы. Как лучше всего это сделать? пробовал так:
USE pack_content
FOR x=1 TO ALEN(v_dbfiles,1)
LOCATE FOR pack_content.file_name=RTRIM(v_dbfiles(x,1),'.DBF')
IF FOUND() then
? RTRIM(v_dbfiles(x,1),'.DBF')+" passed"
ELSE
? RTRIM(v_dbfiles(x,1),'.DBF')+" not passed"
ENDIF
ENDFOR
Выдает следующее: по первому значению массива - попадание, а дальше нет, потому что сравнение почему то идет только с первым значением из поля таблицы. Где не прав, подскажите?
Для точного сравнения без учета расширения файла я бы cделал так:
Код: plaintext
LOCATE FOR UPPER(ALLTRIM(pack_content.file_name)) == UPPER(FORCEEXT(v_dbfiles(x, 1 ),''))
С уважением, Алексей.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205745
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, алексей. Нет дело было в том, что надо было добавить:
SELECT pack_content
Кто-нить может ответить на простенький вопрос по поводу закрытия таблиц?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205749
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблемма?
С уважением, Алексей
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205756
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
См. выше. открываю таблицу запросом, потом не могу закрыть чтоб другие не дергать, а надо. Уверен, что решается просто
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34205772
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicСм. выше. открываю таблицу запросом, потом не могу закрыть чтоб другие не дергать, а надо. Уверен, что решается просто
SELECT ... FROM .. INTO CURSOR ... NOFILTER
Добавь после имени курсора слово NOFILTER
С уважением, Алексей.
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34206111
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Алексей
нет не помогает. при селекте таблица захватывается фоксом, и удалить физически файл я уже не могу. таблица в базе не участвует. нужна ее перезапись неоднократно. может надо как-то с FOPEN-FCLOSE поиграться?
...
Рейтинг: 0 / 0
Можно наивный вопросик
    #34206225
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnicto Алексей
нет не помогает. при селекте таблица захватывается фоксом, и удалить физически файл я уже не могу. таблица в базе не участвует. нужна ее перезапись неоднократно. может надо как-то с FOPEN-FCLOSE поиграться?Как раз про это я и описывал выше. Если в SELECT-е участвует таблица которая не была специально открыта командой USE, конечно Fox ее откроет в свободной рабочей области (см. HELP по команде USE). Для освобождения рабочей области используется таже команда USE
Код: plaintext
USE IN <имя алиаса или имя таблицы>
И теперь удаляй файл, т.к. он откреплен от Fox-а. Конечно, если я правильно понял ситуацию. Надо конкретно задавать вопросы.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно наивный вопросик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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