Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как бы получить SQL-запрос на основе текущего рекордсета формы? / 23 сообщений из 23, страница 1 из 1
10.06.2004, 13:22:27
    #32556131
AVKr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
Что-то никак сообразить не могу...

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

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

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



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


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

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

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

Dim Rs as recordset: Set rs = Me.RecordsetClone

Set Forms!AtherForm.RecordSet = Rs

Or

Set Forms!AtherForm.RecordSet = Me.RecordsetClone

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

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

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

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

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

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

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

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

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

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

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

А так - можно просто во временную не все поля скидывать, а только ключевые :)
...
Рейтинг: 0 / 0
11.06.2004, 10:24:30
    #32557559
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
автор2 Rivkin Dmitry и Serge Gavrilov:
Не проходит по описанным выше причинам.
Я и непредлагал ничего, я отвечал Shark-у на вопрос, зачем это может понадобиться.
Сам я в подобной ситуации создавал таблицы во временном mdb файле (чтобы база не пухла), т.к. в Access 97 у объектов нет свойства Recordset
...
Рейтинг: 0 / 0
11.06.2004, 10:35:43
    #32557593
АлексейЕ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
Код: 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
11.06.2004, 10:52:25
    #32557633
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
Таблица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
11.06.2004, 10:52:58
    #32557634
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
ЗЫ: это было для АлексейЕ
...
Рейтинг: 0 / 0
11.06.2004, 11:02:29
    #32557671
АлексейЕ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
Я лишь идею подбросил, а автор вопроса пусть все ситуации обрабатывает сам.
...
Рейтинг: 0 / 0
11.06.2004, 11:07:17
    #32557685
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы получить SQL-запрос на основе текущего рекордсета формы?
АлексейЕЯ лишь идею подбросил, а автор вопроса пусть все ситуации обрабатывает сам.

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

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

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

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

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

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

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

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


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