Histórico da Página
Descrição:
Classe de bulkinsert via insertInto. Os dados são recebidos pela aplicação, que sabe o momento certo de disparar o insert no banco.que realiza a inserção de diversos registros no banco de dados em bloco. Desta forma, ao invés de ser enviada uma instrução de insert para cada linha inserida é enviado um único comando de insert para a quantidade de registros definidos no buffer.
Dica | ||
---|---|---|
| ||
A utilização da classe FWBulk comparada com um processo que envolva diversos inserts no banco chega a ser de 30% a 40% mais performática. |
Informações | ||
---|---|---|
| ||
Para a sua utilização é necessário possuir DBAccess com versão maior ou igual a 20181212 e versão de lib maior ou igual a 20201009. |
...
Métodos:
...
New()
Sintaxe:
FwBulk():New()
...
lCanUse lógico, se verdadeiro, o bulk está disponível para uso.
Obs.: Este método não depende da classe FWBulk ser inicializada por New, por este motivo, deve-se utilizar FWBulk():CanBulk()
...
Exemplo:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
User Function myBulk() Local oBulk as object Local aStruct as array Local nX as numeric Local lCanUseBulk as logical aStruct := {} aAdd( aStruct, { 'FIELD1', 'C', 10, 0 } ) aAdd( aStruct, { 'FIELD2', 'N', 10, 2 } ) aAdd( aStruct, { 'FIELD3', 'M', 10, 0 } ) aAdd( aStruct, { 'FIELD4', 'D', 8, 0 } ) aAdd( aStruct, { 'FIELD5', 'L', 1, 0 } ) FWDBCreate( 'BULKTBL', aStruct , 'TOPCONN' , .T.) oBulk := FwBulk():New('BULKTBL') lCanUseBulk := FwBulk():CanBulk() // Este método não depende da classe FWBulk ser inicializada por NEW if lCanUseBulk oBulk:SetFields(aStruct) endif For nX := 1 to 5 if lCanUseBulk oBulk:AddData({cValToChar(nX),(nX,nX),cValToChar(nX),Date(),mod(nX,2)==0}) else RecLock("BULKTBL",.T.) BULKTBL->FIELD1 := cValToChar(nX) BULKTBL->FIELD2 Next := (nX,nX) BULKTBL->FIELD3 oBulk :Close= cValToChar(nX) BULKTBL->FIELD4 oBulk :Destroy= Date() BULKTBL->FIELD5 := mod(nX,2)==0 MsUnLock() endif Next if lCanUseBulk oBulk:Close() oBulk:Destroy() oBulk := nil endif Return |