Вниз
Скачать: CL | DM;

Динамический запрос   Найти похожие ветки 

← →
TATIANA   (2003-11-21 18:48) [0]

Здравствуйте , господа мастера . Нужна помощь начинающему .
1 Вопрос.
Таблица KVART , в ней есть 7 кодов , наименования находятся в 7 справочниках . Надо заполнить Grid данными , соеденить 7 таблиц с KVART , сделать динамический запрос , т. к. необходимо сделать просмотр по 7 параметрам (кодам) . Код выбираю из справочника .
Запрос :
Параметр - knas ;
Переменная из справочника (код) - kodnas .
SPRAV := 17; (переменная для вызова нужного справочника)
Form2.Showmodal; ( вызов справочника)

IBQuery1.Close;
IBQuery1.SQL.Clear;
ibquery1.Params.Add;
ibquery1.Params[0].DataType := ftInteger;
ibquery1.Params[0].Name := "knas";
ibquery1.Params[0].AsInteger := kodnas;
IBQuery1.SQL.Add("Select KV.*,N.NAIM, MR.NAIM,UL.NAIM,TK.NAIM,NK.NAIM,TG.NAIM,TP.NAIM");
IBQuery1.SQL.Add("from KVART KV, NASP N, MRAION MR,ULICA UL, TIP_KV TK,NAL_KV NK, TIP_GIL TG, TIP_PROD TP");
IBQuery1.SQL.Add("WHERE (KV.KOD_NAS=:knas) AND (KV.KOD_MR= MR.KOD) AND (KV.KOD_UL= UL.KOD) AND (KV.KV_TIP=TK.KOD) AND (KV.KV_NAL=NK.KOD) AND (KV.GIL_TIP=TG.KOD) AND (KV.PROD_TIP=TP.KOD)");

//
// ibquery1.Params.Add;
// ibquery1.Params[0].DataType := ftInteger;
// ibquery1.Params[0].Name := "knas";
// ibquery1.Params[0].AsInteger := kodnas;
//
IBQuery1.Open ;
Запрос не работает . В чем причина .

2 Вопрос .
Компонент Edit1 . После ввода данных , хочу нажать клавиши <ENTER> или <TAB> , в событии OnKeyDown пишу -
if (key = 13) or (key = 9) then Edit2.SetFocus;
не работает , в чем причина не пойму . В 5-ой версии все работало .
Всем спасибо .


← →
Vlad ©   (2003-11-21 19:02) [1]


> Запрос не работает . В чем причина .

Что значит не работает - ошибку выдает или данных не возвращает ?


← →
Johnmen ©   (2003-11-21 23:25) [2]

1. Параметры определяются после того, как они прописаны.
А если они прописаны, то зачем же Add ?
2. "Враки-каки" (c) прапорщик Задов


← →
TATIANA   (2003-11-25 09:23) [3]

Господа , добрый день . Спасибо , что ответили.
1. Запрос не возвращает данные .
2. Извините , но мне еще не понятен термин "параметры прописаны" . Вы имеете ввиду - IbQuery.Params[0].DataType IbQuery.Params[0].Name
IbQuery.Params[0].AsInteger
3. Прапорщик Задов - это не "Враки-таки" .
Гопода мастера , извините за назойливость , но если бы мне было все понятно , не задавала бы "глупый вопрос" .
Если можно , желательно подробнее указать ошибку . Первая программа .
Спасибо .


← →
Johnmen ©   (2003-11-25 09:28) [4]

Сначала текст запроса, потом определение параметров...


← →
TATIANA   (2003-11-25 10:09) [5]

Спасибо за ответ , убрала ADD и запрос вернул данные , но теперь другая проблема , записи двойные , добавила в SELECT описатель DISTINC , результат тот же .


← →
Johnmen ©   (2003-11-25 10:35) [6]

>записи двойные

Это как ?


← →
TATIANA   (2003-11-25 10:41) [7]

Записи дублируются .
МОСКВА
МОСКВА
РЯЗАНЬ
РЯАНЬ
ОМСК
ОМСК


← →
Johnmen ©   (2003-11-25 10:44) [8]

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


← →
DenK_vrtz ©   (2003-11-25 11:13) [9]

Johnmen © (25.11.03 10:44) [8] + и DISTINCT, в таком запросе, не поможет!


← →
TATIANA   (2003-11-25 11:22) [10]

Господа . Чем мешает жить ? Эта информация отображается в DBGrid . Хорош вид :
МОСКВА З-Д АВТОАГРЕГАТ
МОСКВА З-Д АВТОАГРЕГАТ
МОСКВА З-Д АВТОАГРЕГАТ
РЯЗАНЬ З-Д ЖБИ
РЯЗАНЬ З-Д ЖБИ
ОМСК ДСК
ОМСК ДСК
Выдаю инф-ию на экран и печать по определенному признаку .
Как правильно сделать не знаю.


← →
DenK_vrtz ©   (2003-11-25 11:28) [11]

TATIANA (25.11.03 11:22) [10], а кто знает?
Адреса? Явки? Пароли?


← →
Danilka ©   (2003-11-25 11:33) [12]

[10] TATIANA (25.11.03 11:22)
смысл запроса какой? как я понял - вываливает все квартиры так? а почему тогда ты хочешь, чтобы он тебе написал "МОСКВА" только один раз, вообще-то там больше квартир..

если тебе надо только населенные пункты, для этого нужен другой запрос.


← →
Sandman25 ©   (2003-11-25 11:36) [13]

Если Distinct не помогает, значит там намешаны русские и латинские буквы.
MОСКВА<>МОСКВА, если в одном слове буква M русская, а в другом - латинская.
Или буква О, или С, или К, или В, или А... В-общем, в данном случае (МОСКВА) есть 2^6=64 варианта написания, и Вы можете получить 64 записи вместо одной.


← →
Danilka ©   (2003-11-25 11:38) [14]

[13] Sandman25 © (25.11.03 11:36)
ты посмотри что выводит запрос. там не одно и не два поля.
вываливает, например, все поля таблицы KVART


← →
Sandman25 ©   (2003-11-25 11:44) [15]

[14] Danilka © (25.11.03 11:38)

Согласен.

TATIANA

Если Вы отображаете только одно поле в DBGrid , то зачем извлекаете остальные поля? Чтобы записи изменять? Так ведь пользователь разницу между записями не видит и нужную ему все равно не найдет, ему придется угадывать :)


← →
TATIANA   (2003-11-25 12:07) [16]

Господа ! Конечно же поле не одно , их много .Не могу же я вам дать конкретные данные . "Москва" - пример .
У меня в таблице код "Москвы" (KOD_NAS), а наименование города выбираю из справочника (NASP) , данные для "Москвы" выбираются по коду (KOD_NAS). И вот такая картина - что-то делаю в запросе неправильно , данные для "Москвы" (KOD_NAS = :knas) выводятся 6 раз , а записи в примере всего 2 .


← →
Sandman25 ©   (2003-11-25 12:47) [17]

[16] TATIANA (25.11.03 12:07)

Таблица NASP не связывается ни с чем. Если в ней 3 записи, то вместо 2 записей получаем 6.


← →
TATIANA   (2003-11-25 13:09) [18]

Господа ! Благодарю всех за внимание . И потому показываю как надо было написать запрос ( может быть кому-нибудь пригодится) :
IBQuery1.SQL.Add("Select KV.*,N.NAIM, MR.NAIM,UL.NAIM,TK.NAIM,NK.NAIM,TG.NAIM,TP.NAIM");
IBQuery1.SQL.Add("from KVART KV, NASP N, MRAION MR,ULICA UL, TIP_KV TK,NAL_KV NK, TIP_GIL TG, TIP_PROD TP");
IBQuery1.SQL.Add("WHERE ((KV.KOD_NAS=N.KOD) AND(N.KOD=:knas)) AND (KV.KOD_MR= MR.KOD) AND (KV.KOD_UL= UL.KOD) ...... ;
Параметр :knas переставить в AND(N.KOD=:knas) .



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.014 c
1-52222
alexnmsk
2003-12-04 14:55
2003.12.16
InplaceEditor


1-52254
NneRreal
2003-12-04 14:24
2003.12.16
Как сравнить строки в строго определённой последовательности ?


8-52292
emike
2003-08-18 23:29
2003.12.16
тэги формата ogg


1-52234
DeScriptor
2003-12-04 22:12
2003.12.16
Стыкуемые окна


3-52103
gedd
2003-11-21 10:26
2003.12.16
DBGRID с сортировков по столбцам




   Наверх