Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите решить проблему
 
 автор: 666Skyline   (18.12.2007 в 09:52)   личное сообщение
 
 

Значит такое задание (надо написать модуль в Access):
1)есть таблица (например "ааа") 3х5 (3 строки по 5 полей)
2) необходимо сравнить содержимое 1х1 и 2х1, если равны------- добавить значения 2х2,2х3,2х4,2х5 в 1х2,1х3,1х4,1х5, а потом 2 строку удалить.
3)все ето нада в цикле ,чтобы проверяло всю таблицу

Сорри за такой вопрос, но я только недавно начал изучать Access и VBA.
Если можно хоть какието примеры или ссылки на ресурсы где ето можно глянуть.....

  Ответить  
 
 автор: osmor   (18.12.2007 в 17:01)   личное сообщение
 
 

ваша задача не типична для реляционных БД.
Возможно Выне верно создали структуру БД.

  Ответить  
 
 автор: Explorer   (19.12.2007 в 02:38)   личное сообщение
 
 

это, поди, курсовик ИМХО (допустим на скорую руку)

ЗАДАНИЕ:

дано таблица tblData


Column1
Column2
,,,
Column5


таблица содержит три записи, нас волнуют значения в Column1 каждой из записей

нужно сравнить значение двух соседних записей на равенство по первому полю (Column1)

если значения Column1 двух соседних записей равны
добавить в одну из записей (в данном случае по ТЗ правого плеча равенства)
значения всех (кроме первого) полей записи левого плеча равенства, соответственно
и одну из этих записей удалить (про третью запись в ТЗ вообще ничего не сказано)

предположим три возможных варианта по несколько комбинаций


1) все значения в Column1 в соседних записях не равны
1а) <a-b-c>
1б) <a-c-a>



2 все значения column1 во всех записях равны
2а) <a-a-a> 




3) какие-то два значения в соседних записях равны
3а) <a-a-c>
3б) <b-a-a>

_________________________________

ДОПУЩЕНИЯ:

ИМХО можно предположить что в случае трех записей в таблице мы спокойно можем
отбирать записи по First и Last, поскольку предполагаем что:


А) все минимально необходимые для решения данные приведены в условии
Б) First<Middle<Last OR First>Middle>Last (при 3-х записях фиолетово)
В) задача имеет смысл и, вероятно, решение (или может иметь решение)

задача сводится к сравнению "трех разноцветных кошек сидящих на скамейке в ряд"
_________________________________

ТЕХ. ЗАДАНИЕ:

приводя задачу к нормальному виду

нужно удалить некоторую одну запись в таблице, предыдущую той, значения Column1
которой совпадает со значением Column1 той, что должна быть из таблицы удалена

или

из трех кошек сидящих в ряд, нужно выкинуть одну кошку сидящую слева от той с которой она
одинакового окраса и никого не волнует какого цвета у нее глаза или какой она носит бантик

выкрики на тему: -"а как же с переносом значений (часть 2 п. 2 ТЗ)" оставим на совести вопиющих
в такой формулировке задача не представляет никакой сложности - на слабую 3-ку по информатике


_________________________________
АКСИОМА:

если любое из допущений покажется автору вопроса слишком смелым
он отправляется убивать себя ап стену (as Variant учить олбанский)
_________________________________

РЕШЕНИЕ:

1а); 1б) все кошки тупо курят или идут по домам
2а); 3а) первая кошка вылетает в трубу
зб) вторая кошка вылетает в трубу

ПРИМЕЧАНИЕ:

остальное комбинаторика - типо "равнение налево" (для кошек)
вопрос только в том, сколько сравнений нужно произвести


вылетает только одна кошка (про третью ничего не сказано в ТЗ)
во всех случаях третья кошка вообще и не думает напрягаться
перекрашивать кошек в другой цвет нет ровно никакого смысла

ЗЫ

счет ведется слева направо, кошки сидят к нам лицом :)

_________________________________
ДИСКЛАЙМЕР:

последовательность приведенных допущений не существенна
Осмору респект за терпение и извинения за нетерпимость

  Ответить  
 
 автор: 666Skyline   (21.12.2007 в 12:32)   личное сообщение
 
 

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

Немного перефразирую

таблица типа

код Параметр 1 Параметр 2 Параметр 3
111 123 234 345
111 123 235 346
112 123 236 347

1) сравниваем по полю (код)
2) если одинаковые то :

код Параметр 1 Параметр 2 Параметр 3
111 123 123 234 235 345 346

112 123 236 347

2.1)если нет то: проверить следующие поле и т.д

Плиз, хотябы варианты реального кода, где рыть

  Ответить  
 
 автор: Explorer   (21.12.2007 в 18:25)   личное сообщение
 
 

>Плиз, хотябы варианты реального кода, где рыть

опиши задачу в терминах предметной области, а рыть тебе в сторону формализации задачи.

ты что-то совсем косое затеял - тут Osmor прав

  Ответить  
 
 автор: час   (21.12.2007 в 20:41)   личное сообщение
 
 

весит 200 мб потому немогу выложить

  Ответить  
 
 автор: 666Skyline   (22.12.2007 в 10:43)   личное сообщение
 
 

Ну очень большая база, 426000 строк в таблице, 42 поля

В ней есть строки в которых первое поле имеет значение которое повторяються , задача в том чтобы
всех полей всех строк у которых значение первой строки одинаковое в одну строку.......

  Ответить  
 
 автор: Explorer   (24.12.2007 в 01:03)   личное сообщение
 
 

кривое ТЗ неохота возиться... тем более 42 поля непонятного типа и неизвестной длины... слишком много неясностей -

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

и самое главное - что потом со всем этим делать? :)

копаться для того, чтобы выяснить что ты сам не знаешь чего хотел? уже сейчас поменялась формулировка и суть задачи...

в общем случае ГетСтринг тебе в руки

Function GetAsString(GroupBy As String) As String
Dim rst As New ADODB.Recordset
Dim strSQL As String

strSQL = "Select * From MSysObjects where Type = " & GroupBy & ";"
rst.Open strSQL, CurrentProject.Connection

GetAsString = rst.GetString

rst.Close
Set rst = Nothing

End Function

  Ответить  
 
 автор: час   (24.12.2007 в 08:50)   личное сообщение
 
 

если я правильно понял
Надо создать запрос поиск повторений для поля 1.
Потом удалить лишние строки, добавляя из этих лишних - значения в поля, остающихся записей.
Так? или не так?

  Ответить  
 
 автор: 666Skyline   (26.12.2007 в 15:06)   личное сообщение
 
 

Так

Мне стыдно за свое нубство

  Ответить  
 
 автор: osmor   (26.12.2007 в 15:15)   личное сообщение
 
 

давайте так.
создайте копию БД
удалите все кроме нужной таблицы в ней оставьте 20-100 строк наиболее показательных.
Создатей таблицу которая должна получиться в результате
впишите в нее данные которые должны получится.
типа Есть - надо.
Кладите этот MDB сюда или на Slil.ru

  Ответить  
 
 автор: 666Skyline   (27.12.2007 в 17:48)   личное сообщение
 
 

www.slil.ru/25294763

  Ответить  
 
 автор: час   (27.12.2007 в 17:59)   личное сообщение
21 Кб.
 
 

АААААААААААААААААААА
ну ты прям как я задаешь вопросы
не поймешь чё хошь.
Так бы сразу и сказал.
надо все данные об одном больном- объединить в одну строку?
Да?
тада вот так...............

  Ответить  
 
 автор: час   (27.12.2007 в 18:42)   личное сообщение
26 Кб.
 
 

И вот концовочка..........

  Ответить  
 
 автор: 666Skyline   (27.12.2007 в 18:51)   личное сообщение
 
 

В принципе да,
Только мне нада модуль к асесу ,

Еще бы небольшой хелп.....

  Ответить  
 
 автор: osmor   (27.12.2007 в 19:23)   личное сообщение
30 Кб.
 
 

В общем виде решение может быть таким
1-й запрос на создание ноыой таблицы с таким же набором полей, и записями с уникальным ключем из исходной таблицы:


SELECT Есть.[Код больного], First(Есть.[Дата рождения]) AS [Дата рождения], First(Есть.[Дата обследования]) AS [Дата обследования], Null AS [UnionОбъем правой доли], Null AS [UnionОбъем левой доли], Null AS UnionПерешеек, Null AS [UnionУзловые образования], Null AS UnionДлина, Null AS UnionШирина, Null AS UnionЛокализация INTO Новая
FROM Есть
GROUP BY Есть.[Код больного];


Второй запрос который заполнит таблицу созданную запросом один данными из разных записей с одинаковым ключем:


UPDATE Новая INNER JOIN Есть ON Новая.[Код больного]=Есть.[Код больного] SET Новая.[UnionОбъем правой доли] = ([UnionОбъем правой доли]+", ") & [Объем правой доли], Новая.[UnionОбъем левой доли] = ([UnionОбъем левой доли]+", ") & [Объем левой доли], Новая.UnionПерешеек = ([UnionПерешеек]+", ") & [Перешеек], Новая.[UnionУзловые образования] = ([UnionУзловые образования]+", ") & [Узловые образования], Новая.UnionДлина = ([UnionДлина]+", ") & [Длина], Новая.UnionШирина = ([UnionШирина]+", ") & [Ширина], Новая.UnionЛокализация = ([UnionЛокализация]+", ") & [Локализация];


После запуска обеих запросов получим таблицу в нужными данными
ПРимер см. в аттаче
теорию можно почитать тут
http://hiprog.com/index.php?option=com_content&task=view&id=334&Itemid=35
я использовал метод 3

  Ответить  
 
 автор: 666Skyline   (27.12.2007 в 19:32)   личное сообщение
 
 

ОГРОМНОЕ СПАСИБО

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList