ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Help / WLanguage / Managing databases / HFSQL / HFSQL functions
  • Managing automatic identifiers
  • Reusing the deleted or freed records
  • Version of data file after an addition
  • Adding a record into a query
  • Adding records into a view
  • Browsing and adding records
  • Slowness when adding or deleting a record for the first time in an HFSQL data file
  • Addition into a database in Hyper File 5.5 format
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Others
Stored procedures
Adds:
  • the record found in memory into the data file (query or view).
  • WINDEVWEBDEV - Server codeAndroidAndroid Widget the record found in a Record variable into the data file (query or view).
The indexes corresponding to all the keys used in the data file are automatically updated. The possible memos are added if the management of memos is enabled (HSetMemo).
After the call to HAdd:
  • An automatic management of errors is proposed for several types of errors: Duplicate error, integrity error, password error, modification conflict error and status error during modification conflict, lock error, ... For more details, see Assisted HFSQL error handling.
  • If the management of duplicates is enabled and if the data file contains a unique key, HErrorDuplicates returns True if the value of added key is not unique. The record is not added.
  • The added record becomes the current record. The automatic identifier is automatically filled. By default, the current iteration is not affected.
Remark: The entire record in memory is written into the data file with the values that were assigned to it (otherwise, the content of record previously read). To clear the values from the record in memory, all you have to do is use HReset.
// Add a record in a data file
// (record described through programming)
Customer.LastName = "Clark"
Customer.FirstName = "Vince"
Customer.Address = "Palm Lane"
Customer.City = "Philadelphia"
Customer.Zip = "19101"
Customer.Country = "USA"
HAdd(Customer)
WINDEVUniversal Windows 10 AppAndroidAndroid Widget iPhone/iPadIOS WidgetJavaHFSQL ClassicHFSQL Client/ServerStored proceduresHyper File 5.5OLE DBNative Connectors (Native Accesses)
// Add a record entered in a window
// in the Customer data file
ScreenToFile()
HAdd(Customer)
Syntax

Adding the record found in memory into a data file, view or query Hide the details

<Result> = HAdd([<Data file> [, <Options>]])
<Result>: Boolean
  • True if the record was added,
  • False if a problem occurred (integrity error, duplicate error, ...). HError is used to identify the error.
<Data file>: Optional character string
Name of the data file, view or query used.
If this name is not specified, HAdd will use the last data file used by the last HFSQL function (function starting with "H").
<Options>: Optional constant
Used to configure:
  • the effect of addition on the current browse.
  • the mode for calculating the automatic identifier. For more details, see Managing the automatic identifier during an addition.
  • the lock mode applied to the added record.
    • PHP Management of locks not available in PHP.
    • AndroidAndroid Widget Management of locks not available in SQLite databases.
    • Java Access by JDBC: The management of locks is not available for databases accessed by JDBC.
  • the management of duplicates.
  • the management of integrity.
Hyper File 5.5 This parameter is ignored.
hAffectBrowseEffect of addition on the browse: The addition affects the browse.
For example, HReadNext used after HAdd positions on the record found after the added record.
The hAffectBrowse constant has priority over the hWriteDefault constant.
hCheckDuplicatesManagement mode of duplicates: Checks for duplicates for this operation, even if the duplicate check is disabled (HSetDuplicates).
A WLanguage error occurs if the hIgnoreDuplicates and hCheckDuplicates constants are used at the same time.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hCheckIntegrityManagement mode of integrity: Checks the integrity of operation even if the automatic integrity check is disabled (HSetIntegrity).
A WLanguage error occurs if the hIgnoreIntegrity and hCheckIntegrity constants are used at the same time.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hForceIdAutoMode for calculating the automatic identifier: The automatic identifier is not calculated during the addition. The identifier corresponds to:
  • the value assigned to the item through programming (CUSTOMERID = 7 for example)
  • the default identifier value specified in the data model editor (if the data file was just opened, with no record read)
  • the identifier value found in memory (identifier value for the last record read in the data file).
Once the record is added, the next automatic identifier calculated by the HFSQL engine will be calculated while ignoring the value added by hForceIdAuto.
A WLanguage error occurs if the hSetIdAuto and hForceIdAuto constants are used at the same time.
hIgnoreDuplicatesManagement mode of duplicates: Does not check for duplicates for this action, even if the automatic duplicate check is enabled (HSetDuplicates).
A WLanguage error occurs if the hIgnoreDuplicates and hCheckDuplicates constants are used at the same time.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hIgnoreIntegrityManagement mode of integrity: Ignores the integrity check for this add operation, even if the automatic integrity check is enabled (HSetIntegrity).
A WLanguage error occurs if the hIgnoreIntegrity and hCheckIntegrity constants are used at the same time.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hLockNo
(default value)
Lock mode applied to the added record: No lock: the added record will not be locked.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hLockReadWriteLock mode applied to the added record: Lock in read/write mode: the added record will be locked in read/write. This record cannot be read or modified by another application. Only the current application can modify it, read it or unlock it.

This constant is available for HFSQL Client/Server and Native Connectors only.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hLockWriteLock mode applied to the added record: Lock in write mode: the added record will be locked in write mode. This record can be read by another application but it cannot be modified by another application. Only the current application can modify it or unlock it.

This constant is available for HFSQL Client/Server and Native Connectors only.
AndroidAndroid Widget PHP This constant is not available.
Java Access by JDBC: This constant is not available.
hSetIdAutoMode for calculating the automatic identifier: The automatic identifier is not calculated during the addition: the identifier value will be the one stored during the addition.
The next identifier value calculated by the HFSQL engine will correspond to the greatest identifier value in the file +1.
A WLanguage error occurs if the hSetIdAuto and hForceIdAuto constants are used at the same time.
hWriteDefault
(default value)
Effect of addition on the browse: The addition does not affect the current browse.
For example, HReadNext used after HAdd positions on the record found after the current record before the addition.
The hAffectBrowse constant has priority over the hWriteDefault constant.
WINDEVWEBDEV - Server codeAndroidAndroid Widget

Adding the content of a Record variable into a data file, view or query Hide the details

<Result> = HAdd(<Data file> , <Record> [, <Options>])
<Result>: Boolean
  • True if the record was added,
  • False if a problem occurred (integrity error, duplicate error, ...). HError is used to identify the error.
<Data file>: Character string
Name of the data file, view or query used.
<Record>: Record variable
Name of the Record variable containing the different values of items.
<Options>: Optional constant
Used to configure:
  • the effect of addition on the current browse.
  • the mode for calculating the automatic identifier. For more details, see Managing the automatic identifier during an addition.
  • the lock mode applied to the added record.
  • the management of duplicates.
  • the management of integrity.
Hyper File 5.5 This parameter is ignored.
hAffectBrowseEffect of addition on the browse: The addition affects the browse.
For example, HReadNext used after HAdd positions on the record found after the added record.
The hAffectBrowse constant has priority over the hWriteDefault constant.
hCheckDuplicatesManagement mode of duplicates: Checks for duplicates for this operation, even if the duplicate check is disabled (HSetDuplicates).
A WLanguage error occurs if the hIgnoreDuplicates and hCheckDuplicates constants are used at the same time.
AndroidAndroid Widget This constant is not available.
hCheckIntegrityManagement mode of integrity: Checks the integrity of operation even if the automatic integrity check is disabled (HSetIntegrity).
A WLanguage error occurs if the hIgnoreIntegrity and hCheckIntegrity constants are used at the same time.
AndroidAndroid Widget This constant is not available.
hFalsifyTimestampManagement of Timestamp items: By default, a Timestamp item contains the date and time the record was created/modified. This date/time is automatically calculated.
This constant prevents the Timestamp item from being updated: the last value in the record will be kept.
hForceIdAutoMode for calculating the automatic identifier: The automatic identifier is not calculated during the addition. The identifier corresponds to:
  • the value assigned to the item through programming (CUSTOMERID = 7 for example)
  • the default identifier value specified in the data model editor (if the data file was just opened, with no record read)
  • the identifier value found in memory (identifier value for the last record read in the data file).
Once the record is added, the next automatic identifier calculated by the HFSQL engine will be calculated while ignoring the value added by hForceIdAuto.
A WLanguage error occurs if the hSetIdAuto and hForceIdAuto constants are used at the same time.
hIgnoreDuplicatesManagement mode of duplicates: Does not check for duplicates for this action, even if the automatic duplicate check is enabled (HSetDuplicates).
A WLanguage error occurs if the hIgnoreDuplicates and hCheckDuplicates constants are used at the same time.
AndroidAndroid Widget This constant is not available.
hIgnoreIntegrityManagement mode of integrity: Ignores the integrity check for this add operation, even if the automatic integrity check is enabled (HSetIntegrity).
A WLanguage error occurs if the hIgnoreIntegrity and hCheckIntegrity constants are used at the same time.
AndroidAndroid Widget This constant is not available.
hLockNo
(default value)
Lock mode applied to the added record: No lock: the added record will not be locked.
AndroidAndroid Widget This constant is not available.
hLockReadWriteLock mode applied to the added record: Lock in read/write mode: the added record will be locked in read/write. This record cannot be read or modified by another application. Only the current application can modify it, read it or unlock it.

This constant is available for HFSQL Client/Server and Native Connectors only.
AndroidAndroid Widget This constant is not available.
hLockWriteLock mode applied to the added record: Lock in write mode: the added record will be locked in write mode. This record can be read by another application but it cannot be modified by another application. Only the current application can modify it or unlock it.

This constant is available for HFSQL Client/Server and Native Connectors only.
AndroidAndroid Widget This constant is not available.
hSetIdAutoMode for calculating the automatic identifier: The automatic identifier is not calculated during the addition: the identifier value will be the one stored during the addition.
The next identifier value calculated by the HFSQL engine will correspond to the greatest identifier value in the file +1.
A WLanguage error occurs if the hSetIdAuto and hForceIdAuto constants are used at the same time.
hWriteDefault
(default value)
Effect of addition on the browse: The addition does not affect the current browse.
For example, HReadNext used after HAdd positions on the record found after the current record before the addition.
The hAffectBrowse constant has priority over the hWriteDefault constant.
Remarks

Managing automatic identifiers

By default, the "automatic identifier" item is automatically updated when a record is added into a data file. There is no need to read the record again to find out the value of the automatic identifier. Simply use the following syntax: <File name>.<Name of automatic identifier item>.
The hForceIdAuto and hSetIdAuto constants are used to modify the default behavior of the automatic identifier.
For more details on automatic identifiers for new records, see Managing the automatic identifier during an addition.
AndroidAndroid Widget JavaPHPOLE DBNative Connectors (Native Accesses) Special case
  • If the database generates an automatic identifier, the HFSQL engine keeps this value. If the hForceIdAuto or hSetIdAuto constant is specified, the HFSQL engine replaces the generated value by the desired value.
    Remark: the hForceIdAuto constant is equivalent to hSetIdAuto: the automatic identifier calculated by the HFSQL engine during the next addition will be unique in the data file.
  • If no automatic identifier is generated by the database, the HFSQL engine generates the value and assigns it to the automatic identifier.
WINDEVWEBDEV - Server codeUniversal Windows 10 AppiPhone/iPadIOS WidgetJavaExternal languagePHPAjaxHFSQL ClassicHFSQL Client/ServerStored proceduresHyper File 5.5

Reusing the deleted or freed records

When adding a new record, the HFSQL engine optimizes the filling of the data file. The space corresponding to the deleted or freed records is used first when a new record is added.
The crossed records are not re-used.
WINDEVWEBDEV - Server codeUniversal Windows 10 AppiPhone/iPadIOS WidgetJavaExternal languagePHPAjaxHFSQL ClassicHFSQL Client/ServerStored proceduresHyper File 5.5

Version of data file after an addition

If the record was added to the data file (no duplicate error and no integrity error), the version number of the data file is modified. To get the version number, use HVersion.

Adding a record into a query

Adding a record into a query can be performed:
  • in the query result.
  • in the data files handled by the query (hModifyFile constant used in HExecuteQuery or HExecuteSQLQuery). In this case, the hWithFilter constant is automatically selected.
Regardless of the runtime mode of the query (with or without the hWithFilter constant), adding records into a query is allowed for the single-file queries only. The calculated items specified during the addition are ignored. They are automatically calculated.
Caution:
  • No addition is allowed in a query that uses groups or aggregates.
  • The management of integrity and duplicates is not performed during the operations on the multi-file queries: it is recommended to use transactions to avoid any problems.
WINDEVWEBDEV - Server codeUniversal Windows 10 AppiPhone/iPadIOS WidgetExternal languageAjaxHFSQL ClassicHFSQL Client/ServerStored procedures

Adding records into a view

You have the ability to add records into a view created on data files in HFSQL Classic format. These records are added in memory only. To add them into the data file linked to the view (simple view for example), you must use HViewToFile.

Browsing and adding records

You can configure the effect of adding a record during the browse of a data file (hWriteDefault and hAffectBrowse constants). The behavior of earlier versions can be kept with the hAffectBrowse constant.
JavaPHPOLE DBNative Connectors (Native Accesses) Special cases
If the record is added during a browse, it will be visible in the current browse only. If other browse operations have been defined on this database, the new record will only be visible once these browse operations have been reinitialized.

Slowness when adding or deleting a record for the first time in an HFSQL data file

Accessing a record in an HFSQL data file for the first time may take long. To fix this problem:
  • Disable the antivirus for .FIC,.NDX,.MMO and.REP files.
  • Disable the "Restore the system" option in Windows XP.
WINDEVWEBDEV - Server codeExternal languageAjaxStored proceduresHyper File 5.5

Addition into a database in Hyper File 5.5 format

If you use HAdd with a Hyper File 5.5 database:
  • The add options (<Options>) are ignored.
  • The TEXT items are automatically filled with space characters.
  • HAdd cannot be used on a view created from Hyper File 5.5 data files.
Business / UI classification: Business Logic
Component: wd300hf.dll
Minimum version required
  • Version 9
This page is also available for…
Comments
Exemplo de Transação Atômica
Exemplo básico:

Erro is Int = 0

Id is 8-byte Int = 0

TransactionStart(“tabela”, “tabelaitens”)

Tabela.campo = valor

If hadd(Tabela) = true
Id = tabela.Pai_ID
Info(“gravou pai ”)

TabelaItens.Pai_ID = ID
TabelaItens.Produto = valor

If hadd(tabelaItens) = true
Info(“gravou um item”)
Else
Erro++
End

Else

Erro++

End

If erro = 0
TransactionEnd()
Else
TransactionCancel()
End
Boller
23 Feb. 2023
Exemplo com Exception
HtransactionStart(Tablax,, tablay)
When Excepton in
Tablax.Campo = 1
If hadd()
End
HtransactionEnd()
DO
HtransactionCancel()
END
Boller
23 Feb. 2023
Exemplo
// Add a record in a data file
Customer.LastName = "Clark"
Customer.FirstName = "Vince"
Customer.Address = "Palm Lane"
Customer.City = "Philadelphia"
Customer.Zip = "19101"
Customer.Country = "USA"
IF HAdd(Customer) = true
info("Gravou")
else
info(Errorinfo(),Herrorinfo())
end

AGORA SE QUER ECONOMIZAR LINHAS DE CODIGO FAÇA ASSIM:

// in the Customer data file
ScreenToFile()
IF HAdd(Customer) = true
info("Gravou")
else
info(Errorinfo(),Herrorinfo())
end
Boller
18 Jan. 2023

Last update: 09/07/2023

Send a report | Local help