Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / клон Me.Recordset после фильтров / 25 сообщений из 35, страница 1 из 2
14.11.2006, 09:28
    #34125798
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
adp - проект

на записи в форме в табличном виде наложили фильтр.

нужно получить Recordset записей, которые после наложения фильтра видны на форме и пройтись по нему.

как получитьт такой рекордсет? метод Clone вроде клонирует без учета фильтра.
...
Рейтинг: 0 / 0
14.11.2006, 10:35
    #34126032
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
адп под рукой нет
в мдб me.recordset содержит отфилтрованное
...
Рейтинг: 0 / 0
14.11.2006, 10:56
    #34126137
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
На Clone наложи аналогичный фильтр
...
Рейтинг: 0 / 0
14.11.2006, 11:15
    #34126239
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanovНа Clone наложи аналогичный фильтрнакладываю, дальше прохожу по клонированному:
Код: plaintext
1.
2.
3.
4.
5.
.MoveFirst

For lngI =  0  To .RecordCount -  1 
     .Fields("GGG") = "GGG"
     .MoveNext
Next
проходит через все записи.
как пройти только через те, что были отфильтрованы?
...
Рейтинг: 0 / 0
14.11.2006, 12:13
    #34126530
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Я использую функцию которая возвращает recordset (поля называюся Field0 и т.д., можно конечно переименовать и в начальные) обычно использую для подсчета суммы:

Private Function CopyRS(ByRef mvarRsForm As ADODB.Recordset) As ADODB.Recordset
Dim iField As Integer
Dim iCountField As Integer
Dim rsCurrent As ADODB.Recordset
Dim rs As ADODB.Recordset
Set rs = mvarRsForm.Clone
rs.Filter = mvarRsForm.Filter
rs.Sort = mvarRsForm.Sort

With rs
Set rsCurrent = New ADODB.Recordset
iField = 0
iCountField = .Fields.Count - 1
For iField = 0 To iCountField
If Not IsNull(.Fields(iField).DefinedSize) Then
rsCurrent.Fields.Append "Field" & iField, .Fields(iField).Type, .Fields(iField).DefinedSize, .Fields(iField).Attributes
Else
rsCurrent.Fields.Append "Field" & iField, .Fields(iField).Type, , .Fields(iField).Attributes
End If
Next
rsCurrent.CursorType = adOpenStatic
rsCurrent.LockType = adLockOptimistic
rsCurrent.Open
If .EOF = False And .BOF = False Then
.MoveFirst
Do Until .EOF
rsCurrent.AddNew
For iField = 0 To iCountField
If Len(.Fields(iField).Value) Then
rsCurrent.Fields(iField).Value = .Fields(iField).Value
End If
Next
rsCurrent.Update
.MoveNext
Loop
Else
.Close
Set rs = Nothing
Set CopyRS = rsCurrent
Exit Function
End If
.Close
End With
Set rs = Nothing
Set CopyRS = rsCurrent
End Function
...
Рейтинг: 0 / 0
14.11.2006, 12:31
    #34126637
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
2 baclanov

ну вот:
MsgBox CopyRS(Me.sfrmSubForm.Form.Recordset).RecordCount

что с фильтром, что без фильтра - у меня выдает одинаковое количество записей - все, что есть. я что-то не так делаю?
...
Рейтинг: 0 / 0
14.11.2006, 14:38
    #34127345
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
никто больше с такой задачей не сталкивался?
...
Рейтинг: 0 / 0
14.11.2006, 14:43
    #34127378
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
copyrs - показать надо
...
Рейтинг: 0 / 0
14.11.2006, 14:46
    #34127388
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
ILL HEADcopyrs - показать надо в смысле?
...
Рейтинг: 0 / 0
14.11.2006, 14:49
    #34127403
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Для подчинненой формы нужно взять значение свойства Form.Filter удалить из него название самой подчинненой формы и заменить кавычки апострафом.
У меня работает. Код функции CopyRS приведен до строки "With rs"

Private Sub cmdCountRecord_Click()
Dim sFilter As String
If Me.sfrmSubForm.Form.FilterOn Then
sFilter = Me.sfrmSubForm.Form.Filter
sFilter = Replace(sFilter, Me.sfrmSubForm.name & ".", "", 1, -1)
sFilter = Replace(sFilter, Chr(34), "'", 1, -1)
End If
MsgBox CopyRS(Me.sfrmSubForm.Form.Recordset, sFilter).RecordCount
End Sub

Public Function CopyRS(ByRef mvarRsForm As ADODB.Recordset, ByRef sFilter As String) As ADODB.Recordset
Dim iField As Integer
Dim iCountField As Integer
Dim rsCurrent As ADODB.Recordset
Dim rs As ADODB.Recordset
Set rs = mvarRsForm.Clone
rs.Filter = sFilter
...
Рейтинг: 0 / 0
14.11.2006, 14:53
    #34127422
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanovДля подчинненой формы нужно взять значение свойства Form.Filter удалить из него название самой подчинненой формы и заменить кавычки апострафом.
У меня работает. Код функции CopyRS приведен до строки "With rs"

Private Sub cmdCountRecord_Click()
Dim sFilter As String
If Me.sfrmSubForm.Form.FilterOn Then
sFilter = Me.sfrmSubForm.Form.Filter
sFilter = Replace(sFilter, Me.sfrmSubForm.name & ".", "", 1, -1)
sFilter = Replace(sFilter, Chr(34), "'", 1, -1)
End If
MsgBox CopyRS(Me.sfrmSubForm.Form.Recordset, sFilter).RecordCount
End Sub

Public Function CopyRS(ByRef mvarRsForm As ADODB.Recordset, ByRef sFilter As String) As ADODB.Recordset
Dim iField As Integer
Dim iCountField As Integer
Dim rsCurrent As ADODB.Recordset
Dim rs As ADODB.Recordset
Set rs = mvarRsForm.Clone
rs.Filter = sFilter
вы смотрели на текстовом поле?
а на datetime? на числовом?
...
Рейтинг: 0 / 0
14.11.2006, 15:04
    #34127479
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
вопр.вы смотрели на текстовом поле?
а на datetime? на числовом?

С датой и целым проходит - проверил.
С money нужно заменить запятую на точку, но не проверял
...
Рейтинг: 0 / 0
14.11.2006, 15:08
    #34127492
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
возможно я чтото недопонял
но вы входной рекордсет транслируете (в том числе со свойствами - фильтр, сорт) в выходной
что вы хотите в результате ?
...
Рейтинг: 0 / 0
14.11.2006, 15:28
    #34127571
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
вопр.adp - проект

на записи в форме в табличном виде наложили фильтр.

нужно получить Recordset записей, которые после наложения фильтра видны на форме и пройтись по нему.

как получитьт такой рекордсет? метод Clone вроде клонирует без учета фильтра.

Получаем рекорсет отфильтрованных записей, можно с ним, например, вычисления делать: в adp формулы глючно работают, обычно только сложение
нормально проходит.
...
Рейтинг: 0 / 0
14.11.2006, 16:16
    #34127769
впр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanovС датой и целым проходит - проверил.
С money нужно заменить запятую на точку, но не проверял

на таких фильтрах не проходит:
((NAME ALike "%ист%"))
...
Рейтинг: 0 / 0
14.11.2006, 16:36
    #34127864
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
впр.
на таких фильтрах не проходит:
((NAME ALike "%ист%"))

Буква A не лишняя? и кавычки одинарные
...
Рейтинг: 0 / 0
14.11.2006, 16:37
    #34127870
впр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanov вопр.вы смотрели на текстовом поле?
а на datetime? на числовом?

С датой и целым проходит - проверил.
С money нужно заменить запятую на точку, но не проверял
для текстовых полей вида: ля-ля-ля "текст в кавычках" ля-ля дает неправильный результат.
...
Рейтинг: 0 / 0
14.11.2006, 16:40
    #34127881
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanov впр.
на таких фильтрах не проходит:
((NAME ALike "%ист%"))

Буква A не лишняя? и кавычки одинарные
выделите на текстовом поле часть текста и сделайте "фильтр по выделенному".
если выделили ист, то Form.Filter = ((NAME ALike "%ист%"))
...
Рейтинг: 0 / 0
14.11.2006, 16:42
    #34127894
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Привожу справку по ADO:

ADO API Reference
Filter Property
Indicates a filter for data in a Recordset.

Settings and Return Values
Sets or returns a Variant value, which can contain one of the following:

Criteria string — a string made up of one or more individual clauses concatenated with AND or OR operators.
Array of bookmarks — an array of unique bookmark values that point to records in the Recordset object.
A FilterGroupEnum value.
Remarks
Use the Filter property to selectively screen out records in a Recordset object. The filtered Recordset becomes the current cursor. Other properties that return values based on the current cursor are affected, such as AbsolutePosition, AbsolutePage, RecordCount, and PageCount. This is because setting the Filter property to a specific value will move the current record to the first record that satisfies the new value.

The criteria string is made up of clauses in the form FieldName-Operator-Value (for example, "LastName = 'Smith'"). You can create compound clauses by concatenating individual clauses with AND (for example, "LastName = 'Smith' AND FirstName = 'John'") or OR (for example, "LastName = 'Smith' OR LastName = 'Jones'"). Use the following guidelines for criteria strings:

FieldName must be a valid field name from the Recordset. If the field name contains spaces, you must enclose the name in square brackets.
Operator must be one of the following: <, >, <=, >=, <>, =, or LIKE.
Value is the value with which you will compare the field values (for example, 'Smith', #8/24/95#, 12.345, or $50.00). Use single quotes with strings and pound signs (#) with dates. For numbers, you can use decimal points, dollar signs, and scientific notation. If Operator is LIKE, Value can use wildcards. Only the asterisk (*) and percent sign (%) wild cards are allowed, and they must be the last character in the string. Value cannot be null.
Note To include single quotation marks (') in the filter Value, use two single quotation marks to represent one. For example, to filter on O'Malley, the criteria string should be "col1 = 'O''Malley'". To include single quotation marks at both the beginning and the end of the filter value, enclose the string with pound signs (#). For example, to filter on '1', the criteria string should be "col1 = #'1'#".

There is no precedence between AND and OR. Clauses can be grouped within parentheses. However, you cannot group clauses joined by an OR and then join the group to another clause with an AND, like this:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Instead, you would construct this filter as
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
In a LIKE clause, you can use a wildcard at the beginning and end of the pattern (for example, LastName Like '*mit*'), or only at the end of the pattern (for example, LastName Like 'Smit*').
The filter constants make it easier to resolve individual record conflicts during batch update mode by allowing you to view, for example, only those records that were affected during the last UpdateBatch method call.

Setting the Filter property itself may fail because of a conflict with the underlying data (for example, a record has already been deleted by another user). In such a case, the provider returns warnings to the Errors collection but does not halt program execution. A run-time error occurs only if there are conflicts on all the requested records. Use the Status property to locate records with conflicts.

Setting the Filter property to a zero-length string ("") has the same effect as using the adFilterNone constant.

Whenever the Filter property is set, the current record position moves to the first record in the filtered subset of records in the Recordset. Similarly, when the Filter property is cleared, the current record position moves to the first record in the Recordset.

See the Bookmark property for an explanation of bookmark values from which you can build an array to use with the Filter property.

Only Filters in the form of Criteria Strings (e.g. OrderDate > '12/31/1999') affect the contents of a persisted Recordset. Filters created with an Array of Bookmarks or using a value from the FilterGroupEnum will not affect the contents of the persisted Recordset. These rules apply to Recordsets created with either client-side or server-side cursors.
...
Рейтинг: 0 / 0
14.11.2006, 16:47
    #34127931
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
2 baclanov

зачем мне справка?
ваш код не работает, не мой.
...
Рейтинг: 0 / 0
14.11.2006, 16:49
    #34127946
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Насколько я понимаю нужно писать целую функцию преобразующий фильтр Access к фильтру ADO
...
Рейтинг: 0 / 0
14.11.2006, 17:00
    #34128007
вопр.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
baclanovНасколько я понимаю нужно писать целую функцию преобразующий фильтр Access к фильтру ADOок, спасибо. можно попробовать.
...
Рейтинг: 0 / 0
14.11.2006, 17:26
    #34128104
baclanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
sFilter = Me.sfrmSubForm.Form.Filter

Вместо двух строчек:
sFilter = Replace(sFilter, Me.sfrmSubForm.name & ".", "", 1, -1)
sFilter = Replace(sFilter, Chr(34), "'", 1, -1)

Напишите следующие:
sFilter = Replace(sFilter, Chr(34) & Chr(34), "<myfindquote>", , , vbTextCompare)
sFilter = Replace(sFilter , Chr(34), "'", , , vbTextCompare)
sFilter = Replace(sFilter , "<myfindquote>", Chr(34), , , vbTextCompare)
sFilter = Replace(sFilter , " ALike ", " Like ", , , vbTextCompare)
sFilter = Replace(sFilter, Me.sfrmSubForm.Form.Name & ".", "", , , vbTextCompare)

Удачи
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.03.2020, 14:05
    #39937092
Elena Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Уважаемые форумчане, возникла проблема. Есть рекордсет, делаю фильтр по рекордсету, суммирую данные по одному из полей , далее хочу полученную сумму присвоить полю в первой строке в остальных строках поставить нули. Вопрос можно-ли сделать update в фильтре рекордсета. У меня на строчке update выходит ошибка
Run-time error '-2147217865(80040e37) Invalin object name. Хотя имя источника запроса проходит, выполняет действия, затыкается когда я хочу поменять значение поля
Вод кусочек кода
Код: vbnet
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.
39.
40.
41.
42.
43.
44.
45.
46.
strSQL = " SELECT     [&#185;&#236;&#224;&#240;&#248;&#240;&#243;&#242;&#224;], &#192;&#209;, &#240;&#229;&#230;&#232;&#236;, &#195;&#240;&#224;&#244;&#232;&#234;, &#207;&#235;&#224;&#237;, &#207;&#229;&#240;&#229;&#226;&#238;&#231;&#247;&#232;&#234;, &#204;&#229;&#241;&#255;&#246;, [&#202;&#238;&#228; &#240;&#229;&#230;&#232;&#236;&#224;], [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], &#200;&#210;&#206;&#195;&#200;, &#227;&#238;&#228;, &#234;&#238;&#228;_&#236;, &#207;&#229;&#240;&#229;&#226;&#238;&#231;&#247;&#232;&#234;1 " & _
                      " FROM dbo.[_&#209;&#238;&#226;&#236;&#229;&#241;&#242;&#237;&#224;&#255; &#240;&#224;&#225;&#238;&#242;&#224; &#200;&#210;&#206;&#195;&#200; &#237;&#238;&#226;&#224;&#255; &#227;&#240;&#224;&#244;&#232;&#234;&#232;] " & _
                      " where dbo.[_&#209;&#238;&#226;&#236;&#229;&#241;&#242;&#237;&#224;&#255; &#240;&#224;&#225;&#238;&#242;&#224; &#200;&#210;&#206;&#195;&#200; &#237;&#238;&#226;&#224;&#255; &#227;&#240;&#224;&#244;&#232;&#234;&#232;].[&#185;&#236;&#224;&#240;&#248;&#240;&#243;&#242;&#224;] = '" & &#207;&#238;&#235;&#229;79 & "' and &#234;&#238;&#228;_&#236; = " & kod_m & " and  (NOT (&#207;&#229;&#240;&#229;&#226;&#238;&#231;&#247;&#232;&#234; LIKE N'%&#202;&#207; %'))" & _
                      "ORDER BY &#195;&#240;&#224;&#244;&#232;&#234; "
 Set rstSuppliers = New ADODB.Recordset
    rstSuppliers.CursorLocation = adUseClient
    rstSuppliers.Open strSQL, CurrentProject.Connection, , adLockOptimistic  



strSQL1 = "SELECT     [&#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#227;&#240;&#224;&#244;&#232;&#234;&#238;&#226;], [&#185;&#204;&#224;&#240;&#248;&#240;&#243;&#242;&#224;]FROM dbo.[&#207;&#229;&#240;&#229;&#247;&#229;&#237;&#252; &#236;&#224;&#240;&#248;&#240;&#243;&#242;&#238;&#226;] WHERE     [&#185;&#204;&#224;&#240;&#248;&#240;&#243;&#242;&#224;] = '" & &#207;&#238;&#235;&#229;79 & "'"

Set rst = New ADODB.Recordset
rst.Open strSQL1, CurrentProject.Connection, , adLockOptimistic 

For x = 1 To rst![&#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#227;&#240;&#224;&#244;&#232;&#234;&#238;&#226;] 
rstSuppliers.Filter = "&#195;&#240;&#224;&#244;&#232;&#234;=" & x 

If rstSuppliers.RecordCount > 1 Then
    ReDim rsRec(rstSuppliers.RecordCount) As Integer
        
        rstSuppliers.MoveFirst
        i = 1
        Do Until rstSuppliers.EOF
       
          
          rsRec(i) = rstSuppliers![&#207;&#235;&#224;&#237;]
          P = P + rsRec(i)
          i = i + 1
          rstSuppliers.MoveNext
          
        Loop
rstSuppliers.MoveFirst

rstSuppliers![&#207;&#235;&#224;&#237;] = P
'Debug.Print strSQL
rstSuppliers.Update

End If
rstSuppliers.Filter = adFilterNone

Next x

rst.Close
Set rst = Nothing
...
Рейтинг: 0 / 0
13.03.2020, 23:33
    #39937337
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
клон Me.Recordset после фильтров
Может я чё не понимаю:а почему не воспользоваться тривиальной Dsum?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / клон Me.Recordset после фильтров / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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