powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопросы по поиску и отчету?
25 сообщений из 35, страница 1 из 2
Вопросы по поиску и отчету?
    #34432652
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) В среде DataEnvoirment отчета добавляю три таблицы.( 1 дочерняя). Связь сохраняется только между двумя. Почему?
2)По кнопке поиск хочу сделать выборку. Пишу:

IF (thisform.text3.Text!="")
SELECT файл.name;
FROM бд!файл;
WHERE файл.name=thisform.text3.Text;
INTO TABLE файл.dbf
SELECT файл
BROWSE
ENDIF

и ничего не отображается. Почему?

3) можно ли сделатьтак, чтобы выборка по запросу выводилась сразу в отчет? что для этого написаь?
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34432700
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Neta1) В среде DataEnvoirment отчета добавляю три таблицы.( 1 дочерняя). Связь сохраняется только между двумя. Почему?
Это как? Как именно "не сохраняется"?

Neta
2)По кнопке поиск хочу сделать выборку. Пишу:

IF (thisform.text3.Text!="")
SELECT файл.name;
FROM бд!файл;
WHERE файл.name=thisform.text3.Text;
INTO TABLE файл.dbf
SELECT файл
BROWSE
ENDIF

и ничего не отображается. Почему?
Любая строка при таком сравнении будет всегда равна пустой строке, поскольку при настройке SET EXACT OFF (это настройка по умолчанию) сравнение идет до истечения символов в более короткой строке. Т.е., в данном случае, сравнение не успеет начаться, как сразу же и закончится.

Сравнение символьной строки с пустой строкой так не производится. Для анализа символьного значения на "пустоту" используют функцию EMPTY()

Код: plaintext
1.
2.
IF Empty(thisform.text3.Text)=.F.
...
ENDIF

Кстати, надеюсь, Вы понимаете, чем отличается thisform.text3.Text от thisform.text3.Value? Text - это то, что видит пользователь на форме, а Value - это то, что физически будет записано. Это далеко не всегда одно и то же.

Кроме того, может и не сработать вот это условие

WHERE файл.name=thisform.text3.Text

Не потому, что оно не правильное, а потому, что синтаксический анализатор команды Select-SQL воспринимает конструкцию вида AAA.BBB как Имя_Таблицы.Имя_Поля читая ее справа-налево. Поэтому вполне вероятно сообщение об ошибке вроде "Column Text not found". Чтобы этого избежать необходимо присвоить значение переменной памяти и в Select-SQL использовать уже эту переменную

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lcValue
lcValue = thisform.text3.Text
IF Empty(m.lcValue)=.F.
	SELECT ... ;
	WHERE файл.name=m.lcValue ;
	...
ENDIF

Наконец, если результат запроса нужен для отчета, то нет смысла формировать постоянную таблицу (INTO Table). Логичнее сформировать курсор (временную таблицу)

Код: plaintext
1.
2.
3.
4.
SELECT ... ;
INTO CURSOR curTmp NOFILTER

select curTmp
BROWSE NOWAIT

Neta3) можно ли сделатьтак, чтобы выборка по запросу выводилась сразу в отчет? что для этого написаь?
Конечно. Именно так обычно отчеты и строятся.

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

Если отчет формируется в Default DataSession, то просто перед выполнением отчета формируется курсор. А если отчет формируется в Private DataSession, то курсор формируется в методе DataEnvironment.BeforOpenTable() отчета.
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34433395
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответ. "Поиск" заработал!!!=)))
1)По поводу как не сохраняется связь: В DataEnviroment при расположении туда 3-х таблиц не отображается одна из линии, которая характерезует связь между таблицами.
2) Как сделать так, чтобы при поиске сразу отображался отчет, а не временная таблица. Как сделать для этого отчет?
То есть, вот у меня есть отчет, в нем выбраны нужные мне поля из трех разных таблиц, где-то эти поля соединены в одну переменную. Когда я делаю запрос результат его выборки из трех таблиц помещается в одну (временную) и как теперь изменить переменные в отчете, чтобы на те же места выводились переменные из сводной таблицы.
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34434353
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Neta
1)По поводу как не сохраняется связь: В DataEnviroment при расположении туда 3-х таблиц не отображается одна из линии, которая характерезует связь между таблицами.
"Постоянные связи" в контейнере базы данных и "временные связи" в DataEnvironment - это "две большие разницы". У них разные задачи и способы создания.

Чем они отличаются, можно посмотреть здесь

Связи и отношения между таблицами

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

В общем случае, не имеет никакого значения есть или нет "постоянная связь" в контейнере базы данных к тому, какие "временные связи" будут настроены в DataEnvironment.

В DataEnvironment, если необходимо можно настроить или удалить нужные "временные связи". Для этого надо нажать левой клавишей мыши на поле в главной таблице и не отпуская, перетащить указатель мыши на индекс подчиненной. Т.е. связь от поля к индексу.

Но, по большому счету, связи в DataEnvironment формы, как правило, только мешают. Приводят к самым разнообразным глюкам и непониманиям. Обычно их как раз удаляют, если они настриваются автоматически.

Neta
2) Как сделать так, чтобы при поиске сразу отображался отчет, а не временная таблица. Как сделать для этого отчет?
То есть, вот у меня есть отчет, в нем выбраны нужные мне поля из трех разных таблиц, где-то эти поля соединены в одну переменную. Когда я делаю запрос результат его выборки из трех таблиц помещается в одну (временную) и как теперь изменить переменные в отчете, чтобы на те же места выводились переменные из сводной таблицы.
Делаете запрос, указав в качестве цели курсор, например

INTO CURSOR curReport NOFILTER

Затем строите обычный отчет, указывая в качестве источника данных для полей отчета поля из этого самого кусрора. В процессе работы сразу по завершению Select-SQL запускаете готовый отчет.

Код: plaintext
1.
2.
3.
SELECT ... INTO CURSOR curReport NOFILTER
select surReport
REPORT FORM MyReport.frx TO PRNTER PROMPT PREVIEW

Т.е. в самом отчете идет ссылка не на поля исходной таблицы, а на поля курсорая, который будет создан перед выполнением отчета. Имя курсора, естесственно, известно заранее, как и имена полей.
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34438200
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, запрос в отчет получился. Только небольшая проблема, в отчет выводит результат запроса три раза подряд (одно и тоже). В чем причина?

LOCAL lcValue
lcValue = thisform.text3.Text

IF Empty(m.lcValue)=.F.
SELECT DISTINCT файл.name, файл.disk, файл.sost, b.time, b.season, b.country, b.place, b.weather, a.road, a.r_road, a.move, a.prep, a.property, a.type_move;
FROM бд!файл INNER JOIN бд!погода b;
INNER JOIN бд!препятствия a;
ON a.idprep=файл.idprep;
ON b.idweather=файл.idweather;
WHERE файл.name=m.lcValue;
INTO CURSOR curReport NOFILTER
REPORT FORM i:\БД\Report\report1.frx TO PRNTER PROMPT PREVIEW

ENDIF
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34438279
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NetaБольшое спасибо, запрос в отчет получился. Только небольшая проблема, в отчет выводит результат запроса три раза подряд (одно и тоже). В чем причина?
Это значит, что вместо курсора отчету назначена другая главная таблица. Т.е. в отчете происходит сканирование не записей полученного курсора, а записей какой-то другой таблицы. Соответсвенно для каждой записи этой "другой" таблицы и выводится одна текущая запись полученного курсора.

Надо проверить следующее:

1) Если отчет вызывается из Grid, то первой командой надо увести фокус с Grid на любой другой объект формы. Хотя бы на ту кнопку, по нажатию которой отчет и запускается

Код: plaintext
1.
2.
3.
ThisForm.text3.SetFocus()
...
REPORT FORM ...


2) Убедится, что в DataEnvironment нет никаких курсоров. А если они необходимы, то в свойствах самого DataEnvironment должно быть пустое значение свойства DataEnvironment.InitialSelectedAlias

3) Теоретически, после выполнения команды Select-SQL текущей должна стать рабочая область того курсора, который формируется в результате этого запроса. Однако на всякий случай лучше это продублировать

Код: plaintext
1.
2.
SELECT ... CURSOR curReport NOFILTER
select curReport
REPORT FORM ...
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34438442
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, убрала из DataEnviroment отчета старые таблицы и все стало хорошо =))))
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34450222
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
REPORT FORM i:\БД\Report\report2.frx TO PRNTER PROMPT PREVIEW

Вопрос такой: при просмотре отчета отображается только первая страница, как сделать так, чтобы отображались все или можно было бы листать страницы?
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34450270
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, извините, нашла!!!=))))
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34457436
Jaroslav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, кто-нибудь может мне дать полезный совет, а именно: у меня есть база данных (задание:Таблица 1: код института, название института, фамилия ректора
Таблица 2: код института, название специальности, количество принятых на первый курс студентов, количество выпускников. Определить Количество специальностей в каждом институте)
в access состоящая из двух таблиц, я сделал 2 формы для каждой таблицы соответственно в visual basic ,добавил DATA , связал ее с таблицами, также расположил нужное количество textbox для отображения в них данных по каждой таблице, а теперь мне нужно Определить Количество специальностей в каждом институте. Кто-нибудь может подсказать как это сделать?
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34458049
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaroslavПрошу прощения, кто-нибудь может мне дать полезный совет, а именно: у меня есть база данных (задание:Таблица 1: код института, название института, фамилия ректора
Таблица 2: код института, название специальности, количество принятых на первый курс студентов, количество выпускников. Определить Количество специальностей в каждом институте)
в access состоящая из двух таблиц, я сделал 2 формы для каждой таблицы соответственно в visual basic ,добавил DATA , связал ее с таблицами, также расположил нужное количество textbox для отображения в них данных по каждой таблице, а теперь мне нужно Определить Количество специальностей в каждом институте. Кто-нибудь может подсказать как это сделать?
Код: plaintext
select Таблица1.КодИнститута, Таблица2.НазваниеИнститута, count(Таблица2.НазваниеСпециальности) from Таблица1 inner join Таблица2 on Таблица2.КодИнститута=Таблица1.КодИнститута
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34458102
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
select Таблица1.КодИнститута, Таблица2.НазваниеИнститута, count(Таблица2.НазваниеСпециальности) 
from Таблица1 
inner join Таблица2 on Таблица2.КодИнститута=Таблица1.КодИнститута
group by Таблица1.КодИнститута, Таблица2.НазваниеИнститута
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34459853
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой еще у меня вопрос: есть форма с текстовыми полями (около 15 штук), в которых пользователь задает параметры поиска, соответственно, поле может быть как заполнено, так и пусто. По не пустым полям осуществляеться выборка (запрос). Так вот, можно лм учесть проверку на пустоту в теле самого запроса, то есть обойтись без if (не пустое поле), то запрос... А то вариантов очень много.
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34459899
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТак вот, можно лм учесть проверку на пустоту в теле самого запроса, то есть обойтись без if (не пустое поле), то запрос... А то вариантов очень много.
Например так:

SELECT <чтото откудато> WHERE IIF(Empty(pole),.t.,pole=table_field)
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34464873
J
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J
Гость
Помогите! Вопрос: у меня есть 2 формы: на одной расположен data1 + textboxы в которых отображаются данные из базы данных access, на другой форме одна commandbutton и label7 для вывода в ней данных, по заданному заданию, вот кстати текст к command button :Private Sub Command1_Click()
Dim min As Integer
Dim i As Integer
Dim s As String
min = 32000
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
If min > Data1.Recordset.Fields(2).Value Then
min = Data1.Recordset.Fields(2).Value
s = Data1.Recordset.Fields(1).Value
End If
Data1.Recordset.MoveNext
Loop
Label7.Caption = Str(min) + " " + s
Data1.Recordset.MoveFirst
End Sub
Подскажите как ввести сюда связь с data которая находится на другой форме,а то просто программа пишет что Variable not defined
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34464888
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NetaВот такой еще у меня вопрос: есть форма с текстовыми полями (около 15 штук), в которых пользователь задает параметры поиска, соответственно, поле может быть как заполнено, так и пусто. По не пустым полям осуществляеться выборка (запрос). Так вот, можно лм учесть проверку на пустоту в теле самого запроса, то есть обойтись без if (не пустое поле), то запрос... А то вариантов очень много.
Можно использовать макроподстановку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
LOCAL lcFilter
lcFilter = ".T."

IF EMPTY(ThisForm.TextBox1.Value) = .F.
	lcFilter = m.lcFilter + " AND MyTab.MyField1="+TransForm(ThisForm.TextBox1.Value)
ENDIF

IF EMPTY(ThisForm.TextBox2.Value) = .F.
	lcFilter = m.lcFilter + " AND MyTab.MyField2="+TransForm(ThisForm.TextBox2.Value)
ENDIF

LOCAL lcSelect
lcSelect = "SELECT * FROM MyTab WHERE "+m.lcFilter

* Собственно выполнение запроса
&lcSelect
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34467159
J
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J
Гость
кто-нибудь знает? Вопрос: у меня есть 2 формы: на одной расположен data1 + textboxы в которых отображаются данные из базы данных access, на другой форме одна commandbutton и label7 для вывода в ней данных, по заданному заданию, вот кстати текст к command button :Private Sub Command1_Click()
Dim min As Integer
Dim i As Integer
Dim s As String
min = 32000
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
If min > Data1.Recordset.Fields(2).Value Then
min = Data1.Recordset.Fields(2).Value
s = Data1.Recordset.Fields(1).Value
End If
Data1.Recordset.MoveNext
Loop
Label7.Caption = Str(min) + " " + s
Data1.Recordset.MoveFirst
End Sub
Подскажите как ввести сюда связь с data которая находится на другой форме,а то просто программа пишет что Variable not defined .КАК СДЕЛАТЬ связь между двумя этими формами? какой алгоритм?
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34467276
J
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J
Гость
Все спасибо я разобрался)
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34467984
Jaroslav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь еще знает способы , а именно: у меня есть база данных (задание:Таблица 1: код института, название института, фамилия ректора
Таблица 2: код института, название специальности, количество принятых на первый курс студентов, количество выпускников. Определить Количество специальностей в каждом институте)
в access состоящая из двух таблиц, я сделал 2 формы для каждой таблицы соответственно в visual basic ,добавил DATA , связал ее с таблицами, также расположил нужное количество textbox для отображения в них данных по каждой таблице, а теперь мне нужно Определить Количество специальностей в каждом институте. Кто-нибудь может подсказать как это сделать но без select?
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34468025
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jaroslav

Создай новую тему. Не надо "мусорить" в чужих темах. Да и далеко не все читают все подряд. Твой "довесок" могут просто не увидеть.

Кстати, ты форумом не ошибся? Это форум по FoxPro, а не по VBA.
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34525798
Neta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могли бы пояснить, что происходит вот в этой строчке:

lcFilter = m.lcFilter + " AND MyTab.MyField1="+TransForm(ThisForm.TextBox1.Value)

Особенно, что такое "m."
и вот здесь:

lcSelect = "SELECT * FROM MyTab WHERE "+m.lcFilter
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34537940
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34538779
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если переменная объявлена локальной,
то использование префикса
m.

являестся избыточным

корректным и удобным является такой синтаксис

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
local lcFilter, lcSelect
text to lcFilter additive noshow textmerge pretext  7 
     AND MyTab.MyField1=<<TransForm(ThisForm.TextBox1.Value)>>
endtext
text to lcSelect noshow textmerge pretext  7 
     SELECT * FROM MyTab WHERE <<lcFilter>>
endtext
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34539334
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100если переменная объявлена локальной,
то использование префикса
m.

являестся избыточным

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE CURSOR test (MyField C( 10 ))
INSERT INTO test (MyField) VALUES ('123456')

LOCAL MyField
MyField = 'пример'

?"MyField=",MyField
?"m.MyField=",m.MyField

Чтобы "здесь писать, а здесь - не писать" надо иметь достаточно большой опыт. Проще и понятнее, писать везде. Без скидок на "локальность" и "избыточность"
...
Рейтинг: 0 / 0
Вопросы по поиску и отчету?
    #34539377
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ВладимирМ

прекратите заниматься дурью

есть венгерская нотация, ее и нужно придерживаться

переменной LOCAL MyField
быть не должно!!!!!!

должна быть переменная
L(тип)имя

полей в таблице
ln...., lt...., ldD... ,
быть не должно!!!!! есть свои методы именования (префикс + ...)

на дворе 2007 год!
есть устоявшиеся правила и принципы, которые облегчают разработку и поддержку.

не нужно писать напропалую, нужно думать и облегчать себе и другим жизнь
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопросы по поиску и отчету?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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