powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как бы получить SQL-запрос на основе текущего рекордсета формы?
23 сообщений из 23, страница 1 из 1
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556131
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то никак сообразить не могу...

Есть форма. Там набор записей. Его отфильтровали. Полученный рекордсет надо использовать для иных целей (в частности, для экспорта в Эксель, но не только). Существует ли путь, чтобы текущий рекордсет, не совпадающий с Recordsource-ом формы запомнить в формате SQL?
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556222
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А фильтруете как?
Человек просто нажимает на поле ПКМ и выбирает фильтр?

Трудная задача - не для слабонервных (ИМХО), особливо, если соурс навороченный :(

Как вариант:
Пробежаться по рекордсету, все запихнуть во "временную" таблицу и уже к ней обращаться (к таблице)
?
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556279
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зависит от задачи
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556356
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Высоцкий:
Открыли все- но мне туда не надо.



Не могу себе представить, зачем это может понадобиться. Набор записей выгрузить в табличку а потом с ней упражняться для "Экспорта и не только"- это я понимаю.
А на основании recordset генерировать SQL- IMHO бред.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556374
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе могу себе представить, зачем это может понадобиться.


Ну, например, использовать для Recordsorce или Rowsource другого объекта...
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556381
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу, например, использовать для Recordsorce или Rowsource другого объекта...

В таких случаях рисуют кнопочки (галочки, списочки) на форме для применения фильтров и уже по их значениям генерят Where

ИМХО - конечно
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556427
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может попробовать так для другого объекта (формы):

Dim Rs as recordset: Set rs = Me.RecordsetClone

Set Forms!AtherForm.RecordSet = Rs

Or

Set Forms!AtherForm.RecordSet = Me.RecordsetClone

???
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556446
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то было у меня такое... Сейчас гляну. Вот оно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Public Function DelTablesNames(strInp As String) As String
   ' Первоначально сделана для чистки строки сортировки/фильтров и др.
 

   ' Очищает часть строки sql, оставляя в ней только имена полей,
 

   ' и удаляя предшествующие им имена таблиц/форм и т.п.
 

   ' Дв. кавычки ("") считаются частью строки, не имени поля.
 
  Dim s As String
  Dim c As String
  Dim t As Long
  Dim bQs As Boolean  ' Флаг действия квадратных скобок
 
  Dim bK As Boolean  ' Флаг действия одинарных кавычек
 
  Dim bP As Boolean  ' Флаг чтения имени таблицы/формы/etc
 
  
  strInp = Replace(strInp, """", "'")
  For t = Len(Nz(strInp)) To  1  Step - 1 
    c = Mid(strInp, t,  1 )
    If c = "'" And Not bQs Then bK = Not bK
    If c = "]" And Not bK Then bQs = True
    If c = "[" And Not bK And bQs Then bQs = False
    If c = "." And Not bK And Not bQs Then bP = True  ' "Мусор" начался
 
    If ((c = "(" Or c = "<" Or c = ">" Or c = "=" Or c = " ") And Not bQs) _
        And bP Then bP = False  ' "Мусор" закончился
 
    If Not bP Then s = c & s
  Next t
  s = Replace(s, " Alike ", " Like ")

  DelTablesNames = s
End Function

А используется примерно так:

Set rs = Me.RecordsetClone
If Me.OrderByOn = True Then rs.Sort = DelTablesNames(Me.OrderBy)

или

rs.Open "select * from mytable " & _
IIf(Len(Nz(Me.ServerFilter)) > 0, " where " & DelTablesNames(Me.ServerFilter), ""), cn

и т.п.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556451
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. Не помню, зачем надо чистить имена таблиц, но, наверное надо, раз сделано.
ЗЫЫ. Это в ADP работает
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32556604
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Paparome:
Соурс, действительно, навороченный. Фильтр через стандартные кнопки или контекстное меню - "фильтр для", "фильтр по выделенному", "исключить выделенное". В идеале хочу и расширенный подключить, но пока не до жиру. Вариант с "выбросом" во временную таблицу выглядит вполне приемлимым, хотя, конечно, обидно этим заниматься, когда набор записей уже есть перед глазами.

Задачи разные. Одна простая: щелкнув как следует по любой записи в отфильтрованной табличной форме, открыть простую форму с возможностью перебора только отфильтрованных записей. Тут ясно: синхронизация рекордсета: Set ПростаяФорма.recordset = ТабличнаяФорма.Recordset.

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

Будут и другие задачи, но пока еще не точно понятно какие.

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

2 Geo:
У меня mdb, но подход, кажется, понятен. Не самый простой, но вполне эффективный вариант. Попробую.

2 Rivkin Dmitry и Serge Gavrilov:
Не проходит по описанным выше причинам.

2 All: Большое спасибо за внимание к проблеме! Буду париться дальше.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557453
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Требуемый набор полей не аналогичен
1) Лишние не мешают
2) Если не хватает- добавь. Никто не заставляет делать табличку шириной с твой рекордсет. Сделай ее шире и потом посчитай недостающее.
К тому же по моему неправильно сто раз пересчитывать одно и то же. Посчитал один раз в табличку сложил- потом смотри хоть засмотрись

>Буду париться дальше
Нет, ну если хочется попариться, тогда конечно:-)
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557511
Можно пройтись по RecordsetClone формы и собрать значения ключей в конструкцию IN (Key1,Key2,....KeyN), а затем использовать ее в условии запроса.
Для экспорта в Excel лучше использовать метод CopyFromRecordset библиотеки объектов Excel-я. Он позволяет вставить данные в конкретное место конкретной страницы существующего файла. Другими методами можно ваще полностью оформить лист.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557546
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожно пройтись по RecordsetClone формы и собрать значения ключей в конструкцию IN (Key1,Key2,....KeyN), а затем использовать ее в условии запроса

не плохо :)
если ключ из одного поля :)

А так - можно просто во временную не все поля скидывать, а только ключевые :)
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557559
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2 Rivkin Dmitry и Serge Gavrilov:
Не проходит по описанным выше причинам.
Я и непредлагал ничего, я отвечал Shark-у на вопрос, зачем это может понадобиться.
Сам я в подобной ситуации создавал таблицы во временном mdb файле (чтобы база не пухла), т.к. в Access 97 у объектов нет свойства Recordset
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557593
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Dim strS As String
strS = Me.Recordset.Name
MsgBox Left(strS, Len(strS) -  2 ) & IIf(Me.Filter = vbNullString, vbNullString, " WHERE " & Me.Filter)
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557633
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица1 --> Таблиц WHERE ((Таблица1.dd>5))

Select * From Таблица1 Where 1=1 --> Select * From Таблица1 Where 1 WHERE ((Таблица1.dd>5))

?

ЗЫ: И это я еще примеры с GROUP BY и ORDER BY вам не показал :(
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557634
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: это было для АлексейЕ
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557671
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лишь идею подбросил, а автор вопроса пусть все ситуации обрабатывает сам.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557685
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейЕЯ лишь идею подбросил, а автор вопроса пусть все ситуации обрабатывает сам.

Ох%еет, пардон :( (ИМХО)

В запросе могут быть еще и подзапросы, и многие с ордерами и группировками :(
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557714
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome

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

Затевать спор не вижу смысла.
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557724
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейЕpaparome

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

Затевать спор не вижу смысла.

Все - молчу, молчу
Был не прав - каюсь
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557730
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСам я в подобной ситуации создавал таблицы во временном mdb файле (чтобы база не пухла), т.к. в Access 97 у объектов нет свойства Recordset
Я тоже

авторЯ и непредлагал ничего, я отвечал Shark-у на вопрос, зачем это может понадобиться.
Это был не вопрос, а утверждение. Ты ничего не объяснил, так как дальше непонятно, ЗАЧЕМ заполнять Recordsorce или Rowsource другого объекта...,
если можно чудесно воспользоваться временными таблицами( что мы с тобой и делаем:-)
...
Рейтинг: 0 / 0
Как бы получить SQL-запрос на основе текущего рекордсета формы?
    #32557795
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot автор]Это был не вопрос, а утверждение. Ты ничего не объяснил, так как дальше непонятно, ЗАЧЕМ заполнять Recordsorce или Rowsource другого объекта...,
если можно чудесно воспользоваться временными таблицами( что мы с тобой и делаем:-)[/quote]
По поводу ЗАЧЕМ, бывает достаточно одного - ХОЧЕТСЯ ТАК.
Ведь работу с таблицами надо организовывать, а так написал в RecordSource инструкцию SQL и все, разве плохое желание?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как бы получить SQL-запрос на основе текущего рекордсета формы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]