| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |