powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом
17 сообщений из 17, страница 1 из 1
Помогите с запросом
    #36601575
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такой вопрос.
Имеется основные таблицы: gruz, region, goroda, transport, loding и одна временная(создается при выполнении запроса и заполняется всеми полями основных таблиц) cBuilding. Проблема в том что при выполнении запроса она создается, но остается пустой. Подскажите как сделать чтобы она заполнялась?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601615
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно не выполнены условия, удовлетворяющие запросу.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601652
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как так, я точно знаю, что у меня есть в таблице регион: Новосибирская область и город: Новосибирск, делаю поиск именно по этому региону и городу и у меня результат нулевой и во временной таблице пусто.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601679
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curys,

структуру таблиц и код процедуры в студию
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601683
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может в коде у меня какие-нибудь косяки, посмотрите пожалуйста!
Вот код запроса:

*- Кнопка Поиск
Wait 'Ждите! Ваш запрос обрабатывает сервер.' WINDOW NOWAIT

IF Selectidotkydare=0
* Значение символьной переменной - пустая строка
* К оператору SELECT ничего добавлено не будет
Sidotkydare=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidotkydare
* Обратите внимание на знак & (амперсанд)
Sidotkydare=[and gruz.idotkydare=Selectidotkydare]
ENDIF

IF Selectidotkydago=0
* Значение символьной переменной - пустая строка
* К оператору SELECT ничего добавлено не будет
Sidotkydago=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidotkydago
* Обратите внимание на знак & (амперсанд)
Sidotkydago=[and gruz.idotkydago=Selectidotkydago]
ENDIF

IF Selectidkydare=0
* Значение символьной переменной - пустая строка
* К оператору SELECT ничего добавлено не будет
Sidkydare=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidkydare
* Обратите внимание на знак & (амперсанд)
Sidkydare=[and gruz.idkydare=Selectidkydare]
ENDIF

IF Selectidkydago=0
* Значение символьной переменной - пустая строка
* К оператору SELECT ничего добавлено не будет
Sidkydago=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidkydago
* Обратите внимание на знак & (амперсанд)
Sidkydago=[and gruz.idkydago=Selectidkydago]
ENDIF

IF Selectidtran=0
Sidtran=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidtran
Sidtran=[and gruz.idtran=Selectidtran]
ENDIF

IF Selectidload=0
Sidload=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sidload
Sidload=[and gruz.idload=Selectidload]
ENDIF

* Дата погрузки
* Уберем концевые пробелы
Selectgotovs=ALLTRIM(Selectgotovs)
IF LEN(Selectgotovs)=0
Sgotovs=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sgotovs
Sgotovs=[and gruz.gotovs==Selectgotovs]
* Знак == означает: в точности равно.
* Если поставить просто знак равенства
* Будут найдены все груз, дата погрузки которых
* начинаются с введенных символов.
ENDIF

* Дата погрузки
* Уберем концевые пробелы
Selectgotovdo=ALLTRIM(Selectgotovdo)
IF LEN(Selectgotovdo)=0
Sgotovdo=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sgotovdo
Sgotovdo=[and gruz.gotovdo==Selectgotovdo]
* Знак == означает: в точности равно.
* Если поставить просто знак равенства
* Будут найдены все груз, дата погрузки которых
* начинаются с введенных символов.
ENDIF

* Масса груза
* Уберем концевые пробелы
Selectmassa=ALLTRIM(Selectmassa)
IF LEN(Selectmassa)=0
Smassa=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Smassa
Smassa=[and gruz.massa==Selectmassa]
* Знак == означает: в точности равно.
* Если поставить просто знак равенства
* Будут найдены все груз, масса которых
* начинаются с введенных символов.
ENDIF

* Объем груза
* Уберем концевые пробелы
Selectobiem=ALLTRIM(Selectobiem)
IF LEN(Selectobiem)=0
Sobiem=[]
ELSE
* Строка в квадратных скобках будет добавлена
* к оператору SELECT как значение &Sobiem
Sobiem=[and gruz.obiem==Selectobiem]
* Знак == означает: в точности равно.
* Если поставить просто знак равенства
* Будут найдены все груз, дата погрузки которых
* начинаются с введенных символов.
ENDIF


* Выполнение запроса
SELECT gruz.idotkydare,region.region,;
gruz.idotkydago,goroda.gorod,;
gruz.idkydare,region.region,;
gruz.idkydago,goroda.gorod,;
gruz.gruznaumen,;
gruz.massa,;
gruz.obiem,;
gruz.idtran,transport.transport,;
gruz.idload,loading.load,;
gruz.ctavka,;
gruz.gotovs,;
gruz.gotovdo,;
gruz.compani,;
gruz.kontakt,;
gruz.telefon,;
gruz.icq,;
gruz.mail;
FROM gruz,region,goroda,transport,loading;
INTO TABLE C:\WINNT\TEMP\cBuilding;
WHERE gruz.idotkydare=region.idreg;
AND gruz.idotkydago=goroda.idgorod;
AND gruz.idkydare=region.idreg;
AND gruz.idkydago=goroda.idgorod;
AND gruz.gruznaumen=gruz.gruznaumen;
AND gruz.massa=gruz.massa;
AND gruz.obiem=gruz.obiem;
AND gruz.idtran=transport.idtran;
AND gruz.idload=loading.idload;
AND gruz.ctavka=gruz.ctavka;
AND gruz.gotovs=gruz.gotovs;
AND gruz.gotovdo=gruz.gotovdo;
&Sidotkydare &Sidotkydago &Sidkydare &Sidkydago &Smassa &Sobiem &Sidtran &Sidload &Sgotovs &Sgotovdo
SELECT cBuilding
* Во временной выборке находится информация по грузам,
* отвечающим условиям составленного запроса.
* Запись содержит полный набор полей из всех таблиц:
*
* Полученную выборку можно конвертировать в Excel, Access и др.
* Без дополнительной обработки
Wait 'Готово!' WINDOW NOWAIT
IF RECCOUNT()=0
=MESSAGEBOX('Груза, отвечающих условиям вашего запроса, '+;
'в базе нет. Повторите запрос, изменив требования.';
,48,'Внимание')
RETURN
ENDIF
* Временная таблица-выборка хранится в файлах
* cBuilding.dbf и cBuilding.fpt в папке C:\WINNT\TEMP
* Запуск формы для работы с грузами
DO FORM rezultgruz
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601843
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
gruz.idotkydare=region.idreg AND gruz.idkydare=region.idreg

Вы уверены, что два РАЗНЫХ поля таблицы gruz содержат одно и то же значение?

А зачем вот эти условия совсем не понимаю

Код: plaintext
1.
2.
3.
4.
5.
6.
AND gruz.gruznaumen=gruz.gruznaumen;
AND gruz.massa=gruz.massa;
AND gruz.obiem=gruz.obiem;
AND gruz.ctavka=gruz.ctavka;
AND gruz.gotovs=gruz.gotovs;
AND gruz.gotovdo=gruz.gotovdo;

Предполагается, что поле может быть не равно самому себе? Правда, подобные условия исключают значения NULL, если они есть, разумеется. Но на NULL можно было бы проверить и прямым сравнением

Код: plaintext
AND gruz.gruznaumen IS NOT NULL

или

Код: plaintext
AND IsNull(gruz.gruznaumen) = .F.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36601972
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, или точно такая же тема была тут совсем недавно?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36605260
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите проект, может вы разберетесь почему во временную таблицу не добовляются результаты поиска?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607070
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607122
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.

преподавателю жирный минус

я от своего просто под стол падал и катался в конвульсиях:
ПК - это сист.блок, монитор и клавиатура.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607167
curys, разбираться в нагромождении вашего кода в запросе нет никакого желания. Хотя бы сделали все с использованием Join
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607188
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоcurysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.

преподавателю жирный минус

я от своего просто под стол падал и катался в конвульсиях:
ПК - это сист.блок, монитор и клавиатура.Он был труЪ-линуксойд? Мышку не признавал категорически?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607267
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirпрошелмимоcurysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.

преподавателю жирный минус

я от своего просто под стол падал и катался в конвульсиях:
ПК - это сист.блок, монитор и клавиатура.Он был труЪ-линуксойд? Мышку не признавал категорически?

А я своего вчера чуть не пребил на месте, стоит и смотрит на меня как баран на новые ворота.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607325
Fffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит, придется самому делать. Возьмите хотя бы конструктор запросов, в нем соедините линиями таблицы и введите условия отбора. Получившийся код перенесите в программу, изменив под свои условия отбора.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607355
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curystanglirпрошелмимоcurysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.

преподавателю жирный минус

я от своего просто под стол падал и катался в конвульсиях:
ПК - это сист.блок, монитор и клавиатура.Он был труЪ-линуксойд? Мышку не признавал категорически?

А я своего вчера чуть не пребил на месте, стоит и смотрит на меня как баран на новые ворота.

ты ихде?

я - в Мск

завтра буду в Курске,
потом - в Белгороде.

поймаешь - попьем пива,
я на пальцах покажу все.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36607932
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.
Если на рассматривать стиль написания, то у тебя несколько ошибок.

(1.)

Коды "откуда" и "куда" не могут одновременно ссылаться на разные записи одной и той же таблицы. Их надо "развести" по разным таблицам. Для этой цели одну и ту же таблицу открывают дважды. В двух рабочих областях. Получая как бы копию таблицы.

В результате, запрос получится таким

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SELECT ;
       gruz.idotkydare, region.region, ;
       gruz.idotkydago, goroda.gorod, ; 
       gruz.idkydare, regKyda.region, ;
       gruz.idkydago, gorKyda.gorod, ; 
       gruz.gruznaumen, ; 
       gruz.massa, ;
       gruz.obiem, ;
       gruz.idtran,transport.transport, ;
       gruz.idload,loading.load, ;
       gruz.ctavka, ;
       gruz.gotovs, ;
       gruz.gotovdo, ;
       gruz.compani, ;
       gruz.kontakt, ;
       gruz.telefon, ;
       gruz.icq, ;
       gruz.mail ;
FROM ;
       gruz, ;
       region, ;
       region regKyda, ;
       goroda, ;
       goroda gorKyda, ;
       transport, ;
       loading ;
INTO TABLE cBuilding;
WHERE gruz.idotkydare=region.idreg;
      AND gruz.idotkydago=goroda.idgorod;
      AND gruz.idkydare=regKyda.idreg;
      AND gruz.idkydago=gorKyda.idgorod;
      AND gruz.idtran=transport.idtran;
      AND gruz.idload=loading.idload;
      &Sidotkydare &Sidotkydago &Sidkydare &Sidkydago &Smassa &Sobiem &Sidtran &Sidload &Sgotovs &Sgotovdo

Т.е. две таблицы region и goroda теперь участвуют в запросе в двух ипостасях: как регион и город "откуда", и еще одна копия - как регион и город "куда"

Ну, тут я еще выбросил бессмысленные условия когда поле ссылается само на себя.

(2.)

Условие объединения таблиц описанным способом предполагает, что для каждой записи таблицы grus существует соответствующая запись таблиц-справочников. Если хотя бы в одном справочнике нет соответствующего кода записи, то запись таблицы grus в выборку не попадет.

В данном случае, проблема с кодами записей таблицы goroda. В ней нет записей с кодом 1 и 2. Как следствие, результат выборки по присланным тестовым данным всегда пустой.

Добавьте в таблицу goroda записи с кодом 1 и 2 или измените в таблице grus значения полей idotkydago и idkydago таким образом, чтобы в них не было кодов 1 и 2
...
Рейтинг: 0 / 0
Помогите с запросом
    #36608108
curys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМcurysпомогите пожалалуйста, я уже не знаю что делать, даже мой преподаватель не знает в чем моя ошибка.
Если на рассматривать стиль написания, то у тебя несколько ошибок.

(1.)

Коды "откуда" и "куда" не могут одновременно ссылаться на разные записи одной и той же таблицы. Их надо "развести" по разным таблицам. Для этой цели одну и ту же таблицу открывают дважды. В двух рабочих областях. Получая как бы копию таблицы.

В результате, запрос получится таким

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SELECT ;
       gruz.idotkydare, region.region, ;
       gruz.idotkydago, goroda.gorod, ; 
       gruz.idkydare, regKyda.region, ;
       gruz.idkydago, gorKyda.gorod, ; 
       gruz.gruznaumen, ; 
       gruz.massa, ;
       gruz.obiem, ;
       gruz.idtran,transport.transport, ;
       gruz.idload,loading.load, ;
       gruz.ctavka, ;
       gruz.gotovs, ;
       gruz.gotovdo, ;
       gruz.compani, ;
       gruz.kontakt, ;
       gruz.telefon, ;
       gruz.icq, ;
       gruz.mail ;
FROM ;
       gruz, ;
       region, ;
       region regKyda, ;
       goroda, ;
       goroda gorKyda, ;
       transport, ;
       loading ;
INTO TABLE cBuilding;
WHERE gruz.idotkydare=region.idreg;
      AND gruz.idotkydago=goroda.idgorod;
      AND gruz.idkydare=regKyda.idreg;
      AND gruz.idkydago=gorKyda.idgorod;
      AND gruz.idtran=transport.idtran;
      AND gruz.idload=loading.idload;
      &Sidotkydare &Sidotkydago &Sidkydare &Sidkydago &Smassa &Sobiem &Sidtran &Sidload &Sgotovs &Sgotovdo

Т.е. две таблицы region и goroda теперь участвуют в запросе в двух ипостасях: как регион и город "откуда", и еще одна копия - как регион и город "куда"

Ну, тут я еще выбросил бессмысленные условия когда поле ссылается само на себя.

(2.)

Условие объединения таблиц описанным способом предполагает, что для каждой записи таблицы grus существует соответствующая запись таблиц-справочников. Если хотя бы в одном справочнике нет соответствующего кода записи, то запись таблицы grus в выборку не попадет.

В данном случае, проблема с кодами записей таблицы goroda. В ней нет записей с кодом 1 и 2. Как следствие, результат выборки по присланным тестовым данным всегда пустой.

Добавьте в таблицу goroda записи с кодом 1 и 2 или измените в таблице grus значения полей idotkydago и idkydago таким образом, чтобы в них не было кодов 1 и 2

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


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