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

Вниз

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

 
Pako   (2004-01-20 08:40) [0]

Добрый день! Есть запрос Select, который по нескольким условиям выбирает записи, но теперь мне необходимо выбрать лишь ту запись, на которой, например, стоит курсор в гриде.


 
Pako   (2004-01-20 08:46) [1]

Пыталась сделать так
...where s.number = :bilet... затем в программе присваюваю параметру текущее значение № студ билета, но результат выборки 0


 
DenK_vrtz   (2004-01-20 08:52) [2]

>Pako

а подробнее пожно, желательно с кодом?


 
VAleksey   (2004-01-20 10:05) [3]

Ну, видимо остальные "несколько условий" не совпадают с номером текущего билета.


 
Pako   (2004-01-20 10:17) [4]

Вот текст запроса, заранее прошу не придираться к структуре БД,
я этот проект только сопровождаю:)

select distinct g.Grup, s.Number, f.Surname,n.name, p.patronymic, s.BirthDay,c.country, s.documentseries,s.documentnumber,s.documentdate,
d.DocumentWhoGive, s.AdressReg,s.TelephoneReg, x.Surname||" "||y.Name||" "||z.Patronymic As FullNameMother, s.EducDocNumber,s.EducDocDate,
j.Surname||" "||k.Name||" "||l.Patronymic As FullNameFather
from Student S, Grup G, Surname F, Name N, Patronymic P, Country C, DocumentWhoGive D,Married M,Mother O,Father W,
Surname X, Name Y, Patronymic Z, Surname J, Name K, Patronymic L
where (s.number= :bilet) and (s.kodgrup=g.kodgrup) and (s.kodsurname=f.kodsurname)and (s.kodname=n.kodname)
and (s.kodpatronymic=p.kodpatronymic)and (s.kodcountry=c.kodcountry)and (s.KodDocumentWhoGive=d.KodDocumentWhoGive)
and (s.kodstudent=o.kodstudent) and (s.kodstudent=w.kodstudent)and (o.kodsurname=x.kodsurname)and (o.kodname=y.kodname)and (o.kodpatronymic=z.kodpatronymic)
and (w.kodsurname=j.kodsurname)and (w.kodname=k.kodname)and (w.kodpatronymic=l.kodpatronymic)
перед выполнением запроса пишу:
DM.qLKarta.Close;
DM.qLKarta.MacroByName("bilet").AsInteger:=fmEditStudent.edNumber.Value;
DM.qLKarta.Prepare;
DM.qLKarta.Open;


 
Johnmen   (2004-01-20 10:21) [5]

Почему макро, а не парам ?


 
DenK_vrtz   (2004-01-20 10:22) [6]

1. VAleksey © (20.01.04 10:05) [3]
2. смотреть чему равно fmEditStudent.edNumber.Value + п.1
3. а MacroByName - это что?


 
Pako   (2004-01-20 10:25) [7]

Сорри старый кусочек кода скопировала, конечно же ParamByName


 
Pako   (2004-01-20 10:27) [8]


> 3. а MacroByName - это что?

Это свойство у DBGridEh


 
Sergey13   (2004-01-20 10:45) [9]

2Pako (20.01.04 10:27) [8]
>> 3. а MacroByName - это что?
>Это свойство у DBGridEh
Че то ты путаешь, ИМХО. Это скорее свойство RxQuery - есть там такая фича, но служит она несколько для другого, вроде (например для переменного поля сортировки). Может в этом и проблема?


 
Pako   (2004-01-20 10:50) [10]


> Че то ты путаешь

да ты прав, RxQuery конечно но я не использую MacroByName, я же сказала что это опечатка, на самом деле
DM.qLKarta.Close;
DM.qLKarta.ParamByName("bilet").AsInteger:=fmEditStudent.edNumber.Value;
DM.qLKarta.Prepare;
DM.qLKarta.Open;


 
Плохиш_   (2004-01-20 10:58) [11]

>Pako

А не пробовал запрос с join сделать, наглядней будет и проблему сам сразу найдёшь.


 
Sergey13   (2004-01-20 11:06) [12]

А если попробовать fmEditStudent.edNumber. asInteger? Это шаманство конечно, но вдруг....
Или не выполняется для конкретного студента какое то условие - скорее всего (таблиц-условий достаточно много). Попробуй упростить одиночный запрос до минимума (только таблица Student) и посмотри работает ли. Далее наращивай до рабочего запроса постепенно по одной таблице.
И еще тройное упоминание во FROM таблиц Surname , Name , Patronymic оправдано (мне просто лень в запросе разбираться 8-)?


 
mtb   (2004-01-20 11:09) [13]

попробуй в коде полученный запрос отправить в текстовый файл
или компонент (мемо), без парам
и проверить его выполнимость, может и без ParamByName("bilet")
число записей 0


 
Pako   (2004-01-20 11:33) [14]

Без парам запрос выполняется правильно, но я получаю все записи таблицы Student, что в принципе нужно. Но нужен еще один запрос только с одной текущей записью (ее нужно показать в отчете).
Как вы видите весь этот громоздкий запрос лишь вытаскивает данные из справочников для таблицы студент
> И еще тройное упоминание во FROM таблиц Surname , Name ,
> Patronymic оправдано (мне просто лень в запросе разбираться
> 8-)?

но разработчик решил хранить ФИО в отдельных справочниках, соответственно в таблицах Student, Mother, Father в полях фамилия, имя, отчество хранятся только коды, вот!


 
Sergey13   (2004-01-20 11:43) [15]

2Pako (20.01.04 11:33) [14]
>Как вы видите весь этот громоздкий запрос лишь вытаскивает данные из справочников для таблицы студент
Вот и проверь, вернет ли запрос оз одной таблицы Студент. Если вернет, то проблема не в синтаксисе и не в параметрах, а в условиях запроса. И тогда надо постепенно наращивать запрос до рабочего состояния для выявления ошибки. Я лично всегда так делаю на больших запросах.

>но разработчик решил хранить ФИО в отдельных справочниках,
Повезло вам с разработчиком. 8-)


 
Pako   (2004-01-20 11:47) [16]


> >но разработчик решил хранить ФИО в отдельных справочниках,
>
> Повезло вам с разработчиком. 8-)

вам весело:)) а мне отчет добавить нужно!


 
Sergey13   (2004-01-20 11:54) [17]

2Pako (20.01.04 11:47) [16]
>вам весело:)) а мне отчет добавить нужно!
А че мне плакать что ли. Я ж тебе нарисовал путь решения проблемы. А уж решать проблему тебе... А я уж так и быть, всплакну. 8-)


 
mtb   (2004-01-20 11:58) [18]

а нельзя ли Query.SQL заполнить во время выполнения программы,
используя TString

var
sss:TString;
.......

sss.add("select distinct g.Grup, s.Number, f.Surname,n.name, p.patronymic, s.BirthDay,c.country,");
sss.add("s.documentseries,s.documentnumber,s.documentdate,");
.......

sss.add("where s.number="+ значение_bilet+" and (s.kodgrup=g.kodgrup) and (s.kodsurname=f.kodsurname)and (s.kodname=n.kodname)");
.....

DM.qLKarta.Close;
DM.qLKarta.SQL.Clear;
DM.qLKarta.SQL:=sss;
DM.qLKarta.Open;


 
Tt   (2004-01-20 12:03) [19]

Точно номер билета помещается в Integer? В самой таблице он какого типа?


 
Pako   (2004-01-20 12:06) [20]


> Sergey13 © (20.01.04 11:54) [17]

Если путь решения проблемы таков
> И тогда надо постепенно наращивать запрос до рабочего состояния
> для выявления ошибки.

то я так и делала, плакать не надо, а путь ты действительно "нарисовал":))твои слова можно читать "разбирайся сама и не приставай"
ок, спасибо всем кто проявил внимание:))


 
Pako   (2004-01-20 12:09) [21]


> Точно номер билета помещается в Integer? В самой таблице
> он какого типа?

Short


 
Tt   (2004-01-20 12:12) [22]

Тогда предыдущие авторы правы :),
бери запрос, вместо параметра подставляй конкретное зн-е студ.билета, и смотри, вернет ли запись


 
Pako   (2004-01-20 12:16) [23]

подсталяла, не возвращает


 
Pako   (2004-01-20 12:16) [24]

подставляла, не возвращает!


 
Tt   (2004-01-20 12:24) [25]

Ну а в полном запросе (без (s.number= :bilet) ) есть этот студент?
Может, у него не указаны сведения о родителях, или стране или еще что-нибудь


 
Pako   (2004-01-20 12:42) [26]


> Tt (20.01.04 12:24) [25]


извинясь, действительно его нет и в полном запросе, ведь он возвращает только те записи у которых все поля заполнены


 
Pako   (2004-01-20 12:47) [27]

Как сделать, чтобы запрос вернул все записи студентов, независимо указаны ли родители, страна и т.п.?


 
Tt   (2004-01-20 13:03) [28]

Не знаю, как в твоей БД.
Для SQL-х баз есть понятие правого / левого объединения
right/left outer join
например, объединить табл.Т1 с Т2, чтобы попали все записи из Т1
select t1.*, t2.*
from t1 left outer join t2 on t1.cod = t2.cod

Но, честно говоря, с таким большим кол-вом таблиц замучаешься делать внешние объединения


 
mtb   (2004-01-20 13:04) [29]

наверное используя JOIN
правда не знаю как быстро это можно сделать в Paradox

возьми таблицу из которой должны выбираться все записи и подцепляй по одной оставшиеся таблицы

если есть возможность экспортировать в Access, MSSQL там есть визрды будет полегче создать запрос и затем оптимизировать



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

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

Наверх




Память: 0.51 MB
Время: 0.008 c
3-29248
Vic
2004-01-19 10:26
2004.02.10
Список таблиц access


1-29433
Maxximusss
2004-01-31 12:06
2004.02.10
Smart use SaveDialog


8-29472
sCream
2003-10-11 15:30
2004.02.10
преобразование векторного формата


3-29240
TurburatoR
2004-01-19 13:13
2004.02.10
Как правильно использовать DBComboBox


1-29385
Прямой
2004-02-01 22:18
2004.02.10
Надо получить иконку для зарегистрированного в системе файла





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