Форум: "Базы";
Текущий архив: 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