powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как Использовать Recordset в других процедурах?
6 сообщений из 6, страница 1 из 1
Как Использовать Recordset в других процедурах?
    #36084108
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем. Для подключения к MSSql2000 использую ADO
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub filter()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Data;Data Source=MSSql"

cn.Open
SqlText = "select ID, name From Table order by ID"

Set rs = New ADODB.Recordset
Set rs = cn.Execute(SqlText)

cn.Close
Set rs = Nothing
Set cn = Nothing

FormTest.Show
End Sub
Далее я хочу в других процедурах использовать данные rs с различными условиями,
например rs.filter = "ID=1", но не подключаясь заново к sql серверу.
Как передать rs в другую процедуру, чтобы в ней применив фильтрацию к rs получить новый набор данных?
...
Рейтинг: 0 / 0
Как Использовать Recordset в других процедурах?
    #36084223
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не особо силен в этом, но мне кажется что:
- либо вы подключаетесь к серверу и пользуете его возможности.
- либо вы рекодсет загоняете в массив и уже массив передаете куда хотите.
...
Рейтинг: 0 / 0
Как Использовать Recordset в других процедурах?
    #36084249
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При открытии приложения я хочу с сервера забрать все необходимые данные и записать их в recordset.
Это получается. Далее я хочу используя уже созданный recordset в других процедурах.
Вот как этот массив (recordset) передать в другую процедуру?
Думал может с использованием глобальных переменных, но что-то сомневаюсь.
...
Рейтинг: 0 / 0
Как Использовать Recordset в других процедурах?
    #36085428
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может я не совсем понимаю, но если читать дословно вопрос: "Как этот массив передать в другую процедуру?" (намерено упустил слово рекодсет) - например так:

Код: 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.
Sub Massiv_Peredat()

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset

Dim myArray As Variant

    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & ThisWorkbook.Path & "\" & "Èñõîä.xls;" & _
      "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
    
    rst.Open "SELECT F3 FROM [Ëèñò1$]", cnn

myArray = rst.GetRows

Test_Massiv myArray

myArray = ""
rst.Close
cnn.Close

End Sub

Sub Test_Massiv(Ar As Variant)
Dim i As Long
 For i =  0  To UBound(Ar,  2 )
  Debug.Print Ar( 0 , i)
 Next i
End Sub
...
Рейтинг: 0 / 0
Как Использовать Recordset в других процедурах?
    #36085597
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaM
Код: plaintext
1.
Set rs = New ADODB.Recordset
Set rs = cn.Execute(SqlText)

Выделенная строка - лишняя. Никогда так не делай.

andMegaMДалее я хочу в других процедурах использовать данные rs с различными условиями,
например rs.filter = "ID=1", но не подключаясь заново к sql серверу.
Как передать rs в другую процедуру, чтобы в ней применив фильтрацию к rs получить новый набор данных?Во первых, рекордсет и массив это две очень разные вещи. Невозможно использовать существующий рекордсет с другими условиями, в принципе невозможно.
В клиент-серверной архитектуре ты а) создаешь команду которая принимает параметры и эта команда хранится на сервере б) запускаешь эту команду подставляя разные параметры и каждый запуск порождает новый рекордсет (и несколько рекордсетов).

То что показал Deggasad, это передача одного уже полученного клиентом рекордсета в подпрограмму.
Если ты хочешь использовать параметрические команды, то можно сделать примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim conn as new adodb.connection
dim cmd as new adodb.command
conn.open "..."
set cmd.activeconnection = cn
cmd.CommandText = "select ID, name From Table where SomeField=? order by ID"
cmd.Repared = true

' а потом используешь:
set rs_for_aaa = cmd.Execute(Parameters:= array("aaa"))
set rs_for_bbb = cmd.Execute(Parameters:= array("bbb"))
Обрати внимание что ты получаешь на клиенте два разных рекордсета. Причем они оба будут физически находиться на сервере и ты не сможешь работать со вторым, до тех пор пока не выкачаешь полностью первый.
...
Рейтинг: 0 / 0
Как Использовать Recordset в других процедурах?
    #36085634
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaM ,
у курсора есть еще CursorLocation и CursorType, так что вы зря их не определили в коде.
авторнапример rs.filter = "ID=1", но не подключаясь заново к sql серверу.
Почитайте про отсоединенные курсоры.

White Owl,
про
Код: plaintext
1.
Set rs = New ADODB.Recordset
Set rs = cn.Execute(SqlText)
я бы сказал, что первая строка лишняя в данном контексте, а не вообще :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как Использовать Recordset в других процедурах?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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