Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизДинамический запрос Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c