Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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]:

НЕТ
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 21 августа 2008, 15:50 [#3]:

Попробуйте посмотреть
http://www.sql-ex.ru/help/select5.php#from
Может что поможет
Если нет, то конкретнее опишите задачу
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 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] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.02 сек.