<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="us-ascii"/>

<xsl:template match="/">
	<xsl:for-each select="tables/table">
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 2  'RequiresTransaction
END
Attribute VB_Name = "<xsl:value-of select="@tablename"/>"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Member0" ,"DB<xsl:value-of select="@tablename"/>SQL"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
Option Explicit

Implements ObjectControl
Private m_objDB<xsl:value-of select="@tablename"/>SQL As DB<xsl:value-of select="@tablename"/>SQL
Private m_objConnection As ADODB.Connection
Private m_blnAbortTransaction As Boolean

Public Function SetConnection(ByVal vData As ADODB.Connection)
    Set m_objConnection = vData
End Function

Public Function GetConnection() As ADODB.Connection
    Set GetConnection = m_objConnection
End Function

Private Sub Class_Initialize()
    Set m_objDB<xsl:value-of select="@tablename"/>SQL = New DB<xsl:value-of select="@tablename"/>SQL
    m_blnAbortTransaction = false
End Sub

Private Sub Class_Terminate()
    Set m_objDB<xsl:value-of select="@tablename"/>SQL = Nothing
End Sub

Private Sub ObjectControl_Activate()
    
End Sub

Private Function ObjectControl_CanBePooled() As Boolean
    ObjectControl_CanBePooled = True
End Function

Private Sub ObjectControl_Deactivate()
    
End Sub

Public Property Let AbortTransaction (ByVal vData As Boolean)
   m_blnAbortTransaction = vData
End Property

Public Property Get AbortTransaction () As Boolean
    AbortTransaction = m_blnAbortTransaction 
End Property


Public Function ResetOriginal(ByRef col<xsl:value-of select="@tablename"/> As Collection) As Boolean
   Dim obj<xsl:value-of select="@tablename"/> As EFRBO.<xsl:value-of select="@tablename"/>

   ResetOriginal = true

   For Each obj<xsl:value-of select="@tablename"/> In col<xsl:value-of select="@tablename"/>
      If Not m_objDB<xsl:value-of select="@tablename"/>SQL.ResetOriginal(obj<xsl:value-of select="@tablename"/>) then
         ResetOriginal = false
         GoTo EXITHANDLER
      End if
   Next

EXITHANDLER:
   Exit Function
    
End Function

Public Function UndoChanges(ByRef col<xsl:value-of select="@tablename"/> As Collection) As Boolean
    Dim obj<xsl:value-of select="@tablename"/> As EFRBO.<xsl:value-of select="@tablename"/>
    Dim i As Long
    
    UndoChanges = True

    For i = col<xsl:value-of select="@tablename"/>.Count To 1 Step -1
        Set obj<xsl:value-of select="@tablename"/> = col<xsl:value-of select="@tablename"/>(i)
        
<xsl:for-each select="child::fields/field">
     If obj<xsl:value-of select="@tablename"/>.IsDeleted Or obj<xsl:value-of select="@tablename"/>.<xsl:apply-templates select="." mode="variable"/> = 0 Then
</xsl:for-each>        
            col<xsl:value-of select="@tablename"/>.Remove (i)
        Else
            If Not m_objDB<xsl:value-of select="@tablename"/>SQL.UndoChanges(obj<xsl:value-of select="@tablename"/>) Then
                UndoChanges = False
                GoTo EXITHANDLER
            End If
        End If
    Next

EXITHANDLER:
    Exit Function
    
End Function


Public Function SaveObject(ByRef obj<xsl:value-of select="@tablename"/> As EFRBO.<xsl:value-of select="@tablename"/>) As Boolean
    On Error Resume Next
    Dim objContext As ObjectContext
    Dim strSQL As String
    Dim objDBKey As DBKey
    Dim strErrorMessage
    
    '* Assume failure for function
    SaveObject = false
    '* Get reference to transaction context
    Set objContext = GetObjectContext()
    If NOT(Err.Number = 0) Then
        strErrorMessage = "Error in GetObjectContext"
        GoTo ERRORHANDLER
    End If

    If m_objDB<xsl:value-of select="@tablename"/>SQL.IsChanged(obj<xsl:value-of select="@tablename"/>) Then
    '* Get appropriate SQL statement for Update, Insert or Delete
<xsl:for-each select="child::fields/field">
         If obj<xsl:value-of select="@tablename"/>.<xsl:apply-templates select="." mode="variable"/> = 0 then

            '* Nieuw object
            Set objDBKey = New DBKey
            objDBKey.SetConnectString (m_objConnection.ConnectionString)
            obj<xsl:value-of select="@tablename"/>.<xsl:apply-templates select="." mode="variable"/> = objDBKey.NewKey("<xsl:value-of select="@tablename"/>")
            If NOT(Err.Number = 0) Then
                strErrorMessage = "Fout bij bepalen nieuwe sleutel voor <xsl:value-of select="@tablename"/>" + Err.Description
                GoTo ERRORHANDLER
            End If
            strSQL = m_objDB<xsl:value-of select="@tablename"/>SQL.GetInsertSQL(obj<xsl:value-of select="@tablename"/>)
            m_objConnection.Execute strSQL
            If Not( Err.Number = 0) Then
                strErrorMessage = "Fout bij toevoegen <xsl:value-of select="@tablename"/>." + Err.Description + "" + strSQL
                GoTo ERRORHANDLER
            End If
        ElseIf obj<xsl:value-of select="@tablename"/>.IsDeleted() then
            strSQL = m_objDB<xsl:value-of select="@tablename"/>SQL.GetDeleteSQL(obj<xsl:value-of select="@tablename"/>)
            m_objConnection.Execute strSQL
            If Not(Err.Number = 0) Then
                strErrorMessage = "Fout bij verwijderen <xsl:value-of select="@tablename"/>." + Err.Description + "" + strSQL
                GoTo ERRORHANDLER
            End If
        Else
            strSQL = m_objDB<xsl:value-of select="@tablename"/>SQL.GetUpdateSQL(obj<xsl:value-of select="@tablename"/>)
            m_objConnection.Execute strSQL
            If Not(Err.Number = 0) Then
                strErrorMessage = "Fout bij wijzigen <xsl:value-of select="@tablename"/>."
                GoTo ERRORHANDLER
            End If
        End If
    End If
</xsl:for-each>        

   SaveObject = true
   
EXITHANDLER:
   Set objContext = Nothing
   Exit Function
    
ERRORHANDLER:
    App.LogEvent vbCrLf + Err.Number + " " + Err.Source + "." + TypeName(Me) + ":SaveObject " + " " + Err.Description, vbLogEventTypeError
    If Not objContext Is Nothing Then objContext.SetAbort
    On Error GoTo 0
    Err.Raise 1 + vbObjectError, "EFRDO:<xsl:value-of select="@tablename"/>.SaveObject", strErrorMessage, "", 0
    Resume EXITHANDLER
End Function


Public Function SaveObjects(ByRef col<xsl:value-of select="@tablename"/> As Collection) As Boolean
    On Error Resume Next
    Dim lngErrNumber As Long        '* Used for error handling
    Dim strErrDescription As String '* Used for error handling
    Dim objContext As ObjectContext
    Dim obj<xsl:value-of select="@tablename"/> As EFRBO.<xsl:value-of select="@tablename"/>

    '* Assume failure for function
    SaveObjects = false
    '* Get reference to transaction context
    Set objContext = GetObjectContext()

    For Each obj<xsl:value-of select="@tablename"/> In col<xsl:value-of select="@tablename"/>
        Call SaveObject( obj<xsl:value-of select="@tablename"/>)
        If Not(Err.Number = 0) Then
            GoTo ERRORHANDLER
        End if
    Next

    '* Notify trancaction that everything went well
    If m_blnAbortTransaction then
        '* Abort transaction for DEBUG purposes!
        If Not objContext Is Nothing Then objContext.SetAbort
    Else
        If Not objContext Is Nothing Then objContext.SetComplete
    End if
    SaveObjects = true

EXITHANDLER:
   Set objContext = Nothing
   Exit Function
    
ERRORHANDLER:
    App.LogEvent vbCrLf + Err.Number + " " + Err.Source + "." + TypeName(Me) + ":SaveObjects " + " " + Err.Description, vbLogEventTypeError
    lngErrNumber = Err.Number
    strErrDescription = Err.Description
    If Not objContext Is Nothing Then objContext.SetAbort
    On Error GoTo 0
    Err.Raise lngErrNumber, "EFRDO:DB<xsl:value-of select="@tablename"/>.SaveObjects", strErrDescription, "", 0
    Resume EXITHANDLER
End Function

</xsl:for-each>
</xsl:template>

<xsl:template match="field" mode="variable">
	<xsl:if test="@datatype='character'">str</xsl:if>
	<xsl:if test="@datatype='numeric' and @precision='0'">lng</xsl:if>
	<xsl:if test="@datatype='numeric' and @precision!='0'">dbl</xsl:if>
	<xsl:if test="@datatype='date'">dat</xsl:if>
	<xsl:value-of select="@fieldname"/>
</xsl:template>

<xsl:template match="field" mode="datatype">
	<xsl:if test="@datatype='character'">String</xsl:if>
	<xsl:if test="@datatype='numeric' and @precision='0'">Long</xsl:if>
	<xsl:if test="@datatype='numeric' and @precision!='0'">Double</xsl:if>
	<xsl:if test="@datatype='date'">Date</xsl:if>
</xsl:template>


</xsl:stylesheet>
