powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / клон Me.Recordset после фильтров
35 сообщений из 35, показаны все 2 страниц
клон Me.Recordset после фильтров
    #34125798
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adp - проект

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

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

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

For lngI =  0  To .RecordCount -  1 
     .Fields("GGG") = "GGG"
     .MoveNext
Next
проходит через все записи.
как пройти только через те, что были отфильтрованы?
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34126530
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я использую функцию которая возвращает 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
клон Me.Recordset после фильтров
    #34126637
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 baclanov

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

что с фильтром, что без фильтра - у меня выдает одинаковое количество записей - все, что есть. я что-то не так делаю?
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127345
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никто больше с такой задачей не сталкивался?
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127378
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
copyrs - показать надо
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127388
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILL HEADcopyrs - показать надо в смысле?
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127403
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
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127422
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
клон Me.Recordset после фильтров
    #34127479
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопр.вы смотрели на текстовом поле?
а на datetime? на числовом?

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

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

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

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

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

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

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

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

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

зачем мне справка?
ваш код не работает, не мой.
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34127946
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю нужно писать целую функцию преобразующий фильтр Access к фильтру ADO
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34128007
вопр.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baclanovНасколько я понимаю нужно писать целую функцию преобразующий фильтр Access к фильтру ADOок, спасибо. можно попробовать.
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #34128104
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Период между сообщениями больше года.
клон Me.Recordset после фильтров
    #39937092
Elena Don
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, возникла проблема. Есть рекордсет, делаю фильтр по рекордсету, суммирую данные по одному из полей , далее хочу полученную сумму присвоить полю в первой строке в остальных строках поставить нули. Вопрос можно-ли сделать 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
клон Me.Recordset после фильтров
    #39937337
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я чё не понимаю:а почему не воспользоваться тривиальной Dsum?
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937345
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Может я чё не понимаю:а почему не воспользоваться тривиальной Dsum?
судя по всем этим "dbo" это adp
Так что Dsum в запросе не получится использовать

А вообще, задача ТС решается одним запросом, без всего этого "бреда" с рекордсетами, массивами и фильтрами, типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
;with cte as (
select
  план 
  ,sum(план)over(partition by маршрут) as x1
  ,row_numder()over(partition by маршрут order by ...) as x2
from ... )
update cte set план = case when x2=1 then x1 else 0 end
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937346
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
sdku
Может я чё не понимаю:а почему не воспользоваться тривиальной Dsum?
судя по всем этим "dbo" это adp
Так что Dsum в запросе не получится использовать

А вообще, задача ТС решается одним запросом, без всего этого "бреда" с рекордсетами, массивами и фильтрами, типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
;with cte as (
select
  план 
  ,sum(план)over(partition by маршрут) as x1
  ,row_number()over(partition by маршрут order by ...) as x2
from ... )
update cte set план = case when x2=1 then x1 else 0 end

...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937494
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elena Don
.....суммирую данные по одному из полей , далее хочу полученную сумму присвоить полю...
Для этого запрос не нужен. В Ваше поле запишется сумма по полю cтоимость доставки из таблицы "Заказы" для записей в которых страна получателя = Литва и дата исполнения > 1-1-95
Код: vbnet
1.
Ме.ВашеПоле = DSum("[cтоимость доставки]", "Заказы","[страна получателя] = 'Литва' AND [дата исполнения] > #1-1-95#")
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937710
Elena Don
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
Может я чё не понимаю:а почему не воспользоваться тривиальной Dsum?


Я не спорю, можно и DSum, но вопрос не в этом. Вопрос в том. что не хочет в фильтре менять значение поля
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937751
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elena Don
Вопрос в том. что не хочет в фильтре менять значение поля
попробуй задать для rstSuppliers тип курсора явно.
adOpenStatic для начала
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937795
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elena Don,
A как Вы определяете верхнюю границу в цикле FOR?(у Вас там коды символов-смените раскладку)
Думаю что-то про RecordCount,который не даст верный результат без обращения к последней записи набора (чего не наблюдается)
По моему одна строчка кода порацинальней будет чем десяток с большим хвостиком
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937855
Elena Don
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
Elena Don,
A как Вы определяете верхнюю границу в цикле FOR?(у Вас там коды символов-смените раскладку)
Думаю что-то про RecordCount,который не даст верный результат без обращения к последней записи набора (чего не наблюдается)
По моему одна строчка кода порацинальней будет чем десяток с большим хвостиком


Вот код с правильной раскладкой

strSQL = " SELECT [№маршрута], АС, режим, График, План, Перевозчик, Месяц, [Код режима], [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], ИТОГИ, год, код_м, Перевозчик1 " & _
" FROM dbo.[_Совместная работа ИТОГИ новая графики] " & _
" where dbo.[_Совместная работа ИТОГИ новая графики].[№маршрута] = '" & Поле79 & "' and код_м = " & kod_m & " & _
"ORDER BY График "
Set rstSuppliers = New ADODB.Recordset
rstSuppliers.CursorLocation = adUseClient
rstSuppliers.Open strSQL, CurrentProject.Connection, , adLockOptimistic ' набор записей по маршруту за определенную дату



strSQL1 = "SELECT [Количество графиков], [№Маршрута]FROM dbo.[Перечень маршрутов] WHERE [№Маршрута] = '" & Поле79 & "'"

Set rst = New ADODB.Recordset
rst.Open strSQL1, CurrentProject.Connection, , adLockOptimistic ' определяем количество графиков на маршруте

For x = 1 To rst![Количество графиков] 'цикл по графикам
rstSuppliers.Filter = "График=" & x ' фильтр по графику

If rstSuppliers.RecordCount > 1 Then
ReDim rsRec(rstSuppliers.RecordCount) As Integer

rstSuppliers.MoveFirst
i = 1
Do Until rstSuppliers.EOF
' записываем в массив значение планов по графку

rsRec(i) = rstSuppliers![План]
P = P + rsRec(i)
i = i + 1
rstSuppliers.MoveNext

Loop

Задача состоит в том, чтобы просуммировать план и факт рейсов для машин работавших по одному и тому же графику
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937868
Elena Don
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elena Don
sdku
Elena Don,
A как Вы определяете верхнюю границу в цикле FOR?(у Вас там коды символов-смените раскладку)
Думаю что-то про RecordCount,который не даст верный результат без обращения к последней записи набора (чего не наблюдается)
По моему одна строчка кода порацинальней будет чем десяток с большим хвостиком


Вот код с правильной раскладкой

strSQL = " SELECT [№маршрута], АС, режим, График, План, Перевозчик, Месяц, [Код режима], [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], ИТОГИ, год, код_м, Перевозчик1 " & _
" FROM dbo.[_Совместная работа ИТОГИ новая графики] " & _
" where dbo.[_Совместная работа ИТОГИ новая графики].[№маршрута] = '" & Поле79 & "' and код_м = " & kod_m & " & _
"ORDER BY График "
Set rstSuppliers = New ADODB.Recordset
rstSuppliers.CursorLocation = adUseClient
rstSuppliers.Open strSQL, CurrentProject.Connection, , adLockOptimistic ' набор записей по маршруту за определенную дату



strSQL1 = "SELECT [Количество графиков], [№Маршрута]FROM dbo.[Перечень маршрутов] WHERE [№Маршрута] = '" & Поле79 & "'"

Set rst = New ADODB.Recordset
rst.Open strSQL1, CurrentProject.Connection, , adLockOptimistic ' определяем количество графиков на маршруте

For x = 1 To rst![Количество графиков] 'цикл по графикам
rstSuppliers.Filter = "График=" & x ' фильтр по графику

If rstSuppliers.RecordCount > 1 Then
ReDim rsRec(rstSuppliers.RecordCount) As Integer

rstSuppliers.MoveFirst
i = 1
Do Until rstSuppliers.EOF
' записываем в массив значение планов по графку

rsRec(i) = rstSuppliers![План]
P = P + rsRec(i)
i = i + 1
rstSuppliers.MoveNext

Loop

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

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

rstSuppliers.MoveFirst

rstSuppliers![План] = P
Вот здесь у меня и затыкается

'Debug.Print strSQL
rstSuppliers.Update
rstSuppliers.MoveNext
Do Until rstSuppliers.EOF
rstSuppliers![План] = Null
rstSuppliers.Update
Loop
перестает видеть мой rstSuppliers
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39937939
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elena Don

....Задача состоит в том, чтобы просуммировать план и факт рейсов для машин работавших по одному и тому же графику
Поясните в чем выражается "план и факт" рейсов-в их количестве или объеме перевезенного груза и какова суть работы машин по какому-то графику(что представляет из себя "график")
я смутно подозреваю что надо взглянуть на схему БД и четко уяснить решаемую Вами задачу
...
Рейтинг: 0 / 0
клон Me.Recordset после фильтров
    #39938084
Elena Don
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
Elena Don

....Задача состоит в том, чтобы просуммировать план и факт рейсов для машин работавших по одному и тому же графику
Поясните в чем выражается "план и факт" рейсов-в их количестве или объеме перевезенного груза и какова суть работы машин по какому-то графику(что представляет из себя "график")
я смутно подозреваю что надо взглянуть на схему БД и четко уяснить решаемую Вами задачу

В предыдущем моем сообщении я привела скриншот формы. План обведенный красным нужно проссумировать и Лысенко поставить 220, а Румак 0. Так и для остальных машин работавших по 3 , 4 и .тд. графикам. Первоначально в форме стоит план взятый за день умноженный на количество отработанных дней.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / клон Me.Recordset после фильтров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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