K-Fire
в данный момент при тестировани использую use "ACCstart" Options формы, а в инициализации формы инициализирую данный класс
вот мои классы
1. Class ACCommon - в основном функции
2. Class ACCbase As ACCommon - доступ к базе
3. Class ACC As ACCbase - доступ к данным, использует ACCOptions для занесения параметров доступа в файл, отрабатывает при открытии бд
4. Class ACCstart As ACCbase - на основе параметров доступа сохраненных ранее, разрешает запрещает доступ к данным, использует ACCOptions для считывания параметров
5. Class ACCOptions - работа с файлом настроек (читает/пишет в файл строки параметр=значение)
проблема возникает при использовании класса ACCstart, совместно с ACCOptions при чем падение может возникать, как до инициализации объекта класса ACCOptions, во время получения значения параметров, так и после того, как все отработало, а именно при ЗАКРЫТИИ документа, только что открытого документа..
но падает клиент только после повторного открытия одного и того же документа, хотя я принудительно удаляю и в внутри классов и снаружи после их отработки
для чистоты закомментировал весь код класса ACCstart кроме инициализации класса ACCOptions и получения нескольких параметров, и процедуры закрытия класса
может быть проблема в листе, который я использую
Код:
Type param
value As String
End Type
Private data List As param
при инициализации ACCOptions данные из файла с параметрами заносятся в лист
Код:
If Not checkFile( filePath) Then Exit Sub
filenum = Freefile()
Open filePath For Input Lock Write As filenum Charset=DEFCHARSET
Do Until Eof(fileNum)
Line Input #fileNum, text
If text <> "" And Instr( text, PD) > 0 Then
data(Strtoken( text, PD, 1)).value = Strtoken( text, PD, 2)
End If
Loop
Close filenum
при закрытии класса, если данные менялись, то переписываются данные в файл
Код:
Sub close
Dim filenum As Integer
try:
On Error Goto catch
If isDataChanged Then
filenum = Freefile()
Open filePath For Output Lock Write As filenum Len=1000 Charset=DEFCHARSET
Forall dat In data
Print #filenum, Listtag(dat) & PD & dat.value
End Forall
Close filenum
End If
Erase data
Set ses = Nothing
Exit Sub
catch:
Call errh (Getthreadinfo(1) & " (Class ACCOptions)", False)
Exit Sub
End Sub
ну и собственно, занесение и получение значения параметров
Код:
Function setEnvir( key As String, value As String) As Boolean
try:
On Error Goto catch
If data(key).value <> value Then
data(key).value = value
isDataChanged = True
End If
Exit Function
catch:
Call errh (Getthreadinfo(1) & " (Class ACCOptions)", False)
Exit Function
End Function
'--------------------------------------------------------------------------------------------------------------------------------------
Function getEnvir( key As String) As String
try:
On Error Goto catch
getEnvir = data(key).value
Exit Function
catch:
Call errh (Getthreadinfo(1) & " (Class ACCOptions)", False)
Exit Function
End Function
'--------------------------------------------------------------------------------------------------------------------------------------
вроде все логично, но почему лотус падает, когда получаем данные не понятно ?!
может кто сталкивался с подобным ?