|
|
|
|
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
|
На форме перебираю все контролы и если имя контрола совпадает с именем в таблице , то присваиваю значение.
Но контролы ищу в цикле-можно ли сразу фокус установить на контроле - если -да, то как код подправить, или как лучшее сделать???? | |
|
| |
|
|
|
|
'Цикл по записям 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
|
Не надо будет перебирать все контролы формы для каждой записи рекордсета | |
|
| |
|
|
|
| Спасибо , Lukas
Опробываю .....
чё та как то не то...... | |
|
| |
|
|
|
| Как то вот на до бы
Me.Controls(rst!ID).SetFocus | |
|
| |
|
|
|
| А вдруг это Label?
А зачем вообще такой изыск? | |
|
| |
|
|
|
| Что ба это был не лабел - я уже позаботился....
Разместил на форме одноимённые поля
Кстати - это VB6
Теперь надо просто присвоить одноимённым полям значения из одномённых полей таблицы.............
Это все логические поля - галочки такие - да\нет | |
|
| |
|
|
|
| Пить меньше надо.
Чего не то? | |
|
| |
|
|
|
| не заносит данные как то не ..........
| |
|
| |
|
|
|
| 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 | |
|
| |
|
|
|
| Неа.
Вот здесь будет ошибка, так как нет такого контрола в коллекции.
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. Сейчас придет гестапо, включит паяльник и растолкует как надо. | |
|
| |
|
|
|
| пробежаться по коллекции можно таким образом:
For Each objFld In rst.Fields
Debug.Print objFld.Name
Next
|
| |
|
| |
|
|
|
| Да, спасибо ! пойду пробегусь.
Бегу, но попадаются и кнопки и лабелы-
Мне выгоднее бежать по рекордсету, а на форме присваивать одноимённому полю - значеие из оекордсета | |
|
| |
|
|
|
|
| Всем отокликнувшимся спасибо!!
опимизация показалась во такой:
With rst
If .RecordCount Then
.MoveFirst ' Í
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
|
Как Вы считаете??? | |
|
| |
|
|
|
| Как Вы считаете??? | |
|
| |