|
Вопрос # 1 833/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Скажите пожалусто , можно ли запросом из 2-ух таблиц вывести отсортированные данные по дате (из первои допустим поле 1, во второй таблице поле 2) в DBGrid в одно поле (допустим в поле 3) база access...?если можно то как :)
Заранее большое спасибо
 |
Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 21 августа 2008, 14:59
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 21; последнее сообщение — 22 августа 2008, 16:12; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Шичко Игорь (статус: 9-ый класс), 21 августа 2008, 15:27 [#1]:
А таблицы связаны как-то между собой?
|
|
Танюшка (статус: Посетитель), 21 августа 2008, 15:29 [#2]:
НЕТ
|
|
Мережников Андрей (статус: Абитуриент), 21 августа 2008, 19:59 [#4]:
Используя SQL можно. Напишите структуру таблиц и что конкретно хотите получить.
|
|
Мережников Андрей (статус: Абитуриент), 21 августа 2008, 22:00 [#5]:
Ссылка, данная Игорем, в данном случае не поможет, чтобы значение из двух таблиц поместить в одно поле (т.е. в одной строке результирующей таблицы в поле помещается значение из первой таблицы, а вдругой строке в это же поле - из другой таблицы) необходимо использовать union
|
|
Вадим К (статус: Академик), 21 августа 2008, 23:06 [#6]:
Если у двух таблиц нет никакой связи, то вывести в две колонки можно только пробежав ручками вручную заполнив. Почему нельзя? - это противоречит идеологии реляционных баз данных. допустим, в одну с таблиц мы добавили немного данных. И теперь новый вывод никак не будет связан с предыдущими.
Хотя было бы неплохо, что бы вы, Танюшка, привели структуру таблиц и приблезительные данные. Возможно вы просто не понимаете, что мы хотим от Вас услышать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 09:38 [#7]:
структура пкрвой таблицы :
nom_raporta
pravonar
tab_nomer
dattt
структура второй таблицы:
nomer_protokola
tab_nomer
KP
data
summa_shtrafa
Выводятся из второй таблицы данные по полям nomer_protokola,KP, data,summa_shtrafa с условием отбора по полю tab_nomer
Из первой нужно вывести поля nom_raporta, dattt, pravonar .
условие отбора по тому же полю
я тут кое что делала:
select finans.data,finans.nomer_protokola,finans.KP,finans.summa_shtrafa as Meri from sotrudniky, finans where sotrudniky.fio = "'+GroupBox1.Caption+'" and sotrudniky.tab_nam = finans.tab_nomer union all select Nefin.nom_raporta as nomer_protokola, Nefin.dattt as data, Nefin.pravonar as KP, ' +s+ ' as Meri from Nefin,sotrudniky where sotrudniky.fio = "'+GroupBox1.Caption+'" and sotrudniky.tab_nam = Nefin.tab_nomer
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 09:46 [#8]:
но все равно ошибка : чего то про пунктуацию или пропущено зарезервированное слово в инструкции select
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 09:49 [#9]:
где s: string
s:= ' ';
|
|
Шичко Игорь (статус: 9-ый класс), 22 августа 2008, 09:58 [#10]:
Если про пунктуацию, то конструкции ... and ... дролжны браться в скобки, типа
where (sotrudniky.fio = "'+GroupBox1.Caption+'") and (sotrudniky.tab_nam = finans.tab_nomer) ...
... where (sotrudniky.fio = "')+GroupBox1.Caption+'" and (sotrudniky.tab_nam = Nefin.tab_nomer)'
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 10:06 [#11]:
нет наверно в чем то другом ошибка.... я поставила скобки все равно та же ошибка
|
|
Шичко Игорь (статус: 9-ый класс), 22 августа 2008, 10:18 [#12]:
А если вам связать таблицы по tab_nomer
Может будет проще работать
Если нет то попробуйте первую часть запроса отладить:
select finans.data,finans.nomer_protokola,finans.KP,finans.summa_shtrafa as Meri from sotrudniky, finans where (sotrudniky.fio = "'+GroupBox1.Caption+'") and (sotrudniky.tab_nam = finans.tab_nomer)'
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 10:21 [#13]:
с первой частью все нормально не работает при использовании union
|
|
Шичко Игорь (статус: 9-ый класс), 22 августа 2008, 10:37 [#14]:
Условия для Union:
1 Количество выходных столбцов каждого из запросов должно быть одинаковым.
2 Выходные столбцы каждого из запросов должны быть сравнимыми между собой (в порядке их следования) по типам данных.
3 В результирующем наборе используются имена столбцов, заданные в первом запросе.
4 Предложение ORDER BY применяется к результату соединения, поэтому оно может быть указано только в конце составного запроса.
Источник: http://www.sql-ex.ru/help/select6.php
|
|
Вадим К (статус: Академик), 22 августа 2008, 14:13 [#15]:
по поводу скобок.
Они нужны только если запрос очень сложный и надо правильно настроить порядок условий. В данном запросе они не надо.
по поводу Union.
Не знаю, каким боком он здесь.
По поводу "у меня получается неверный запрос!"
в таких случаях делаем так. сам запрос отдаём не только Query, а и выводим в Memo (если подумать, то это сделать очень просто, например где то так. Memo1.text = Query.sql.text . А потом смотрим на то, что получилось. Часто ошибку видно стразу. нет - публикуем в минифорум (часто желательно и сам код, который формирует запрос тоже запостить). С таким вариантом публикации проблемы, её решат на порядок быстрее.
Теперь по поводу "структуры таблицы".
То, что Вы привели - это просто список полей. Это никуда не годиться. Нормально было бы, если вывели ещё и типы полей а также краткий коментарий для некоторых.
Но даже выведенного материала мне пока хватило. присмотритесь к строке sotrudniky.tab_nam = Nefin.tab_nomer. там точно имя поля в левой части правильно написано?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 22 августа 2008, 14:17 [#16]:
И никогда не делайте
'"'+строковое_значение+'"', где строковое_значение приходит с внешнего мира. Возьму и напишу в виде
тест"; drop Nefin; ---"
за точный синтаксис не ручаюсь. И в результате будет бяка. запрос будет разбит на два, остаток закоментируется и таблица будет удалена. а можно и отредактировать таблицу в своих целях. Весело в общем
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 22 августа 2008, 15:52 [#17]:
В данной задаче union действительно не нужен. Был введен в заблуждение постановкой вопроса (поля из двух таблиц вывести в одно поле результирующей таблицы). Кроме связи таблиц в данном случае, думаю, надо связать их кроме табельного номера еще по полю даты. В противном случае запрос вернет все сочетания записей из двух таблиц при равенстве табельных номеров (хорошо если нарушение одно. а если их, например, 2, то вернется 4 записи). По поводу скобок и and - нет такого обязательного условия! Скобки ставятся только при необходимости изменить порядок вычислений, либо для удобочитаемости.
|
|
Мережников Андрей (статус: Абитуриент), 22 августа 2008, 15:59 [#18]:
Хотя, извините!!! У Вас три таблицы: finans, nefin, sotrudniky. Вам надо собрать все записи из таблиц finans и nefin, привязанные к определенной записи из sotrudniki, правильно? В таком случае, действительно, надо использовать union. Ошибка у Вас в том, что при использовании union порядок перечисления выводимых полей первого запроса должен СОВПАДАТЬ с порядком перечисления полей из второго запроса. Т.е., примерно так:
select finans.data,finans.nomer_protokola,finans.KP,finans.summa_shtrafa as Meri from sotrudniky, finans where sotrudniky.fio = "'+GroupBox1.Caption+'" and sotrudniky.tab_nam = finans.tab_nomer union all
select Nefin.dattt as data, Nefin.nom_raporta as nomer_protokola, Nefin.pravonar as KP, ' +s+ ' as Meri from Nefin,sotrudniky where sotrudniky.fio = "'+GroupBox1.Caption+'" and sotrudniky.tab_nam = Nefin.tab_nomer. Только что такое s в середине запроса перед as Meri?
|
|
Танюшка (статус: Посетитель), 22 августа 2008, 16:04 [#19]:
s переменная типа string, которая равна пробелу
использую я потому что у меня нет поля в таблице nefin поля Meri вот
|
|
Мережников Андрей (статус: Абитуриент), 22 августа 2008, 16:08 [#20]:
в данном случае нельзя использовать строковое значение - тип полей в обоих запросах должен совпадать. Поскольку в первом подзапросе у Вас стоит summa_strafa, то, скорее всего, это числовое значение. Соответственно во втором подзапросе вместо s поставьте ноль. Кстати, во втором подзапросе необязательно использовать запись as. Названия итоговым полям будут присвоены по первому подзапросу.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|