Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

ADOQuery   Найти похожие ветки 

 
Valeri ©   (2004-07-26 11:22) [0]

Помогите, Мастера!
Есть ADOQuery c параметрами. На самом деле там два параметра - даты, но в тексте запроса они встречаются 28 раз, (там куча полей вычисляемых). В ObjectInspector они также вылезают 28 раз!
Теперь мне приходится 28 раз писать такую бодягу:
ADOQuery1.Parameters[i].Value := ...;
Есть риск перепутать их порядок. ParamByName ADOQuery вроде не поддерживает. Как быть ?
Всем спасибо!!!


 
ЮЮ ©   (2004-07-26 11:26) [1]

for i := ADOQuery1.Parameters.Count - 1 do
 if SameText(ADOQuery1.Parameters[i].Name, "Date") then
   ADOQuery1.Parameters[i].Value := ...
 else if SameText(ADOQuery1.Parameters[i].Name, "...") then  
   ADOQuery1.Parameters[i].Value := ...


 
stone ©   (2004-07-26 11:32) [2]

declare
 @Date1 datetime,
 @Date2 datetime

set @Date1 = :Date1
set @Date2 = :Date2

и дальше в запросе используешь @Date1 и @Date2, в списке параметров в ObjectInspector ты увидишь лишь 2 параметра Date1
и Date2


 
Соловьев ©   (2004-07-26 11:32) [3]


> ParamByName ADOQuery

поддерживает не он, а свойство Parameters.ParamByName


 
Fay ©   (2004-07-26 11:34) [4]

declare
 @par1 datetime,
 @par2 datetime

select
 @par1 = :par1,
 @par2 = :par2

select ...

Теперь можешь упоминать их (как @par1 и par2) до позеления


 
Соловьев ©   (2004-07-26 11:34) [5]


> На самом деле там два параметра - даты, но в тексте запроса
> они встречаются 28 раз,

а можно увидеть запрос? может его можно минимизировать


 
Fay ©   (2004-07-26 11:35) [6]

2stone ©   (26.07.04 11:32) [2]
8)


 
@Lex ©   (2004-07-26 11:36) [7]

ADOQuery1.Parameters.ParamValues["name"] :=


 
Valeri ©   (2004-07-26 14:36) [8]

->Соловьев ©   (26.07.04 11:34) [5]
А запрос такой
SELECT  Character.Id, Character.Name,
CASE WHEN Area > 0
THEN
  9600 * DATEDIFF(HOUR,
  (CASE WHEN date_defin < :d1 THEN :d1 ELSE date_defin END),
  (CASE WHEN date_remov > :d2 THEN :d2 ELSE date_remov END)) * Area * SQRT(Press)
ELSE
  CASE WHEN (Formula = 1)
       AND (DATEDIFF(HOUR,(CASE WHEN date_defin < :d1 THEN :d1
             WHEN date_defin > :d2 THEN :d2
             ELSE date_defin
       END),
       (CASE WHEN date_remov > :d2 THEN :d2
             WHEN date_remov < :d1 THEN :d1
             ELSE date_remov
       END)) /*К-во часов в заданном периоде*/ <= 24)  THEN
           46 * SQRT(Press)
       WHEN (Formula = 1)
       AND (DATEDIFF(HOUR,(CASE WHEN date_defin < :d1 THEN :d1
             WHEN date_defin > :d2 THEN :d2
             ELSE date_defin
       END),
       (CASE WHEN date_remov > :d2 THEN :d2
             WHEN date_remov < :d1 THEN :d1
             ELSE date_remov
       END)) /*К-во часов в заданном периоде*/ > 24) THEN
           1.92 * DATEDIFF(HOUR,(CASE WHEN date_defin < :d1 THEN :d1
             WHEN date_defin > :d2 THEN :d2
             ELSE date_defin
       END),
       (CASE WHEN date_remov > :d2 THEN :d2
             WHEN date_remov < :d1 THEN :d1
             ELSE date_remov
       END)) * SQRT(Press)
       WHEN (Formula = 2) THEN
           9200 * SQUARE(Diameter/100) * SQRT(Press)
       WHEN (Formula = 3) THEN
           17000 * SQUARE(Diameter/100) * SQRT(Press)
  END
END As SVolume
FROM Pipes, Character
WHERE Pipes.Id_Character = Character.id


где date_defin, date_remov - даты возникновения и устранения аварии на трубопроводе
d1, d2 - период, за который надо узнать, сколько воды утекло через дыру в трубе


 
Ega23 ©   (2004-07-26 14:41) [9]

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


 
Valeri ©   (2004-07-26 14:49) [10]

-> stone ©   (26.07.04 11:32) [2]
Не помогает!


 
stone ©   (2004-07-26 14:55) [11]


> Valeri ©   (26.07.04 14:49) [10]

в каком смысле?


 
Valeri ©   (2004-07-26 15:33) [12]

-> stone ©   (26.07.04 14:55) [11]
Все равно 28 параметров лезет. А вообще, в ADOQuery.SQL - можно так писать?


 
stone ©   (2004-07-26 15:43) [13]


> А вообще, в ADOQuery.SQL - можно так писать?

а ты еще не пробовал? покажи как ты написал код с

> declare
>  @Date1 datetime,
>  @Date2 datetime


 
Valeri ©   (2004-07-26 15:45) [14]

->stone ©   (26.07.04 15:43) [13]
Попробовал так:

declare
@d1 datetime,
@d2 datetime

select @d1 = :d1,
@d2 = :d2

SELECT  ...


 
Valeri ©   (2004-07-26 15:46) [15]

Вроде работает -> ЮЮ ©   (26.07.04 11:26) [1]


 
stone ©   (2004-07-26 15:53) [16]


> select @d1 = :d1,
> @d2 = :d2
>
> SELECT  ...

ну а дальше что?


 
Valeri ©   (2004-07-26 15:56) [17]

А дальше - > Valeri ©   (26.07.04 14:36) [8]


 
stone ©   (2004-07-26 16:25) [18]


> А дальше - > Valeri ©   (26.07.04 14:36) [8]

а надо
SELECT  Character.Id, Character.Name,
CASE WHEN Area > 0
THEN
 9600 * DATEDIFF(HOUR,
 (CASE WHEN date_defin < @d1 THEN @d1  ELSE date_defin END),
 (CASE WHEN date_remov > @d2 THEN @d2 ELSE date_remov END)) * Area * SQRT(Press)
ELSE
 CASE WHEN (Formula = 1) ...


и далее в том же духе


 
Valeri ©   (2004-07-26 16:34) [19]

А, понял, спасибо тебе, stone © !!!
А также и всем остальным большое спасибо!



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

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
4-1089275745
Alive
2004-07-08 12:35
2004.08.22
Dll, dll, dll....


3-1090928811
Dolvet
2004-07-27 15:46
2004.08.22
Как урезать нужное колисечтво символов из числового поля


3-1091168902
som
2004-07-30 10:28
2004.08.22
Про SQL запросы


14-1091295618
Guest
2004-07-31 21:40
2004.08.22
Добрый вечер.Подскажите как найти кол-во строк в списке


6-1088076333
студентМАИ
2004-06-24 15:25
2004.08.22
служба доступа к файлам и принтерам





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский