Объединение нескольких рекордсетов...

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Stout
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 18.01.2004 (Вс) 14:55
Откуда: Самара

Объединение нескольких рекордсетов...

Сообщение Stout » 18.01.2004 (Вс) 16:17

DAO 3.6
Есть некоторое количество рекордсетов, полученных в результате SQL запросов к различным *.mdb. В каждом РС - два поля и произвольное количество записей. Первое поле у всех рекордсетов одинаково - это дата, второе(integer) - может быть как уникальным для каждого так и совпадающим с другим РС. Задача - объединить все рекордсеты в один так, чтобы в результирующем РС совпадающие поля "сливались", а записи были бы отсортированы по дате.

Примерно так:

Изображение

Заранее благодарен!

amda
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 134
Зарегистрирован: 11.09.2002 (Ср) 15:14
Откуда: Russia, Волгоградская обл., г. Волжский

Сообщение amda » 20.01.2004 (Вт) 0:23

такие задачки (как и многое другое :wink:) я обычно решаю с помощью Access. если у кого-то будут идеи, как это сделать на чистом VB, то мне тоже будет очень интересно. У меня самого опыта с базами в VB маловато :oops:
У вас нет доступа для просмотра вложений в этом сообщении.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 20.01.2004 (Вт) 14:35

Ну, можно создать новый объект Recordset и добавлять туда данные ручками: поискали дату. Нашли? - изменили значение в нужной колонке. Нет колонки? - добавили. Не нашли дату? - добавили строчку и тд.

amda
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 134
Зарегистрирован: 11.09.2002 (Ср) 15:14
Откуда: Russia, Волгоградская обл., г. Волжский

Сообщение amda » 20.01.2004 (Вт) 20:45

Rainbow писал(а):... и добавлять туда данные ручками...

ну мы же программисты, наверное!...
зачем такое предлагать? Можно было хотя бы мой пример (РАБОТАЮЩИЙ) посмотреть. Я только реализацию его на чистом VB не могу сделать (не потяну). Это единственная проблема. А знаток баз данных понял бы мою идею и легко с правился бы с задачей.
Организм человека содержит столько извести, что ее хватит на побелку курятника. (Hенужная информация)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.01.2004 (Ср) 11:22

Вот объяснил бы ты мне, гений программирования баз данных, чем DAO отличается в Аксесе от чистого ВБ, цены бы тебе не было, чесслово :roll:

А то фраза "нет опыта с базами в ВБ" уже ктороый год повергает меня в горестные раздумья по поводу "опыта с базами вообще" :(

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 21.01.2004 (Ср) 14:28

программисты, которые работают с БД, наверное, умеют таблички соединять. А проблемы возникают, когда НЕТ такой возможности.

Держи работающий пример.
только путь к базе поправь в ConnectionString
У вас нет доступа для просмотра вложений в этом сообщении.

Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Сообщение Oldman » 22.01.2004 (Чт) 14:39

А с помощью SELECT не вариант? Там есть слияние таблиц в одну с совпадающими данными, исключающими данными и т.д. :?
Ежики не колются, только бухают иногда

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 22.01.2004 (Чт) 16:41

SELECT откуда?
рекордсеты из РАЗНЫХ mdb.

О, есть абсолютно сумасшедшая мысля. Создать временные таблицы в БД, там их слить SELECT'ами, а потом результат вытащить :shock:

Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Сообщение Alex404 » 23.01.2004 (Пт) 10:54

Код: Выделить всё
Set База = OpenDatabase(App.Path & "\db1.mdb")

SQL_1="SELECT Date as D, Value1 as V1, 0 as V2, 0 as V3 FROM tblONE"
SQL_2="SELECT Date as D, 0 as V1, Value2 as V2, 0 as V3 FROM tblONE IN '" & App.Path & "\db2.mdb' "
SQL_3="SELECT Date as D, Value1 as V1, 0 as V2, 0 as V3 FROM tblONE IN '" & App.Path & "\db3.mdb' "
SQL_4="SELECT Date as D, 0 as V1, 0 as V2, Value3 as V3 FROM tblONE IN '" & App.Path & "\db4.mdb' "

strSQL="(" & SQL_1 & ") UNION (" &  SQL_2 & ") UNION (" & SQL_3 & ") UNION (" & SQL4 & ") "

strSQL="SELECT D, SUM(V1) as Val1, SUM(V2) as VAL2, SUM(V3) as VAL3 " & _
       "FROM (" & strSQL & ") " & _
       "GROUP BY D " & _
       "ORDER BY D ASC "

Set RS = База.OpenRecordset(strSQL)

На работоспособность не проверял, но работать ДОЛЖНО...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 3

    TopList