Skip to content

Execute Operations ​

This document details the data modification operations of the cDataBase class, including INSERT, UPDATE, DELETE, etc.


Table of Contents ​


Exec Method ​

Basic Syntax ​

The Exec method executes non-query SQL statements like INSERT, UPDATE, DELETE.

Syntax ​

vb
Function Exec(Optional RecordsAffected, Optional Options As Long = -1) As Boolean

Parameters ​

ParameterTypeDescription
RecordsAffectedVariantReturns number of affected rows (optional)
OptionsLongExecution options (optional, default -1)

Return Value ​

  • True - Execution successful
  • False - Execution failed (view error via LastErr)

Example ​

vb
' Execute INSERT statement
If db.Sql("INSERT INTO users (name, age) VALUES ('John', 25)").Exec Then
    Debug.Print "Insert successful"
Else
    Debug.Print "Insert failed: " & db.LastErr
End If

INSERT Operations ​

Basic Insert ​

vb
' Insert single record
If db.Sql("INSERT INTO users (name, age, email) VALUES ('John', 25, 'john@example.com')").Exec Then
    Debug.Print "Insert successful"
End If

Insert Multiple Records ​

vb
' Insert multiple using VALUES clause
Dim sSql As String
sSql = "INSERT INTO users (name, age) VALUES " & _
       "('John', 25), " & _
       "('Mary', 30), " & _
       "('Bob', 28)"
If db.Sql(sSql).Exec Then
    Debug.Print "Batch insert successful"
End If

Using Parameterized Insert ​

vb
' Use parameterized query (recommended, prevents SQL injection)
If db.Sql("INSERT INTO users (name, age, email) VALUES (?, ?, ?)") _
    .Param("name", "John", VBMAN.adVarWChar) _
    .Param("age", 25, VBMAN.adInteger) _
    .Param("email", "john@example.com", VBMAN.adVarWChar) _
    .ExecParam Then

    Debug.Print "Insert successful, ID: " & db.LastInsertId
End If

INSERT SELECT ​

vb
' Insert data from other table
If db.Sql("INSERT INTO users_backup SELECT * FROM users WHERE age > 30").Exec Then
    Debug.Print "Data copy successful"
End If

UPDATE Operations ​

Basic Update ​

vb
' Update single record
If db.Sql("UPDATE users SET age = 26 WHERE id = 1").Exec Then
    Debug.Print "Update successful"
End If

Update Multiple Records ​

vb
' Batch update
If db.Sql("UPDATE users SET status = 'active' WHERE age > 18").Exec Then
    Debug.Print "Batch update successful"
End If

Using Parameterized Update ​

vb
' Use parameterized query
If db.Sql("UPDATE users SET age = ?, email = ? WHERE id = ?") _
    .Param("age", 26, VBMAN.adInteger) _
    .Param("email", "newemail@example.com", VBMAN.adVarWChar) _
    .Param("id", 1, VBMAN.adInteger) _
    .ExecParam Then

    Debug.Print "Update successful"
End If

Conditional Update ​

vb
' Complex conditional update
Dim sSql As String
sSql = "UPDATE users SET status = 'inactive' " & _
       "WHERE last_login < DATEADD(day, -30, GETDATE())"
If db.Sql(sSql).Exec Then
    Debug.Print "Expired users marked"
End If

DELETE Operations ​

Basic Delete ​

vb
' Delete single record
If db.Sql("DELETE FROM users WHERE id = 1").Exec Then
    Debug.Print "Delete successful"
End If

Batch Delete ​

vb
' Delete multiple records
If db.Sql("DELETE FROM users WHERE age < 18").Exec Then
    Debug.Print "Batch delete successful"
End If

Using Parameterized Delete ​

vb
' Use parameterized query
If db.Sql("DELETE FROM users WHERE id = ?") _
    .Param("id", 1, VBMAN.adInteger) _
    .ExecParam Then

    Debug.Print "Delete successful"
End If

Truncate Table ​

vb
' Clear table (note: deletes all data)
If db.Sql("DELETE FROM users").Exec Then
    Debug.Print "Table cleared"
End If

' Or use TRUNCATE (faster, but cannot be rolled back)
If db.Sql("TRUNCATE TABLE users").Exec Then
    Debug.Print "Table cleared"
End If

Get Affected Rows ​

RecordsAffected Parameter ​

vb
' Get number of affected rows
Dim lAffected As Long
If db.Sql("UPDATE users SET status = 'active' WHERE age > 18").Exec(lAffected) Then
    Debug.Print "Updated " & lAffected & " records"
End If

Examples ​

vb
' INSERT operation
Dim lAffected As Long
If db.Sql("INSERT INTO users (name) VALUES ('John')").Exec(lAffected) Then
    Debug.Print "Inserted " & lAffected & " records"
End If

' UPDATE operation
If db.Sql("UPDATE users SET status = 'active'").Exec(lAffected) Then
    Debug.Print "Updated " & lAffected & " records"
End If

' DELETE operation
If db.Sql("DELETE FROM users WHERE age < 18").Exec(lAffected) Then
    Debug.Print "Deleted " & lAffected & " records"
End If

Get Last Insert ID ​

LastInsertId Method ​

The LastInsertId method gets the auto-increment primary key ID of the last insert.

Syntax ​

vb
Function LastInsertId() As Variant

Supported Databases ​

  • SQL Server - Uses SCOPE_IDENTITY()
  • MySQL - Uses LAST_INSERT_ID()
  • Access - Uses @@IDENTITY

Example ​

vb
' Insert data
If db.Sql("INSERT INTO users (name, age) VALUES ('John', 25)").Exec Then
    ' Get last inserted ID
    Dim lId As Variant
    lId = db.LastInsertId
    Debug.Print "New user ID: " & lId
End If

Notes ​

  1. Must call immediately after INSERT

    vb
    ' Correct
    db.Sql("INSERT INTO users (name) VALUES ('John')").Exec
    Dim lId As Variant
    lId = db.LastInsertId
    
    ' Wrong: Other operations in between
    db.Sql("INSERT INTO users (name) VALUES ('John')").Exec
    db.Sql("SELECT * FROM users").Query  ' This resets the ID
    Dim lId As Variant
    lId = db.LastInsertId  ' May not get the correct ID
  2. Only supports auto-increment primary key

    vb
    ' Table must have auto-increment primary key
    CREATE TABLE users (
        id INT IDENTITY(1,1) PRIMARY KEY,  -- SQL Server
        name NVARCHAR(50)
    )

Batch Operations ​

BatchInsert Method ​

The BatchInsert method inserts data in batches using transactions to ensure data consistency.

Syntax ​

vb
Function BatchInsert(ByVal TableName As String, ByVal Data As Collection) As Boolean

Parameters ​

ParameterTypeDescription
TableNameStringTable name (required)
DataCollectionData collection, each element is Dictionary (required)

Example ​

vb
' Prepare data
Dim colData As New Collection
Dim dictRow As Dictionary

' First row
Set dictRow = New Dictionary
dictRow.Add "name", "John"
dictRow.Add "age", 25
dictRow.Add "email", "john@example.com"
colData.Add dictRow

' Second row
Set dictRow = New Dictionary
dictRow.Add "name", "Mary"
dictRow.Add "age", 30
dictRow.Add "email", "mary@example.com"
colData.Add dictRow

' Batch insert
If db.BatchInsert("users", colData) Then
    Debug.Print "Batch insert successful"
Else
    Debug.Print "Batch insert failed: " & db.LastErr
End If

Batch Update ​

vb
' Use transaction for batch update
db.TransBegin

Dim i As Long
For i = 1 To 100
    Dim sSql As String
    sSql = "UPDATE users SET status = 'active' WHERE id = " & i
    If Not db.Sql(sSql).Exec Then
        db.TransRollback
        Exit For
    End If
Next

If db.TransCommit Then
    Debug.Print "Batch update successful"
End If

Asynchronous Execution ​

Async Property ​

Use the Async property to execute SQL statements asynchronously.

vb
' Asynchronous execution
db.Sql("INSERT INTO users (name) VALUES ('John')").Async.Exec

' Listen for completion event
Private Sub db_AsyncExecuteComplete(ByVal RecordsAffected As Long, _
                                    ByVal pError As ADODB.Error, _
                                    adStatus As ADODB.EventStatusEnum, _
                                    ByVal pCommand As ADODB.Command, _
                                    ByVal pRecordset As ADODB.Recordset, _
                                    ByVal pConnection As ADODB.Connection)
    If pError Is Nothing Then
        Debug.Print "Async execution successful, rows affected: " & RecordsAffected
    Else
        Debug.Print "Async execution failed: " & pError.Description
    End If
End Sub

Error Handling ​

vb
' Execution error handling
If Not db.Sql("INSERT INTO users (name) VALUES ('John')").Exec Then
    Debug.Print "Execution failed"
    Debug.Print "Error code: " & db.LastErrNumber
    Debug.Print "Error description: " & db.LastErrDescription
    Debug.Print "Full info: " & db.LastErr
    Exit Sub
End If

Best Practices ​

1. Use Parameterized Queries ​

vb
' Recommended: Use parameterized queries
db.Sql("INSERT INTO users (name, age) VALUES (?, ?)") _
    .Param("name", txtName.Text, VBMAN.adVarWChar) _
    .Param("age", CLng(txtAge.Text), VBMAN.adInteger) _
    .ExecParam

' Not recommended: Direct SQL concatenation (vulnerable to SQL injection)
db.Sql("INSERT INTO users (name, age) VALUES ('" & txtName.Text & "', " & txtAge.Text & ")").Exec

2. Use Transactions for Consistency ​

vb
' Recommended: Use transactions
db.TransBegin
db.Sql("INSERT INTO users (name) VALUES ('John')").Exec
db.Sql("INSERT INTO posts (user_id, title) VALUES (1, 'Title')").Exec
If Not db.TransCommit Then
    Debug.Print "Transaction failed, rolled back"
End If

3. Check Return Values ​

vb
' Recommended: Always check return values
If db.Sql("INSERT INTO users (name) VALUES ('John')").Exec Then
    ' Success handling
Else
    ' Error handling
End If

4. Get Affected Rows ​

vb
' Recommended: Check affected rows
Dim lAffected As Long
If db.Sql("UPDATE users SET status = 'active'").Exec(lAffected) Then
    If lAffected > 0 Then
        Debug.Print "Updated " & lAffected & " records"
    Else
        Debug.Print "No records were updated"
    End If
End If

Last Updated: 2026-01-21

VB6 and LOGO copyright of Microsoft Corporation