Рекордсет. Статьи

Программирование на Visual Basic for Applications
LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Рекордсет. Статьи

Сообщение LexRema » 26.04.2006 (Ср) 16:05

Здраствуйтие. Нужно поизвращаться над рекордсетом (очень сложный запрос, который формируется онлайн). В подробности пока влазить не буду. Дайте ссылки на статьи по данной теме, пожалуйста. А дальше видно будет :).
Language:
VBA Access
Я не волщебник... Но и не волшебников прошу не доставать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.04.2006 (Ср) 16:07

В чем будут заключаться извращения?
Lasciate ogni speranza, voi ch'entrate.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 26.04.2006 (Ср) 16:15

подозоеваю, что в изобритении нового вида транспорта под название велосибед :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.04.2006 (Ср) 16:19

Ramzes, ты про пункт правил 5.6 не забыл? :)
Lasciate ogni speranza, voi ch'entrate.

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 26.04.2006 (Ср) 16:23

2 таблицы: т1,т2. В одной поля а,б,с, в другой - с,д,е. Как посредством подзапроса выбрать т1.а и соответствующие ему поля т2.е через промежуточное поле "с" ?



Это надо обязательно выбирать отдельно. ТОЕСТЬ ПОДЗАПРОС!
Но подзапрос такой осуществить невозможно. Поэтому нужно выбирать все, а далее работать с рекордсетом.

Выбирать отдельно каждое поле - для того , чтобы можна было установить или НЕ установить дистинкт для каждого поля в отдельности.

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

Но все это в общем как -то сложно и грузно... пока надо разобрать рекордсет... А далее видно будет. Может, не так страшен черт.
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 26.04.2006 (Ср) 16:27

У меня даже не очень получаеться описать, что нужно :oops:
А вопросы просто от фонаря задавать не люблю. Поэтому хотел ознакомииться сначала с лит-рой.
Я не волщебник... Но и не волшебников прошу не доставать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.04.2006 (Ср) 16:27

Клиентский рекордсет и Filter тебе помогут.
Lasciate ogni speranza, voi ch'entrate.

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 26.04.2006 (Ср) 16:29

о чем бы я и хотел почитать :)
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 26.04.2006 (Ср) 16:32

Ладно. Пока посмотрю хелп. И на том спасибо.
Вроде велосипед уже изобрели? :)
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 26.04.2006 (Ср) 16:56

А что такое "Клиентский рекордсет"?
Я не волщебник... Но и не волшебников прошу не доставать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.04.2006 (Ср) 17:03

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

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 27.04.2006 (Чт) 18:13

Ок. Намек понял.

Вопрос.
есть рекордсет. В нем записи. В столбцах. как задать параметр фильтру, чтобы после отсеивания остались только те записи, которые соответствуют НЕПОВТОРЯЕМЫМ значениям в ЗАДАВАЕМОМ столбце?
Тоесть нужен сам параметр.
И, если можна, пример записи.
Я не волщебник... Но и не волшебников прошу не доставать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.04.2006 (Пт) 5:56

Нет такого фильтра.
Подобный функционал обеспечивается на SQL.
Если SQL недоступен и есть только готовый рекордсет, то .Sort = "Column1", после чего ручной поиск дубликатов в Column1 становится тривиальным.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 28.04.2006 (Пт) 14:54

Да, в принципе, вариант с поиском осуществим. И наверное Придеться осуществлять.
SQL доступен, но вот результат данной задачи не совсем тривиален. Дистинкт можна задать для всех записей, но как решить задачу, когда нужно одним столбцам (значениям в этих столбцах) приказать не повторяться, а другим - разрешить повторение?
Я не волщебник... Но и не волшебников прошу не доставать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.04.2006 (Пт) 15:02

Соединить два запроса через UNION (ALL)?
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.04.2006 (Пт) 15:04

Код: Выделить всё
SELECT *
FROM Table1
WHERE id IN (SELECT Column1 FROM Table1 GROUP BY Column1 HAVING COUNT(*) = 1)

Коряво, но работает.
Можно разбить на два запроса - тогда и INNER JOIN прокатит.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 28.04.2006 (Пт) 15:19

Реализовываться все должно онлайн. Тоесть возможно проще будет работать с глобальной выборкой потом в рекордсете. Заглядывая за край, уточню, что выборка идет из всей базы. связи в таблицах древовидные, только по названиям полей. Тоесть выбирая из всех таблиц нужно указать where (таблица1.поле=таблица2.поле). При чем таких указываний немало - таблиц неограниченое количество.
Я не волщебник... Но и не волшебников прошу не доставать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.04.2006 (Пт) 15:24

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

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 28.04.2006 (Пт) 16:27

Ребята, а как насчет GROUP BY. Ведь при задании этого параметра для полей, которым нельзя повторяться.... Некоторые будут повторяться, но не будет утраты данных.
Я не волщебник... Но и не волшебников прошу не доставать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.04.2006 (Пт) 16:33

Мысль не ясна.

[Add]
А, нет, мысль почти ясна...
А как опредлить, что из двух повторяющихся по одному полю записей эту оставить, а эту нет?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 12.05.2006 (Пт) 19:29

Пока и я не могу определить, какая задача поставлена. Но и этот вариант задано проработать.

Возник промежуточный вопрос... О запросе с тем же груп бай.

SELECT Заказано.КодЗаказа, Заказано.Скидка FROM Заказано GROUP BY Заказано.КодЗаказа

Даная команда вызывает сомнения у запроса...
"Попытка выполнить запрос, который не включает указаное выражение "скидка" как часть статистической функции или групы."

У меня же недоумение вызывает то, что синтаксические конструкции :

SELECT Заказано.Скидка FROM Заказано GROUP BY Заказано.Скидка;

SELECT Заказано.КодЗаказа, Заказано.Скидка FROM Заказано GROUP BY Заказано.КодЗаказа, Заказано.Скидка;

SELECT Заказано.Скидка FROM Заказано

работают нормально... Как это обьяснить?
Я не волщебник... Но и не волшебников прошу не доставать

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 12.05.2006 (Пт) 20:37

Все правильно, так и задумано.
В GROUP BY должны перечисляться все поля, которые присутствуют в SELECT (кроме тех, которые являются аргументами агрегатных функций).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 16.05.2006 (Вт) 19:42

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

В принципе, вариант с груп бай отпал именно изза его, так сказать, деревьяности... ну не вобщем, а именно для данного вопроса.
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 17.05.2006 (Ср) 18:59

Новый вопрос

ребят, очень срочно...

1.Есть две таблицы с одинаковыми полями. Как в конец одной добавить другую (програмно).

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

результатом и 1), и 2) будет таблица

Прошу, приведите примеры. Походу оно должно просто реализовываться, только если знать, как это сделать. Если не ответите, придеться открывать новую тему. :(
Я не волщебник... Но и не волшебников прошу не доставать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.05.2006 (Чт) 2:22

1. INSERT INTO table1(f1,f2,f3) SELECT f1,f2,f3 FROM table2
2. Нафига?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 18.05.2006 (Чт) 9:39

:) Извини, но с чуством юмора за день до сдачи задания у меня проблемы.

1. А это подойдет, если я буду указывать
INSERT INTO table1 SELECT table2.* FROM table2
У меня на этом шаге нет названия полей

2.Это просто нужно. Это возможно? Плиз!
Можна предыдущую таблицу грохать, тоесть создал таблицу - сделал с ней, что захотел... - грохнул, или под ее же именем создал таблицу со следующей строкой.

Это нужно, чтобы сделать очень крутую выборку. Имея такую темптаблицу, я могу через INNER JOIN выбрать соответствующее моей таблице ТОР Х елементов из другой таблицы. А потом эту выборку присоеденить к некоторой общей таблице. Общий замутизм алгоритма практически реализован. Осталось только это. Подскажите.
И пожалуйста, желательно именно это... а то переписывать и придумывать что-то новое уже некогда.
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 20.05.2006 (Сб) 19:13

такое чувство, что я покинут ... и одинок... я попробовал реализовать данную затею через рекордсет... У меня почти получилось... но пришлос ь отказаться от много чего... Поэтому идея отброшена в сторону.
Если SQL недоступен и есть только готовый рекордсет, то .Sort = "Column1", после чего ручной поиск дубликатов в Column1 становится тривиальным.


Вот так я попробовал реализовать это. Но при огромном количестве удалений появляеться ошибка.
File sharing lock count exceeded. Increase MaxLocksPerFile registry entry.
В мсдн я вычитал о подобном реестре майкрософт Джет 4.0 . Но как это обойти? А надо...
Я не волщебник... Но и не волшебников прошу не доставать

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 22.05.2006 (Пн) 19:24

НУ! КАК ЭТО ОБОЙТИ? ПОДСКАЖИТЕ,ПОЖАЛУЙСТА!!!
Я не волщебник... Но и не волшебников прошу не доставать

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 22.05.2006 (Пн) 20:30

LexRema писал(а)::) Извини, но с чуством юмора за день до сдачи задания у меня проблемы.

Судя по дате постинга, экзамен ты уже провалил...

LexRema писал(а):File sharing lock count exceeded. Increase MaxLocksPerFile registry entry.
В мсдн я вычитал о подобном реестре майкрософт Джет 4.0 . Но как это обойти? А надо...

Создай *.reg файл и примени (можешь оставить только параметр MaxLocksPerFile):
Код: Выделить всё
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0]
"PageTimeout"=dword:00001388
"LockRetry"=dword:00000014
"MaxBufferSize"=dword:00000000
"Threads"=dword:00000003
"ExclusiveAsyncDelay"=dword:000007d0
"SharedAsyncDelay"=dword:00000032
"FlushTransactionTimeout"=dword:000001f4
"MaxLocksPerFile"=dword:0007a120
"LockDelay"=dword:00000064
"RecycleLVs"=dword:00000000
"PagesLockedToTableLock"=dword:00000000
"UserCommitSync"="yes"
"ImplicitCommitSync"="no"

Если JET не 4.0 может понадобиться подправить в ветках:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Jet 3.5] и [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 3.x].
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

LexRema
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 14.04.2006 (Пт) 11:54

Сообщение LexRema » 23.05.2006 (Вт) 10:01

Спасибо! Рег Рулит! :)
Я не волщебник... Но и не волшебников прошу не доставать


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList