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

Вниз

Вот фрагмент кода программы   Найти похожие ветки 

 
aOlegY   (2003-01-17 15:03) [0]

Локальная БД Paradox

Вот фрагмент кода программы:
Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add(" Lgotn01.N_Potr, Lgotn01.N_Gr_Lgot, Lgots.Percent");
Query.SQL.Add("from");
Query.SQL.Add(" ":work:Lgotn01" lgotn01, Lgots");
Query.SQL.Add("where");
Query.SQL.Add(" Lgots.N_Lgot = Lgotn01.N_Gr_Lgot");
Query.SQL.Add(" and Lgots.Year_ * 12 + Lgots.Month_ = Lgotn01.MonthLgs");
Query.Prepare;
Query.Open;

Вот фрагмент таблицы Lgotn_01:
N_Potr N_Gr_Lgot MonthLgs
----------------------------------
.................
16017 1 24034
16017 6 24034
16017 7 24034
...............
и ещё около 6-ти тысяч записей

Вот фрагмент таблицы Lgots:
N_Lgot Month_ Year Percent
--------------------------------------
.............
1 10 2002 0
6 10 2002 50
7 10 2002 50
..............

После выполнения вышеприведённого кода результирующей таблице
получается только 2 записи с N_Potr=16017
N_Potr N_Gr_Lgot Percent
--------------------------
16017 6 50
16017 6 50
Хотя должно быть 3. ПОЧЕМУ??????? Как сделать, что бы правильно работало?

Если в таблице Lgotn01 оставить только записи с N_Potr = 16017,
то всё работает правильно.


 
MsGuns   (2003-01-17 15:35) [1]

Для начала каждое из условий Where возьми в скобки (по типу Паскаля)


 
aOlegY   (2003-01-17 15:54) [2]

Поставил скобки. Всё равно, результат такой же неправильный выдаётся


 
MsGuns   (2003-01-17 16:07) [3]

Отладь запрос в SQL Explorer. Что-то странненько. Особенно если учесть:
> Если в таблице Lgotn01 оставить только записи с N_Potr = 16017,
то всё работает правильно.


Можно для верности применить конструкцию JOIN, но все равно непонятно 8-(


 
aOlegY   (2003-01-20 10:47) [4]

В SQL Explorere - Даже если в запрос добавить условие (and N_Potr = 16017), то возращает три записи. Убираю (N_Potr = 16017) - возращает только две строчки с N_Potr = 16017. Может обратиться в службу технической поддержки Borland?

Left outer join работает правильно, но не подходит, потому что медленно.

Мне удалось уйти от проблемы разбив запрос на два запроса и созданием ещё одной временной таблицы:

Query.Sql.Clear;
Query.Sql.Add("Select");
Query.Sql.Add(" N_Lgot, Percent, N_Type_Calc_Lgot, (Year_ * 12 + Month_) as MonthLgs");
Query.Sql.Add("from");
Query.Sql.Add(" Lgots");
Query.Prepare;
Query.Open;
MakePermanent(Query, "work", "Lgots01");

Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add(" Lgotn01.N_Potr, Lgots01.N_Lgot, Lgots01.Percent");
Query.SQL.Add("from");
Query.SQL.Add(" ":work:Lgotn01", ":work:Lgots01"");
Query.SQL.Add("where");
Query.SQL.Add(" (Lgots01.N_Lgot = Lgotn01.N_Gr_Lgot)");
Query.SQL.Add(" and Lgots01.MonthLgs = Lgotn01.MonthLgs");

Query.Prepare;
Query.Open;




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

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

Наверх





Память: 0.45 MB
Время: 0.008 c
14-15873
M4
2003-01-12 13:39
2003.02.06
Собирается команда...


14-15892
race1
2003-01-18 16:23
2003.02.06
c


7-15951
Olimpik
2002-11-25 20:16
2003.02.06
Работа с реестром под бесправным юзером


1-15744
msoftware
2003-01-28 10:13
2003.02.06
Вопрос по TreeView


3-15413
Andy Eremin
2003-01-21 11:59
2003.02.06
Расчет





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