?? datamanager.cls
字號:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "DataManager"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
'--------------------------------
'時間:2001.11.12
'版權:北京用友軟件股份有限公司
'設計:章景峰
'編碼:章景峰
'說明:U8資金管理---數據對象
'--------------------------------
Option Explicit
Public Function MoveTo(con As ADODB.Connection, EO As U8FDEso.EntityObject, MoveMode As U8FDEso.MoveModeEnum, Optional Reversal As Boolean = False) As Boolean
Dim sql As String
Dim rec As New ADODB.Recordset
Dim recChild As New ADODB.Recordset
Dim objChildEO As U8FDEso.EntityObject
Dim objFO As U8FDEso.FieldObject
'----建立數據庫連接,并拼寫SQL語句
Select Case MoveMode
Case esoCurrent
sql = "Select * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " = '" & EO.OID.ID & "'"
Case esoFirst
sql = "Select Top 1 * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " Like '" & Right("0" & EO.BIType, 2) & "%' Order By " & EO.SourceOIDField & " ASC"
Case esoLast
sql = "Select Top 1 * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " Like '" & Right("0" & EO.BIType, 2) & "%' Order By " & EO.SourceOIDField & " DESC"
Case esoNext
sql = "Select Top 1 * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " Like '" & Right("0" & EO.BIType, 2) & "%' And " & EO.SourceOIDField & " > '" & EO.OID.ID & "' Order By " & EO.SourceOIDField & " ASC"
Case esoPrevious
sql = "Select Top 1 * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " Like '" & Right("0" & EO.BIType, 2) & "%' And " & EO.SourceOIDField & " < '" & EO.OID.ID & "' Order By " & EO.SourceOIDField & " DESC"
End Select
'----打開結果集
rec.Open sql, con, adOpenStatic, adLockOptimistic
'----如果未發現記錄且Reversal為True,Then翻轉
If rec.EOF Then
' MsgBox "已經翻到頭了,請向相反的方向翻頁!", vbInformation, "資金管理"
Set rec = Nothing
If Reversal Then
sql = "Select Top 1 * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " Like '" & Right("0" & EO.BIType, 2) & "%' Order By " & EO.SourceOIDField & IIf(MoveMode = esoNext, " ASC", " DESC")
Else 'If Not Reversal Then
sql = "Select * From " & EO.SourceTable & " Where " & EO.SourceOIDField & " = '" & EO.OID.ID & "'"
End If
rec.Open sql, con, adOpenStatic, adLockOptimistic
End If
If Not rec.EOF Then
For Each objFO In EO.Fields
If objFO.Persistent And objFO.IsUsed Then
objFO.Value = rec.Fields.Item(objFO.SourceField)
End If
Next
'----成功后,置State為esoInstance
EO.State = esoInstance
'----裝載子表數據
If Not EO.EOS.EOMetaData Is Nothing Then
' If Not EO.OID Is Nothing And EO.OID <> "" Then
' EO.EOS.EOMetaData.ParentOID.ID = EO.OID.ID
' Else
EO.EOS.EOMetaData.ParentOID.ID = rec(EO.SourceOIDField)
' End If
sql = "Select * From " & EO.EOS.EOMetaData.SourceTable & " Where " & EO.EOS.EOMetaData.ParentField & " = '" & EO.EOS.EOMetaData.ParentOID.ID & "'"
recChild.Open sql, con
While Not recChild.EOF
'----
Set objChildEO = EO.EOS.EOMetaData.Clone
'----
For Each objFO In objChildEO.Fields
' For i = 1 To objChildEO.Fields.Count
' Set objFO = objChildEO.Fields.Item(i)
If objFO.Persistent And objFO.IsUsed Then
objFO.Value = recChild.Fields.Item(objFO.SourceField)
End If
Next
'----成功后,置State為esoInstance
objChildEO.State = esoInstance
'----
If Not objChildEO.EOS.EOMetaData Is Nothing Then
MoveTo con, objChildEO, esoCurrent
End If
'----
EO.EOS.Append objChildEO, "K" & objChildEO(objChildEO.SourceOIDField)
recChild.MoveNext
Wend
recChild.Close
Set recChild = Nothing
End If
End If
rec.Close
Set rec = Nothing
Set objFO = Nothing
Set objChildEO = Nothing
MoveTo = True
End Function
Public Function MoveToBySQL(DataSourceName As String, sql As String) As String
Dim rec As New ADODB.Recordset
If con.State = adStateClosed Then con.Open DataSourceName
rec.Open sql, con, adOpenStatic, adLockOptimistic
If rec.EOF Then
MoveToBySQL = 0
Else
MoveToBySQL = rec.Fields(1).Value
End If
rec.Close
Set rec = Nothing
End Function
Public Function Delete(con As ADODB.Connection, EO As U8FDEso.EntityObject) As Boolean
Dim sql As String
Dim objChildEO As U8FDEso.EntityObject
If Not EO.EOS.EOMetaData Is Nothing Then
If Not EO.EOS.EOMetaData.EOS.EOMetaData Is Nothing Then
For Each objChildEO In EO.EOS
Delete con, objChildEO
Next
Else
sql = "Delete From " & EO.EOS.EOMetaData.SourceTable & " Where " & EO.EOS.EOMetaData.ParentField & " = '" & EO(EO.SourceOIDField) & "'" '最末一級EO.EOS.EOMetaData.ParentOID.ID
con.Execute sql
End If
End If
sql = "Delete From " & EO.SourceTable & " Where " & EO.SourceOIDField & " = '" & EO(EO.SourceOIDField) & "'" '最上一級'EO.OID.ID
con.Execute sql
Set objChildEO = Nothing
Delete = True
End Function
Public Function DeleteBIType(con As ADODB.Connection, ByVal BIStyle As Long) As Boolean
Dim sql As String
sql = "Delete From fd_fields where iEntityID = '" & BIStyle & " '"
con.Execute sql
' sql = "Delete From FD_Entities Where iDeriveBIType = '" & BIStyle & " '"
' con.Execute sql
sql = "Delete From FD_Entities Where iBIType = '" & BIStyle & " '"
con.Execute sql
DeleteBIType = True
End Function
Public Function Save(con As ADODB.Connection, EO As U8FDEso.EntityObject) As Boolean
Dim sql As String
Dim sFields As String
Dim sValues As String
Dim vValue As Variant
Dim objFO As U8FDEso.FieldObject
Dim objChildEO As U8FDEso.EntityObject
Dim recChild As New ADODB.Recordset
On Error GoTo lblHandle
Save = False
Select Case EO.State
'----新增
Case esoAddNew
For Each objFO In EO.Fields
' For i = 1 To EO.Fields.Count
' Set objFO = EO.Fields.Item(i)
'----已使用并需要持久化
If objFO.Persistent And objFO.IsUsed Then
'----處理Value值
vValue = objFO.Value
If IsEmpty(vValue) Or IsNull(vValue) Then
vValue = objFO.DefaultValue
End If
'----取字段名稱
sFields = sFields & objFO.SourceField & ", "
'----取值
If IsEmpty(objFO.Value) Or IsNull(objFO.Value) Then
sValues = sValues & "NULL, "
Else
Select Case objFO.DataType
'----字符型
Case esoString, esoID, esoMemo
sValues = sValues & "'" & vValue & "', "
'----日期型
Case esoDate
sValues = sValues & "'" & vValue & "', "
'----布爾型
Case esoBoolean
sValues = sValues & CByte(vValue) / 255 & ", "
'----數值型
Case esoLong, esoCurrency, esoDouble
sValues = sValues & vValue & ", "
End Select
End If
End If
Next
sFields = Left(sFields, Len(sFields) - 2)
sValues = Left(sValues, Len(sValues) - 2)
'----拼寫SQL語句
sql = "Insert Into " & EO.SourceTable & " "
sql = sql & "(" & sFields & ") Values (" & sValues & ");"
'----編輯
Case esoEdit
For Each objFO In EO.Fields
' For i = 1 To EO.Fields.Count
' Set objFO = EO.Fields.Item(i)
'----已使用并需要持久化
If objFO.Persistent And objFO.IsUsed Then
'----處理Value值
vValue = objFO.Value
If IsEmpty(vValue) Or IsNull(vValue) Then
vValue = objFO.DefaultValue
End If
'----取值
Select Case objFO.DataType
'----字符型
Case esoString, esoID, esoMemo
If IsNull(objFO.Value) Then
sValues = sValues & objFO.SourceField & " = NULL, "
Else
sValues = sValues & objFO.SourceField & " = '" & vValue & "', "
End If
'----日期型
Case esoDate
If IsNull(objFO.Value) Then
sValues = sValues & objFO.SourceField & " = NULL, "
Else
sValues = sValues & objFO.SourceField & " = '" & vValue & "', "
End If
'----布爾型
Case esoBoolean
sValues = sValues & objFO.SourceField & " = " & CByte(vValue) / 255 & ", "
'----數值型
Case esoLong, esoCurrency, esoDouble
If IsNull(objFO.Value) Then
sValues = sValues & objFO.SourceField & " = NULL, "
Else
sValues = sValues & objFO.SourceField & " = " & vValue & ", "
End If
End Select
End If
Next
sValues = Left(sValues, Len(sValues) - 2)
'----拼寫SQL語句
sql = "Update " & EO.SourceTable & " Set "
sql = sql & sValues & " Where " & EO.SourceOIDField & " = '" & EO.OID.ID & "'"
End Select
'----執行
Dim iAffectedRecords As Long
If sql <> "" Then
con.Execute sql, iAffectedRecords
If iAffectedRecords = 0 Then
Err.Raise ErrNoUpdatedRecords, , "本次提交沒有更新記錄!"
End If
End If
'----存儲子表信息
If Not EO.EOS.EOMetaData Is Nothing Then
'----刪除子表中的記錄
EO.EOS.EOMetaData.ParentOID.ID = EO.OID.ID
If EO.BIType <> 1 Then
sql = "Delete From " & EO.EOS.EOMetaData.SourceTable & " Where " & EO.EOS.EOMetaData.ParentField & " = '" & EO.EOS.EOMetaData.ParentOID.ID & "'"
con.Execute sql
ElseIf EO.State = esoAddNew Or EO.State = esoEdit Then '賬戶定義,入帳科目
sql = "Delete From " & EO.EOS.EOMetaData.SourceTable & " Where " & EO.EOS.EOMetaData("type_flag").SourceField & "<>0 and " & EO.EOS.EOMetaData.ParentField & " = '" & EO.EOS.EOMetaData.ParentOID.ID & "'"
con.Execute sql
End If
'----準備批量更新數據
recChild.Open EO.EOS.EOMetaData.SourceTable, con, adOpenKeyset, adLockBatchOptimistic, adCmdTable
For Each objChildEO In EO.EOS
recChild.AddNew
For Each objFO In objChildEO.Fields
If objFO.Persistent And objFO.IsUsed Then
If objFO.SourceField = EO.EOS.EOMetaData.ParentField Then
recChild.Fields.Item(objFO.SourceField) = EO.EOS.EOMetaData.ParentOID.ID
ElseIf objFO.DataType = esoBoolean Then
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -