Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите оптимизировать
 
 автор: час   (09.06.2009 в 14:40)   личное сообщение
 
 


Private Sub CHICK_OUT()
  Dim ctl As Control
  Dim rst As ADODB.Recordset
If GLB_Proverka = True Then Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Process_Log.txt"), Now() & " _модуль " & "FRM_TUNING_PROGRAMMS" & " _процедура " & "CHICK_OUT читаем настройки")
'---------------------------------------------------------------------------
On Error GoTo CHICK_OUT_Error
'---------------------------------------------------------------------------
  Set rst = New ADODB.Recordset
  rst.Open "TUNING_TBL", GLB_con, adOpenKeyset, adLockOptimistic
    With rst
        If .RecordCount Then
'            .MoveLast ' Заполнение запроса
            .MoveFirst ' Начнем с первой записи
            Do Until .EOF
      For Each ctl In Me.Controls
       MsgBox ctl.Name
      If ctl.Name = rst!ID Then
      If rst!Status = True Then
     
      ctl.Value = 1 'rst!Status
      Else
      ctl.Value = 0
      End If
      End If
      Next
    .MoveNext
            Loop
        End If
    End With
    rst.Close
    Set rst = Nothing
      Set ctl = Nothing
    
    Me!Patch_ARHIV = GLB_Patch_ARHIV
    Me!Patch_EXCHANGE = GLB_Patch_EXCHANGE
    Me!Patch_REPORT = GLB_Patch_REPORT
    Me!Departament = GLB_Departament
    
    Me!Patch_Driver_FR = FUN_OUT_TABLE_String("TUNING_TBL", "Patch", "Драйвер_ФР", "ID")
    Me!Patch_Skaners = FUN_OUT_TABLE_String("TUNING_TBL", "Patch", "Драйвер_Сканера", "ID")
'---------------------------------------------------------------------------
On Error GoTo 0
Exit Sub
CHICK_OUT_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), Now() & " _модуль " & "FRM_TUNING_PROGRAMMS" & " _процедура " & "CHICK_OUT" & " ..ошибка." & Err.Description)

End Sub




На форме перебираю все контролы и если имя контрола совпадает с именем в таблице , то присваиваю значение.


Но контролы ищу в цикле-можно ли сразу фокус установить на контроле - если -да, то как код подправить, или как лучшее сделать????

  Ответить  
 
 автор: Lukas   (09.06.2009 в 15:20)   личное сообщение
 
 


'Цикл по записям rst
    If funCheckCtrl(Me, rst!ID) Then
        With Me.Controls(rst!ID)
            .Value = ...
            '...
        End With
    End If

'Что-нибудь такое в общий модуль
Public Function funCheckCtrl(frm As Form, CtrlName As String) As Boolean
On Error GoTo Exit_Function
    funCheckCtrl = frm.Controls(CtrlName).Name = CtrlName
Exit_Function:
End Function

Не надо будет перебирать все контролы формы для каждой записи рекордсета

  Ответить  
 
 автор: час   (09.06.2009 в 16:22)   личное сообщение
 
 

Спасибо , Lukas
Опробываю .....

чё та как то не то......

  Ответить  
 
 автор: час   (09.06.2009 в 16:44)   личное сообщение
 
 

Как то вот на до бы

Me.Controls(rst!ID).SetFocus

  Ответить  
 
 автор: Lukas   (09.06.2009 в 16:47)   личное сообщение
 
 

А вдруг это Label?
А зачем вообще такой изыск?

  Ответить  
 
 автор: час   (09.06.2009 в 16:50)   личное сообщение
 
 

Что ба это был не лабел - я уже позаботился....
Разместил на форме одноимённые поля
Кстати - это VB6
Теперь надо просто присвоить одноимённым полям значения из одномённых полей таблицы.............
Это все логические поля - галочки такие - да\нет

  Ответить  
 
 автор: Lukas   (09.06.2009 в 16:45)   личное сообщение
 
 

Пить меньше надо.

Чего не то?

  Ответить  
 
 автор: час   (09.06.2009 в 16:48)   личное сообщение
 
 

не заносит данные как то не ..........

  Ответить  
 
 автор: час   (09.06.2009 в 16:58)   личное сообщение
 
 

With rst
If .RecordCount Then
' .MoveLast ' Заполнение запроса
.MoveFirst ' Начнем с первой записи
Do Until .EOF
If funCheckCtrl(Me, rst!ID) = True Then
Me.Controls(rst!ID).Value = 1 'rst!Status
Else
Me.Controls(rst!ID).Value = 0
End If
.MoveNext
Loop
End If
End With
rst.Close
Set rst = Nothing
Set ctl = Nothing

  Ответить  
 
 автор: Lukas   (09.06.2009 в 17:08)   личное сообщение
 
 

Неа.
Вот здесь будет ошибка, так как нет такого контрола в коллекции.
Me.Controls(rst!ID).Value = 0

Надо наверное так:
For i=0( или 1, 2...) To rst.Fields.Count-1
Me.Contols(rst.Fields(i).Name).Value=rst.Fields(i)

А почему бы не назначить форме и контролам источники?

ps. Сейчас придет гестапо, включит паяльник и растолкует как надо.

  Ответить  
 
 автор: Denis V.   (09.06.2009 в 19:56)   личное сообщение
 
 

пробежаться по коллекции можно таким образом:

For Each objFld In rst.Fields
     Debug.Print objFld.Name
Next

  Ответить  
 
 автор: час   (10.06.2009 в 08:55)   личное сообщение
 
 

Да, спасибо ! пойду пробегусь.
Бегу, но попадаются и кнопки и лабелы-
Мне выгоднее бежать по рекордсету, а на форме присваивать одноимённому полю - значеие из оекордсета

  Ответить  
 
 автор: час   (10.06.2009 в 08:54)   личное сообщение
 
 

Гестапооооооооооооооооооооо

  Ответить  
 
 автор: час   (10.06.2009 в 09:12)   личное сообщение
 
 

Всем отокликнувшимся спасибо!!
опимизация показалась во такой:



    With rst
        If .RecordCount Then
        .MoveFirst ' &#205
        
            Do Until .EOF
                If rst!Status = True Then
                Me.Controls(rst!ID).Value = 1 'rst!Status
                Else
                Me.Controls(rst!ID).Value = 0
                End If
            .MoveNext
            Loop
        End If
    End With
rst.Close
Set rst = Nothing
Set ctl = Nothing



но не удачно

если контрола нет , то пипец.......

может написать on error resume next

например вот так

    With rst
        If .RecordCount Then
        .MoveFirst ' Начнем с первой записи
        
            Do Until .EOF
                If rst!Status = True Then
                On Error Resume Next
                Me.Controls(rst!ID).Value = 1
                Else
                On Error Resume Next
                Me.Controls(rst!ID).Value = 0
                End If
            .MoveNext
            Loop
        End If
    End With
rst.Close
Set rst = Nothing
Set ctl = Nothing


Как Вы считаете???

  Ответить  
 
 автор: час   (10.06.2009 в 11:29)   личное сообщение
 
 

Как Вы считаете???

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList