Я пишу скрипт, который извлекает некоторые данные пациента и генерирует экспорт XML.
С каждой записью пациента есть связанный врач, но вместо того, чтобы повторять сведения о враче в каждой записи, я решил установить идентификатор врача в записи пациента, а затем включить список врачей в другой раздел внизу документ.
Одна вещь, которую мне нужно сделать, это включить GUID для доктора в историю болезни пациента, но фактическая связь с базой данных - это локальный неуникальный идентификатор. Я решил, что лучшим способом продвижения вперед будет сопоставление идентификаторов GUID в списке локальных идентификаторов с использованием словаря.
В любом случае, короче говоря, вот бит, который составляет список требований:
While Not PatientRec.EOF
Set DoctorRec = MyDB.OpenRecordset("Select Lng_Key, Txt_GUID From Tbl_LU_DoctorDetail Where Lng_Key = " & PatientRec![Lng_Doctor])
While Not DoctorRec.EOF
If (IsNull(DoctorRec![Txt_GUID])) Then
DoctorRec.Edit
DoctorRec![Txt_GUID] = CreateGUID()
DoctorRec.Update
End If
DoctorList.Add DoctorRec![Lng_Key], DoctorRec![Txt_GUID]
' outputs something like '5:{03f50fe1-a0a4-4733-906a-771e22845ea6}
MsgBox (DoctorRec![Lng_Key] & ":" & DoctorList.Items(DoctorRec![Lng_Key]))
DoctorRec.MoveNext
Wend
Wend
' outputs nothing!
MsgBox (DoctorList.Item(5))
' but there is something in there???
MsgBox (DoctorList.count)
Я также пытался привести идентификатор к строке, используя CStr, но получить тот же результат с DoctorList.Item ("5")
Хуже, когда я пытаюсь:
Dim v As Variant
For Each v In DoctorList.Keys
MsgBox (v & ":" & DoctorList.Item(v))
Next
Я получаю ошибку:
Run-time error '3420':
Object invalid or no longer set.
Тестирование (и файл справки) показывает, что Variant 'v' не устанавливается ни на что из свойства Keys, но For Each по крайней мере пытается выполнить цикл ...
- Обновление
Я нашел похожий вопрос на vbforums: http://www.vbforums.com/showthread.php?t=622933
Я проверил с помощью жестко закодированного ключа и предмета:
DoctorList.Add 5, "String"
Цикл For Each теперь успешно выполняется один раз, но затем завершается с ошибкой 3420 во втором цикле (даже если он должен был остановиться в первом цикле).