powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно наивный вопросик
25 сообщений из 41, страница 1 из 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
25 сообщений из 41, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно наивный вопросик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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