Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.008 c
3-52098
Russko
2003-11-24 13:02
2003.12.16
ODBC base


3-52105
ivanovsergey
2003-11-24 10:55
2003.12.16
Создать таблицу dbase


3-52071
Inkotex
2003-11-25 09:27
2003.12.16
Нужна помощь по SQL


3-52115
Fighter
2003-11-24 09:28
2003.12.16
Объединение таблиц из разных папок


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский