Как можно пробежаться по коннекшенам и рекордсетам
For Each Frm In Forms
If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
Unload Frm
End If
Next
If Not (GlADOConn Is Nothing) Then
If GlADOConn.State <> adStateClosed Then
GlADOConn.Close
End If
Set GlADOConn = Nothing
End If
Тут, как видите, во втором цикле уничтожается коннект. Возникла такая проблема: "на лету" необходимо "обрубить" все коннекшены и рекордсеты, а затем восстановить их с новыми параметрами.
Для этого я хочу в цикле, аналогичном тому, в котором я выгружаю формы, "обрубать" коннекшены и рекордсеты. Типа
For Each Rs In ADODB.Recordset
Rs.Close
Set Rs = Nothing
Next
For Each Rs In ADODB.Connection
Rs.Close
Set Rs = Nothing
Next
как такое реализовать? Можно ли?
Если быть более корректным, то какой объект является в данном случае родительским для коннекшенов и рекордсетов. Если для рекордсетов можно предположить родительским коннект, то что в данном случае радительское для коннекта? Где просматривать перечень коннектов. In Project, сами понимаете, не прокатывает, так как нет такого объекта.
Народ, обычно при закрытии программы я использую конструкцию типа:
For Each Frm In Forms
If Frm.Name <> Me.Name And Not (Frm Is Nothing) Then
Unload Frm
End If
Next
If Not (GlADOConn Is Nothing) Then
If GlADOConn.State <> adStateClosed Then
GlADOConn.Close
End If
Set GlADOConn = Nothing
End If
Тут, как видите, во втором цикле уничтожается коннект. Возникла такая проблема: "на лету" необходимо "обрубить" все коннекшены и рекордсеты, а затем восстановить их с новыми параметрами.
Для этого я хочу в цикле, аналогичном тому, в котором я выгружаю формы, "обрубать" коннекшены и рекордсеты. Типа
For Each Rs In ADODB.Recordset
Rs.Close
Set Rs = Nothing
Next
For Each Rs In ADODB.Connection
Rs.Close
Set Rs = Nothing
Next
как такое реализовать? Можно ли?
Если быть более корректным, то какой объект является в данном случае родительским для коннекшенов и рекордсетов. Если для рекордсетов можно предположить родительским коннект, то что в данном случае радительское для коннекта? Где просматривать перечень коннектов. In Project, сами понимаете, не прокатывает, так как нет такого объекта.
Имхо, в коллекциях этих объектов - коллекции этих объектов существуют, проблем нет :) а вот как получить все созданные коннекшены и рекордсеты - не сталкивался :)
Странная проблема, ты не знаешь какие коннекшены у тебя есть? :) откуда они берутся, если не ты их создаешь? или ты пишешь серверную часть для какой-то локальной БД? имхо, готовое решение проще взять :)
Имхо, в коллекциях этих объектов - коллекции этих объектов существуют, проблем нет :) а вот как получить все созданные коннекшены и рекордсеты - не сталкивался :)
Странная проблема, ты не знаешь какие коннекшены у тебя есть? :) откуда они берутся, если не ты их создаешь? или ты пишешь серверную часть для какой-то локальной БД? имхо, готовое решение проще взять :)
Конечно, я знаю, какие конекшены и рекордсеты, но хочется, чтобы красиво было и универсально. Тоесть, если я в программу буду ещё добавлять конекшены и рекордсеты, чтобы у меня не болела голова за правку модулей, где они должны априорно закрываться и "грохаться".
Конечно, я знаю, какие конекшены и рекордсеты, но хочется, чтобы красиво было и универсально. Тоесть, если я в программу буду ещё добавлять конекшены и рекордсеты, чтобы у меня не болела голова за правку модулей, где они должны априорно закрываться и "грохаться".
я коннекшены локально всегда объявляю, глобальные (на весь класс) у меня только дата адаптеры, датасеты и иногда таблицы. Я в ADO пишу. так что таких проблем нет, все коннекшены автоматом закрываются при выходе из функций, где они вызываются.
я коннекшены локально всегда объявляю, глобальные (на весь класс) у меня только дата адаптеры, датасеты и иногда таблицы. Я в ADO пишу. так что таких проблем нет, все коннекшены автоматом закрываются при выходе из функций, где они вызываются.
Ну это немного ненадёжно (Microsoft советует "ручкаи" коннекшены обрубать, насколько я заню). Кроме того, мне удобнее иметь 1 глобальный коннекшн. на котором висит 90% операций, ну и несколько локальных вспомогательных. Однако, хочется создать универсальную процедуру выгрузки всех открытых коннекшенов. Во-первых, для универсальности, а во-вторых, просто нужно очень, так как надо "на лету" переконнекчиваться, а формы я не выгружаю до конца работы программы, а в некоторых из них на уровне форм объявлены коннекты.
Сейчас я "запнулся" вот на чём:
Dim RConn As ADODB.Connection
For Each RConn In А вот в чём - не знаю...
If Not RConn Is Nothing Then
If RConn.State <> adStateClosed Then
For Each RsConn In RConn
If Not RsConn Is Nothing Then
If RsConn.State <> adStateClosed Then
RsConn.Close
End If
Set RsConn = Nothing
End If
Next
RsConn.Close
End If
Set RsConn = Nothing
End If
Next
тама есть и Connection и Connections...
Посмотри библиотеки like "Microsoft Data Environment*"...
тама есть и Connection и Connections...
Не принимает в качестве родителя...:{ Пришлось пока реализовать по-старинке...:{
Так что в ADО у Connection нет родительской коллекции и через ADO ты никак их не переберешь.
Тут можно надется токо CurrentProject и иже с ним (это соотв. токо для Access), может через них есть вариант, надо смотреть, но тебя помойму такой вариант не устаривает.
Не принимает в качестве родителя...:{ Пришлось пока реализовать по-старинке...:{
А почему не создать свою колекцию и туда добавлять все созданные Коннекшены...
... то же для Рекордсетов...
А почему не создать свою колекцию и туда добавлять все созданные Коннекшены...
... то же для Рекордсетов...
Чтож, жаль... Я подозревал, что у коннекшена и рекордсета, фактически, нет доступных рлдителей. Вернее знал это, но хотелось всё же перехитрить это правило... Смирюсь...:{
А почему не создать свою колекцию и туда добавлять все созданные Коннекшены...
... то же для Рекордсетов...
Кстати, да, очень здравая мысль, если так надо их структурировать, то заведи себе класс MyConnection, который будет содержать/вести коллекцию Connection, но тогда уже надо будет создавать и удалять эти Connection через свой класс MyConnection, в котором будут реализованы соответствующие методы.
Как недостаток - немного не привычно для других людей читать твой код, хотя если все методы также аккуратно перегрузить, то ничего не будет заметно, просто место Dim cn As Connection, будет Dim cn As MyConnection
P.S. конечно если у тебя уже готовый проект, то после введения этого класса придется полазить по коду и переделать Connection, но этот объект не так уж часто создается, чтобы это было очень большой проблемой. С другой стороны, такие вещт конечно надо продумывать заранее, а модернизировать уже готовый проект в 3 раз сложнее.
Кстати, да, очень здравая мысль, если так надо их структурировать, то заведи себе класс MyConnection, который будет содержать/вести коллекцию Connection, но тогда уже надо будет создавать и удалять эти Connection через свой класс MyConnection, в котором будут реализованы соответствующие методы.
Как недостаток - немного не привычно для других людей читать твой код, хотя если все методы также аккуратно перегрузить, то ничего не будет заметно, просто место Dim cn As Connection, будет Dim cn As MyConnection
Вот и я говорю...
...ежели чего, я присоединюсь к созданию сего шедевра...
...мене тоже такое нада!!!;)
Вот и я говорю...
...ежели чего, я присоединюсь к созданию сего шедевра...
...мене тоже такое нада!!!;)
ну не знаю, по мне так лучше вообще по минимуму открывать коннекшены - для чтения из бд, и для записи/модификации.
чем меньше коннекшенов, тем оптимизированней программа. имхо, оптимально делать - сконнектился, сделал что надо с бд, отсоединился. а постоянные коннекшены только загружают как сервер, так и локальные ресурсы.
ну не знаю, по мне так лучше вообще по минимуму открывать коннекшены - для чтения из бд, и для записи/модификации.
чем меньше коннекшенов, тем оптимизированней программа. имхо, оптимально делать - сконнектился, сделал что надо с бд, отсоединился. а постоянные коннекшены только загружают как сервер, так и локальные ресурсы.
Согласен!
Но иногда есть задачи, для которых одного активного подключения маловато...
...а уж коллекция рекордсетов - ваще полезная штука!!!
Согласен!
Но иногда есть задачи, для которых одного активного подключения маловато...
...а уж коллекция рекордсетов - ваще полезная штука!!!
Я просто много в VC++ пишу - от ООП уже не денешься никуда, это я насчет инкапсуляции :) по минимуму глобальных переменных :)