From e005b0a37feedffafc3fb89c61f054b692dc0c43 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Ledure Date: Thu, 27 Apr 2017 16:21:06 +0200 Subject: Access2Base - Optimize default value in field class Buffer default value to optimize multiple records insertions Change-Id: Ia339e8f4b4d00419978503d6351b331a0b987826 --- wizards/source/access2base/Field.xba | 25 ++++++++++++++++++------- wizards/source/access2base/Recordset.xba | 20 +++++++------------- 2 files changed, 25 insertions(+), 20 deletions(-) (limited to 'wizards') diff --git a/wizards/source/access2base/Field.xba b/wizards/source/access2base/Field.xba index 5a7fcc4cd870..bae69310e92d 100644 --- a/wizards/source/access2base/Field.xba +++ b/wizards/source/access2base/Field.xba @@ -21,6 +21,8 @@ Private _ParentName As String Private _ParentType As String Private _ParentDatabase As Object Private _ParentRecordset As Object +Private _DefaultValue As String +Private _DefaultValueSet As Boolean Private Column As Object ' com.sun.star.sdb.OTableColumnWrapper ' or org.openoffice.comp.dbaccess.OQueryColumn ' or com.sun.star.sdb.ODataColumn @@ -33,6 +35,8 @@ Private Sub Class_Initialize() _Name = "" _ParentName = "" _ParentType = "" + _DefaultValue = "" + _DefaultValueSet = False Set Column = Nothing End Sub ' Constructor @@ -379,7 +383,7 @@ Private Function _PropertiesList() As Variant , "Description", "Name", "ObjectType", "Size", "SourceField", "SourceTable" _ , "TypeName" _ ) - Case OBJRECORDSET + Case OBJRECORDSET _PropertiesList = Array("DataType", "DataUpdatable", "dbType", "DefaultValue" _ , "Description" , "FieldSize", "Name", "ObjectType" _ , "Size", "SourceTable", "TypeName", "Value" _ @@ -450,13 +454,18 @@ Const cstMaxBinlength = 2 * 65535 If Column.IsAutoIncrement Then _PropertyGet = False ' Forces False if auto-increment (MSAccess) End If Case UCase("DefaultValue") - If Utils._hasUNOProperty(Column, "DefaultValue") Then ' Default value in database set via SQL statement - _PropertyGet = Column.DefaultValue - ElseIf Utils._hasUNOProperty(Column, "ControlDefault") Then ' Default value set in Base via table edition - If IsEmpty(Column.ControlDefault) Then _PropertyGet = "" Else _PropertyGet = Column.ControlDefault - Else - _PropertyGet = "" + ' default value buffered to avoid multiple calls + If Not _DefaultValueSet Then + If Utils._hasUNOProperty(Column, "DefaultValue") Then ' Default value in database set via SQL statement + _DefaultValue = Column.DefaultValue + ElseIf Utils._hasUNOProperty(Column, "ControlDefault") Then ' Default value set in Base via table edition + If IsEmpty(Column.ControlDefault) Then _DefaultValue = "" Else _DefaultValue = Column.ControlDefault + Else + _DefaultValue = "" + End If + _DefaultValueSet = True End If + _PropertyGet = _DefaultValue Case UCase("Description") bCond1 = Utils._hasUNOProperty(Column, "Description") bCond2 = Utils._hasUNOProperty(Column, "HelpText") @@ -631,6 +640,8 @@ Dim oParent As Object If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value If Utils._hasUNOProperty(Column, "ControlDefault") Then ' Default value set in Base via table edition Column.ControlDefault = pvValue + _DefaultValue = pvValue + _DefaultValueSet = True End If Case UCase("Description") If _ParentType <> OBJTABLEDEF Then Goto Trace_Error diff --git a/wizards/source/access2base/Recordset.xba b/wizards/source/access2base/Recordset.xba index 8348b0f81207..57e3641b065b 100644 --- a/wizards/source/access2base/Recordset.xba +++ b/wizards/source/access2base/Recordset.xba @@ -161,7 +161,7 @@ Public Function AddNew() As Boolean Const cstThisSub = "Recordset.AddNew" Dim i As Integer, iFieldsCount As Integer, oField As Object -Dim sdefault As String, oColumn As Object +Dim sDefault As String, oColumn As Object Dim iValue As Integer, lValue As Long, sgValue As Single, dbValue As Double, dValue As Date Dim vTemp As Variant If _ErrorHandler() Then On Local Error Goto Error_Function @@ -192,16 +192,10 @@ Dim vTemp As Variant For i = 0 To iFieldsCount - 1 Set oField = Fields(i) Set oColumn = oField.Column - If Utils._hasUNOProperty(oColumn, "DefaultValue") Then ' Default value in database set via SQL statement - sDefault = oColumn.DefaultValue - ElseIf Utils._hasUNOProperty(oColumn, "ControlDefault") Then ' Default value set in Base via table edition - If IsEmpty(oColumn.ControlDefault) Then sdefault = "" Else sDefault = oColumn.ControlDefault - Else - sdefault = "" - End If - If sDefault = "" Then + sDefault = oField.DefaultValue + If sDefault = "" Then ' No default value If oColumn.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE Then oColumn.updateNull() - Else ' No default value + Else With com.sun.star.sdbc.DataType Select Case oColumn.Type Case .BIT, .BOOLEAN @@ -232,13 +226,13 @@ Dim vTemp As Variant 'If Abs(dbValue) < 1.79769313486232E308 And Abs(dbValue) > 4.94065645841247E-307 Then oColumn.updateDouble(dbValue) oColumn.updateDouble(dbValue) Else - oColumn.updateString(sdefault) + oColumn.updateString(sDefault) End If Else - oColumn.updateString(sdefault) + oColumn.updateString(sDefault) End If Case .CHAR, .VARCHAR, .LONGVARCHAR - oColumn.updateString(sdefault) ' vbString + oColumn.updateString(sDefault) ' vbString Case .DATE dValue = DateValue(sDefault) vTemp = New com.sun.star.util.Date -- cgit