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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Тов. спецы! Кто знает как создать в памяти компьютера пустой запрос не привязанный ни к одно из таблиц? А также занести в него данные и считать их?
 
 автор: akkorn   (16.11.2007 в 21:04)   личное сообщение
 
 

Тов. спецы! Кто знает как создать в памяти компьютера пустой запрос не привязанный ни к одно из таблиц? А также занести в него данные и считать их?

Например, необходимо создать пустой запрос, содержащий три столбца "Data1", "Data2", "Data3".
Далее перейти на строку 1 (пустую пока), и внести значения.
Перейти на строку вторую и внести значения.
Вывести в сообщении количество добавленных строк.


КАК это сделать- Позарез необходимо.. Я умею запрос соединять с таблицами, даже из других баз. А ВОТ КАК СДЕЛАТЬ В ПАМЯТИ, НЕ ЗАВЯЗАННЫЙ НИ С ОДНОЙ ИЗ ТАБЛИЦ - не знаю..

Ну или как вариант- создать в памяти таблицу, не обвисающею нигде физически, и создать на нее Recordset. Далее делать выборку, добавление или удаление данных при помощи запросов.. Такое возможно?

  Ответить  
 
 автор: Силыч   (16.11.2007 в 21:55)   личное сообщение
 
 

:))))))))))))))))))))))))))))))))))
ну ладно... используйте коллекцию или массив :))
не ну, жжоте!

  Ответить  
 
 автор: akkorn   (16.11.2007 в 22:00)   личное сообщение
 
 

Ув. Силыч - подскажите КАК? Приведите простенький кодик...
Ступор.... полный....... Бьюсь уже не один день (и даже больше если честно... Не знаю уже КАК ему задать значения...).
Задача состоит еще в том, чтобы потом из этого массива данных делать различные запросы (выборки)....

  Ответить  
 
 автор: Силыч   (17.11.2007 в 12:13)   личное сообщение
 
 

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

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

  Ответить  
 
 автор: akkorn   (17.11.2007 в 13:30)   личное сообщение
 
 

я о запросах, которые без таблиц - впервые слышу


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

Немного иначе перефразирую свой первый пост:
Например, необходимо создать некое подобие таблицы, содержащее три столбца "Data 1", "Data 2", "Data 3". Необходимо только, чтобы эта таблица была только в памяти.
Далее перейти на строку 1 (пустую пока), и внести значения.
Перейти на строку вторую и внести значения.
Вывести в сообщении количество добавленных строк.

  Ответить  
 
 автор: ГлазастыйМышь   (17.11.2007 в 13:40)   личное сообщение
 
 

Основной вопрос, ЗАЧЕМ ?
Может для начала озвучите задачу.

  Ответить  
 
 автор: Силыч   (17.11.2007 в 14:45)   личное сообщение
 
 

>>Я говорю о Recordset без таблиц.
все еще хуже, как я посмотрю

таблица - это массив данных
в вашем случае, как я и ранее сказал, вам помогут коллекции (Collection) или обычный массив данных (ReDim)
вот ключевые слова по которым вы просто обязаны перелопатить хелп
потом будем говорить. если у вас еще вопросы появятся ;)

  Ответить  
 
 автор: akkorn   (17.11.2007 в 14:17)   личное сообщение
 
 

Озвучиваю задачу, которую необходимо решить:

Из различных приложений (Word, Excel, другое ПО) в буфер обмена копируется некая информация. Основное правило: В первом столбце должен идти некий индетификатор записи, во втором - количество. На выходе необходимо получить новый файл Excel.
В ходе работы каждую строку необходимо найти в таблице базы данных по значению иднтификатора и поместить в лист Excel с названием, взятым из третьего столбца. В конце записи добавить число Количество, в котором значение будет равняться Вес (значение из записи базы) * Количество (значение, скопированное в буфер обмена). По окончании работы вверху каждого из получившихся листов (например, в ячейке A1) произвести суммирование значений в столбце Количество*Вес.
В случае, если запись в базе отсутствует- поместить эту запись в лист с названием "Отсутсвующие записи в базе".

Плюс в самом конце работы сформировать лист ТЭП (технико-экономического предложения), в котором происходят некие сложные вычисления. Туда же переносятся все значения из принятой нами ячейки A1 каждого из получившихся листов, кроме листа "Отсутсвующие записи в базе".

====
Хочу скачать, что данная задача уже решена. Все работает как я описал. Но работает довольно продолжительное время (приблизительно скорость обработки 250 строк составляет 1 минуту). Я планирую увеличить время обработки, имитируя листы Excel в памяти и только в конце работы производить связь с Excel и массово копировать туда получившиеся значения.


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

Не слишком сумбурно описал?


Да! Товарищи, скажите пожалуйста, сколько каждый из вас взял бы финансовых средств за воплощение данной задачи в жизнь? Я не предствляю сколько стоят подобные работы...
Экономия времени получается от двух рабочих дней до недели и даже больше., т.к. необходимо учесть очень многие моменты. А при работе с базой данных все эти моменты учитываются. Также легко можно следить за стоимостью и весом каждой детали или компонента, который будет закупаться на стороне (силовые авт.выключатели и прочее оборудование).

  Ответить  
 
 автор: Силыч   (17.11.2007 в 14:48)   личное сообщение
 
 

>>Но работает довольно продолжительное время (приблизительно скорость обработки 250 строк составляет 1 минуту).

фик ево знает... я в SASе тоже данные из разных источников использую, но при всем при этом у меня 250 000 чтрок обрабатываются за минуту-две...

ну зачем вы нагородили ерунды, а?

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

ну зачем вы ВСЁ ЭТО делаете? вам больше заняться нечем?

з.ы. я бы выставил вам пива только для того, чтобы вы отвязались от меня с этой бредовой "задачей"

  Ответить  
 
 автор: akkorn   (17.11.2007 в 16:33)   личное сообщение
 
 

з.ы. я бы выставил вам пива только для того, чтобы вы отвязались от меня с этой бредовой "задачей"


здорово! )) Посмеялся, пасибо! ))))
Конечно, изюминка в этом есть. Я ее приму к сведению. Только дело в том, что данные необходимо выводить в Excel, формировать там необходимые вычисления (например, суммирование по строкам, потом по листам...)
А в вашем случае получится, что с определенного Recordset вы максимум сможете все вытащить в dat или xls- файлы. про автосуммирование можно забыть. плюс этих файлов будет несколько (в зависимости от кол-ва созданных Recordset).... Так?

  Ответить  
 
 автор: Силыч   (18.11.2007 в 17:13)   личное сообщение
 
 

ну используйте OWC (MS Office Web Component ) SpreadSheet

  Ответить  
 
 автор: akkorn   (17.11.2007 в 16:33)   личное сообщение
 
 

з.ы. я бы выставил вам пива только для того, чтобы вы отвязались от меня с этой бредовой "задачей"


здорово! )) Посмеялся, пасибо! ))))
Конечно, изюминка в этом есть. Я ее приму к сведению. Только дело в том, что данные необходимо выводить в Excel, формировать там необходимые вычисления (например, суммирование по строкам, потом по листам...)
А в вашем случае получится, что с определенного Recordset вы максимум сможете все вытащить в dat или xls- файлы. про автосуммирование можно забыть. плюс этих файлов будет несколько (в зависимости от кол-ва созданных Recordset).... Так?

  Ответить  
 
 автор: alecks_lp   (17.11.2007 в 21:21)   личное сообщение
 
 

На самом деле, объект ADODB.Recordset без источника данных, на мой взгляд, достаточно гибкий инструмент. Для решения задач импорта данных применяю его постоянно. Он обладает всеми свойствами объекта, позволяет выполнять все операции над данными, а при необходимости сохранить в данные в файл и/или коннектить к таблице. Данный случай вполне подходящий

<<Developers often need a place to temporarily store some data, or want some data to act as if it came from a server so it can participate in data binding in a user interface. ADO (in conjunction with the Microsoft Cursor Service for OLE DB) enables the developer to build an empty Recordset object by specifying column information and calling Open>>


Option Compare Database
Option Explicit
Dim rs As ADODB.Recordset

Public Sub CreateRecordset()
Set rs = New ADODB.Recordset
    rs.Fields.Append "Data1", adChar, 50
    rs.Fields.Append "Data2", adChar, 50
    rs.Fields.Append "Data3", adChar, 50
rs.Open
'---операции с рекордсетом
'---
rs.Close
Set rs = Nothing
End Sub


Ну, а пива много не бывает

  Ответить  
 
 автор: akkorn   (17.11.2007 в 22:25)   личное сообщение
 
 

Ё-ххо! Биг, БИГ Тхенькс!

Именно это я и спрашивал! Гуд!

Пива, говоришь? Угу, много не бывает.. Но это по истине нечто! И все программисты его любят . Данная веточка будет полезна, я думаю, и другим пользователям.
Спасибо alecks_lp за то, что открыл глаза!




P.S. Не подскажет ли уважаемый alecks_lp, существует ли команда "добавить" в такой Recordset данные из буфера обмена (массовое добавление) - аналог команды "Добавить из буфер обмена" - когда открыта таблица, в меню "Правка" - она присутствует...

  Ответить  
 
 автор: alecks_lp   (18.11.2007 в 09:15)   личное сообщение
 
 

Я ничего особенного не делал - дал выписку из хелпа и приторочил к Вашей задачке. Что ВЫ будете с этим делать - не совсем понятно.
Буфер обмена - без API не обойтись. А это уже другой уровень.
Теперь такие соображения.
На мой взгляд, если раcсматривать Вашу задачку с позиции Access, то Вы сейчас стоите на голове. У Вас источники данных для импорта первичны, и применение Access вторично. А желательно стоять на ногах, т.е. напишите приложение Access , котрое будет просматривать(сканировать) источники данных, по необходимости импортировать их в таблицу mdb(или если так уж хочется в - пустой рекордсет!). А уж потом делайте все что угодно - фильтруйте, складывайте, умножайте, стройте диаграммы, экспортируйте в Excel, etc.

  Ответить  
 
 автор: akkorn   (18.11.2007 в 11:27)   личное сообщение
 
 

Пасибо огромное за идеи- я действительно малость запутался...

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

Спасибо еще раз!

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