mckuroske: (Default)
[personal profile] mckuroske
Люди, кто-нибудь работает с таблицами Access? Никак запрос не могу сделать. Поля выводит, а данные в них - нет. А запрос на повторения вообще не хочет делать - говорит, компонента у него нет.

Date: 2005-10-15 01:53 am (UTC)
From: [identity profile] sevaa.livejournal.com
Я работаю.

Можно поподробнее? Какая таблица, какой запрос. Условие в запросе есть или нет? Запрос из одной таблицы или из нескольких?

Больше всего похоже, что запрос сформулирован так, что ни одна запись в таблице ему не удовлетворяет. В таких случаях как раз Access показывает заголовки полей и никаких данных. Проверьте вручную - откройте таблицу как таковую, посмотрите, есть ли там такие записи, как Вам надо. Если есть, значит, в запросе что-то не так...

Есть еще такой вариант, что таблица сама по себе пустая :)

Date: 2005-10-15 03:21 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Ситуация следующая: есть две таблицы, которые я хочу частично объединить. Для этого я пытаюсь создать запрос из столбцов (текстовых) с одинаковыми названиями из этих двух таблиц (есть столбец "слово", есть столбец "перевод", "сочетание" и т.п.). Когда я создаю запрос, я, как показано в Справке, "перетаскиваю" мышью названия столбцов из одной таблицы в другую, потом задаю эти названия в форме. Открывается только "рамка", т.е. только названия столбцов. Я понимаю, что это я делаю что-то неправильно, но не понимаю, что.

Date: 2005-10-15 02:36 pm (UTC)
From: [identity profile] sevaa.livejournal.com
В целом ясно. Я так понимаю, что есть две таблицы, и в каждой есть колонка "слово" - надо полагать, ключевая (т. е. уникальная, не больше одной строки на каждое слово). И Вы хотите поиметь некий запрос, в котором колонки о словах из первой сочетаются с другими колонками о том же слове, из второй. Тогда Вы все делаете в целом правильно.

Удостоверьтеся, что в запросе линия-связь протянута *только* между колонками "слово". Остальные колонки, которые Вы хотите поиметь в результатах, достаточно дважды-кликнуть, чтобы они внизу появились, в списке полей запроса. На простом языке это означает: "мне надо объеденить записи из Таблицы-1 и Таблицы-2, у которых одинаковое Слово, и показать Перевод и Сочетание".

С учетом той информации, что Вы мне дали, я подозреваю, что у Вас в запросе лишние связи протянуты. Проверьте.

Чтоб связь удалить, надо ее мышом кликнуть - выделить, то есть - и кнопку Delete нажмакать. Или можно весь запрос пересоздать заново.

Ганбаттэ. :)

Date: 2005-10-15 11:22 pm (UTC)
From: [identity profile] mckuroske.livejournal.com
Ага. Спасибо. Но это все-таки не совсем то, что мне надо на данный момент (хотя это тоже надо будет). Мне, скорее, просто надо составить одну таблицу из двух (в которой присутствовали бы только НЕКОТОРЫЕ столбцы из этих двух таблиц, но все строки из этих столбцов). А что получится если так, как Вы говорите? Останутся только повторяющиеся слова?

Date: 2005-10-15 11:40 pm (UTC)
From: [identity profile] sevaa.livejournal.com
Если так, как я сказал, то в запросе будут те слова, которые есть как в первой таблице, так и во второй. Причем поля первой таблицы будут, так сказать, параллельно полям из второй.

Похоже, Вам нужно другое - чтоб сначала шли все слова из первой таблицы, а потом все слова из второй. Это тоже делается, но сложнее.

Составьте запрос, который возвращает все, что нужно, из первой таблицы. Составьте запрос, который возвращает все, что нужно, из второй таблицы. Создайте третий запрос, пустой. Откройте все три и переведите их всех в SQL View. Там есть такая кнопочка слева, переключение видов запроса - есть Design View, есть Data View, есть SQL View. Теперь возьмите текст первого запроса, перенесите в новый-пустой, потом напечатайте руками слово UNION, потом перенесите туда текст второго запроса. Должно получиться что-то вроде:

SELECT Field1, Field2, Field3 FROM Table1
UNION
SELECT Field1, Field2, Field3 FROM Table2

Выполните запрос (можно перейти в Data View, можно нажать кнопку с восклицательным знаком). Удостоверьтесь, что там именно то, что надо. Снесите два частных запроса, сохраните общий. Вот и все.

Наск. мне известно, визуально эти вещи не делаются, увы и ах... Таков Access. А еще, впредь не создавайте больше одной таблицы для хранения однотипных данных. :) И не придется UNION queries писать.

Date: 2005-10-15 11:50 pm (UTC)
From: [identity profile] mckuroske.livejournal.com
Да уж... Как все сложно.
Спасибо огромное, вернусь домой из гостей - буду пробовать. Ничего, если я еще за помощью обращаться буду? Спасибо!

Date: 2005-10-16 02:03 am (UTC)
From: [identity profile] sevaa.livejournal.com
Пожалста, заходите к нам еще. :) I'm here all week. Try the veal. (цитата)

>>Как все сложно.

Ничего запредельно сложного. Возможность склеить два запроса в две один за другим есть, просто это не визуально делается, а через голый SQL...

Date: 2005-10-16 07:30 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Про SQL я знаю только, что он есть. На этом все мои знания исчерпываются. Этакое трансцендентное представление. Или трансцендентальное.
До дома добралась, сейчас пробовать буду.
Кстати, а откуда цитата?

Date: 2005-10-16 07:53 pm (UTC)
From: [identity profile] sevaa.livejournal.com
Из Шрека (первого), сцена, где драка с рыцарями в дворике замка. Самый конец.

Date: 2005-10-16 11:58 pm (UTC)

Date: 2005-10-16 09:24 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Ага. Почти получилось. Только вот из-за того, что эти столбцы в 1й и 2й таблицах в разном порядке, в результате все смешалось. И почему-то не хочет исправляться. В каком месте надо исправлять? В исходных таблицах? Еще когда я выборку делаю? Или можно уже в SQL?
Впрочем, я завтра на свежую голову еще разок попробую. Но все равно, спасибо огромное, Вы мне очень помогли.

Date: 2005-10-16 08:08 pm (UTC)
From: [identity profile] sevaa.livejournal.com
Лучше в выборке, чтоб не лезть в схему таблицы без нужды. Поля в выборке могут идти в любом порядке, вне зависимости от того, как они идут в исходной таблице. Это можно напрямую через SQL поправить - так, наверное, даже легче. Вспоминаем базовую идею:

SELECT Field1, Field2, Field3 FROM Table1
UNION
SELECT Field1, Field2, Field3 FROM Table2

Надо поглядеть внимательно на два последовательно идущих SELECTа (вот как здесь у меня), и удостовериться, что порядок полей после слова SELECT одинаковый в верхнем и в нижнем SELECTе. Ну то есть чтобы соответствующие друг другу поля из первой и из второй таблицы стояли ровно друг над другом. Я понятно объясняю?

Если поля в первой и второй таблице содержат одинаковые данные, но называются по-разному, это тоже не беда. Главное, чтоб колонки таблиц, которые Вы хотите увидеть в запросе вместе в одной колонке, были одна над другой.

Можно подобного результата и визуально добиться, через выборки. При редактировании первой и второй выборки обратить внимание на то, чтобы они имели одинаковую структуру (за счет изменения порядка полей по сравнению с исходной таблицей), а потом их склеить через UNION. Сухой остаток будет ровно такой же.

К слову, можно еще потом сквозную сортировку сделать - будет весьма вкусно. "Но это совсем другая история."

Date: 2005-10-17 12:02 am (UTC)
From: [identity profile] mckuroske.livejournal.com
В общем-то, с логикой у меня с детства было все нормально, и до поправки через SQL я тоже допетрила, но почему-то не получилось.
Впрочем, сегодня я сделала поправки в выборке, и все срослось. СПАСИБИЩЕ!!!
А что такое сквозная сортировка? (я просто еще не до конца додумала, что мне, собственно, с этими таблицами делать надо - а вдруг пригодится).
И еще вопрос (ничего, что я такая наглая?): запрос на повторение выдает мне просто список повторяющихся слов с количеством повторений (правда, сейчас он почему-то не работает, утверждает, что у него нет нужного для этого компонента). А существует ли вариант создать таблицу, из которой повторения будут ВЫБРОШЕНЫ? Так сказать, запрос на уникальность?

Date: 2005-10-17 02:16 am (UTC)
From: [identity profile] sevaa.livejournal.com
>>А что такое сквозная сортировка?

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

>>А существует ли вариант создать таблицу, из которой повторения будут ВЫБРОШЕНЫ? А существует ли вариант создать таблицу, из которой повторения будут ВЫБРОШЕНЫ?

Вопрос задан некорректно. Точнее, это два вопроса. Вы смешали две задачи - как удалить повторения из таблицы и как создать запрос, который не возвращает повторений. И то, и другое в принципе делается - через SQL.

В Вашем случае ситуация немного усложняется тем, что у Вас две таблицы. Если одно и то же слово встречается и там, и сям, то это тоже считать как повторение? Потом еще вопрос, если есть две записи об одном и том же слове, которую из них выбросить, а которую оставить? А вообще повторений там много? Повторяется только само слово или вся сопутствующая информация тоже? Может, ручками проще почистить? :)

Есть одно быстрое решение, но оно не очень универсально. После SELECT надо вставить слово DISTINCT (везда, где есть SELECT). Тогда если у Вас есть несколько повторяющихся *полностью* записей, то в результаты запроса попадет лишь одна из них. Тяп-ляп, но для совсем уж запущеных случаев работает...

О некорректных вопросах

Date: 2005-10-17 02:26 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Да, вопрос некорректный. Мне не надо эти записи УДАЛЯТЬ, мне надо выяснить, сколько их там у меня и чем они отличаются.
То есть, например, создать некую выборку, где будут присутствовать только повторяющиеся слова, но с другими переводами. Или выборку, из которой действительно будут удалены ПОЛНОСТЬЮ повторяющиеся строки (т.е. когда одно слово переведено одинаково в разных случаях - впрочем, здесь повторяться будут, допустим, только данные в трех столбцах (слово-его сочетание-перевод).
Еще подробнее: я анализирую способы перевода. Вот есть одно слово, которое в разных контекстах переводится по-разному. Или, наоборот, везде одинаково. И мне надо выяснить, какие факторы влияют на эту разность или одинаковость (скажем, если оно выполняет такую функцию, то перевод такой, а если другую - то другой; или если оно сочетается с такими-то словами, то... , а если с другими, то ...).
В общем, сложно это все. Главное, что у меня пока в голове не сложилось до конца, КАК я хочу это анализировать. Первые шаги только.

Только не говорите мне, что в Аксессе это не делают. А то я плакать начну.

Re: О некорректных вопросах

Date: 2005-10-17 02:40 am (UTC)
From: [identity profile] sevaa.livejournal.com
Делают, отчего же. Не надо плакать. :)

Чтоб мне было проще, нельзя ли конкретизировать? Как называются таблицы, какие в них поля - не напишете ли? Типы полей не обязательно; достаточно названий. Тогда я смогу готовый к употреблению SQL для Вас сочинять. А то мне все труднее становится объяснять в общих словах. Да еще я не имею возможности помогать себе гримасами и жестикуляцией - совсем тяжко.

Все перечисленные задачи решаются, но тут уже кое-где мне проще сочинить готовый запрос, чем объяснить в общих терминах, как к этому придти. Придется в Высокую Теорию с ногами залезать, а мне неохота, да и Вам, наверное, это незачем...

Re: О некорректных вопросах

Date: 2005-10-17 02:48 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Ух, ты! Прям так все и поможете?
Ладно, тогда я у себя в голове сначала все сформулирую, что мне надо...
А таблицы такие:
таблица kazeuta
поля: gitaigo, сочетание, перевод, text, текст, код, page, стр, толкование, функция, сочетаемость, прием/способ, комментарий, вопросы
таблица pinball
поля те же
(названия полей именно так и идут - одни латиницей, другие русскими буквами)
Для анализа мне, пожалуй, нужны только
gitaigo, сочетание, перевод, толкование, функция, сочетаемость, прием/способ, комментарий.
Но этот запрос (объединив таблицы) я уже с Вашей помощью составила.
Дальше, собственно, сам анализ. По-хорошему, надо сравнивать приемы перевода (объединить их в группы - это, видимо, просто как запрос на повторения сделать; получатся названия групп и количество повторений, правильно?) и найти зависимость (если она вообще есть) от сочетаемости и функций gitaigo (это класс слов такой). Вот над этим я сейчас думаю. Составить новый запрос по столбцу прием/способ? Или сразу по двум столбцам (gitaigo , а потом прием/способ)?
В общем, я ведь функции Аксесса тоже плохо себе представляю, поэтому не знаю, что можно сделать.

Re: О некорректных вопросах

Date: 2005-10-17 03:15 pm (UTC)
From: [identity profile] sevaa.livejournal.com
Ой-ой. Что ж Вы, на каждую новую книжку будете отдельную таблицу с такой же структурой заводить? Не проще ли свалить все в одну таблицу, и ввести дополнительное поле "Книжка"?

Чтоб совсем по науке, это поле можно сделать численным, с условными кодами: 1 - "Слушай песню...", 2 - "Пинболл", и так далее. Запросы слегка быстрее отрабатываться будут - поиск-фильтрация-сортировка по числу работают, естесссно, быстрее, чем по тексту.

И тогда бы Вам даже не пришлось бы задумляться, что есть UNION query и с чем его едят. :)

Но это все так, соображения... Теперь конкретика.

Запрос, который возвращает все слова, которые ПОВТОРЯЮТСЯ (т. е. где есть больше одной строки на слово, считая обе таблицы вместе):

SELECT *
FROM [Murakami-no gitaigo/giseigo] m1
WHERE (SELECT count(*) FROM [Murakami-no gitaigo/giseigo] m2 where m1.gitaigo=m2.gitaigo)>1

(звёздочка означает "все поля")

Запрос, который возвращает все УНИКАЛЬНЫЕ сочетания звукоподражание-перевод (т. е. если некое сочетание встречается несколько раз - повторения будут убраны.

SELECT DISTINCT gitaigo, перевод
FROM [Murakami-no gitaigo/giseigo]

(разбивка запроса на несколько строк - мой произвол. SQL к этому равнодушен)

Запрос, который возвращает все различные способы и сколько раз они употребляются:

SELECT [прием/способ], count(*)
FROM [Murakami-no gitaigo/giseigo]
GROUP BY [прием/способ]

Этот запрос сразу скажет, какой прием более популярный. Особенно если сортировку по убыванию второго поля сделать.

Думайте, что Вам еще надо...

Ноги мыть и воду пить (с)

Date: 2005-10-17 11:56 pm (UTC)
From: [identity profile] mckuroske.livejournal.com
Спаситель Вы мой!!!
Объединить все в одну таблицу с кодами книг мне, конечно, в голову не пришло. Это гениально. Попробую.
Думаю, пока мне хватит. Если что еще придумаю - обращусь.

СПАСИБИЩЕЕЕЕЕЕЕ!!!!! С меня - на выбор - пиво, кофе, домашние пироги, встреча в аэропорту и т.п. (вы где живете-то хоть?)

Re: Ноги мыть и воду пить (с)

Date: 2005-10-18 12:27 am (UTC)
From: [identity profile] sevaa.livejournal.com
А какой аэропорт смотря. :)

Вашингтон, уже лет семь тому как. До того - Москва. Бываю в таковой... э... что-то раз в год-полтора при хорошем раскладе. Но в Японию я тож хочу! :) "Говорить мы по-ихнему уже умеем..." (цитата)

Не перейти ли в приват? Разговор пошел явно не по теме... sevaa собачка sprynet точка ком. Давайте знакомиться. Френдить не предлагаю - у меня журнал не из интересных.

Re: О некорректных вопросах

Date: 2005-10-17 02:58 am (UTC)
From: [identity profile] mckuroske.livejournal.com
Да, поля, естественно, все текстовые (кроме кода и страниц). Объединенный запрос был обозван мною Murakami-no gitaigo/giseigo
А где брать компонент для установки? Нужен диск с Офисом, да?

Profile

mckuroske: (Default)
mckuroske

January 2026

S M T W T F S
     123
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 5th, 2026 02:04 pm
Powered by Dreamwidth Studios