Microsoft Access VBA Tutorials, Class Modules, SQL Techniques, and AI Integration Guides.

Streamlining Form Module Code in Standalone Class Module Tutorials

Create Reusable, Structured Form Module VBA Code with a Standalone Class Module.

Eliminate repetitive, unorganized form module code and accelerate Microsoft Access application development.

Note: Each article includes a downloadable demo database for self-paced learning and hands-on exploration of the concepts explained. 

  1. Reusing Form Module VBA Code for New Projects.

  2. The Existing Form Module Coding Approach.

    Access forms include a wide range of controls—such as text boxes, command buttons, and combo boxes—each designed for specific tasks. Typically, we write event procedures within the form’s class module to handle these tasks.

    However, challenges often arise when a single control, such as a text box, requires multiple event subroutines. The related code becomes scattered across different event procedures, intermingled with code for other controls within the same form module.

    This lack of structure can make the development process cumbersome. Developers frequently switch between form design view (to adjust the user interface or event properties) and the form’s class module (to locate or refine event code). Over time, this repeated navigation slows down workflow and makes maintaining event code more difficult. Continue...

  3. Defining Custom Events in Microsoft Access - Part Two

  4. When designing a Microsoft Access form, we typically add controls such as Text Boxes, Command Buttons, and Combo Boxes. Each control provides a set of built-in events that are triggered in response to specific user actions or system-generated operations. These events are handled by their associated event procedures, where we write VBA code to perform the required tasks.

    Traditionally, we have built forms by adding controls, relying on their built-in events, and writing VBA code to respond to them—often without considering how the underlying event mechanism works. Continue...

  5. Objects and Their Built-in Events - Part 3.

  6. The primary objective is to move VBA code from the Form Module to a standalone Class Module, reserving the Form exclusively for user interface design. Is this feasible? Absolutely. The following pages will demonstrate how this can be achieved. Once this coding approach is implemented, significant portions of the code can be reused across new projects, simplifying development and reducing coding effort.

    With this coding methodology, Code Modules can be opened and edited independently, eliminating the need to repeatedly switch to Form Design View simply to access the code. This saves considerable manual effort and improves development efficiency, resulting in faster project completion. The proposed solution will continue to work seamlessly with the controls on the Form, preserving the standard behavior from the end user's perspective. In addition, the underlying framework of this approach can be exported and incorporated into other projects, making code reuse and maintenance significantly easier. Continue ...

  7. Standalone Class Module and Events - Part Four

  8. The Quantity TextBox object's events are enabled by selecting the [Event Procedure] option in the control's Event Property settings. When an event is raised (fired) by the TextBox object instance, it is captured by the Form's Class Module, where the corresponding event procedure is executed. This process is illustrated in the graphical image below.

    The events raised (fired) by the Quantity TextBox on the Form can also be captured in the standalone `Class1` Class Module. To achieve this, an instance of the TextBox object must be declared in `Class1` and qualified with the `WithEvents` keyword. A reference to the Quantity TextBox control on the Form is then assigned to this object variable in the `Class1` Class Module. Continue ...

  9. Several TextBoxes and Event Capturing - Part Five

  10. Next, let us examine how to handle events for multiple TextBox controls on a Form. For this exercise, we will place three TextBox controls on the Form and use them to explore event handling through a standalone Class Module.

    In practical applications, a Form may contain 10, 20, or even more TextBox controls. While it is unlikely that every control will require event procedures, this approach can be extended to handle as many controls as necessary when the application design demands it. Continue ...

  11.  Class Objects and Wrapper Classes - Part Six

  12. After experimenting with the previous examples, you should now have a clear understanding of how the Events Subroutines of TextBox objects work on a Form and how they can be relocated into a standalone Class Module to run the Event Procedures for specific tasks on the Form. 

    In our earlier experiments, we worked mostly with a single TextBox to understand the fundamentals. The only exception was in Part Five, where we extended the idea to three TextBoxes to demonstrate how to enable events and capture the fired events within a standalone Class Module. It is important to note that all of these actions were carried out entirely in the standalone Class Module, rather than in the Form module. Continue ...

  13. Form Module vs. Reusable Class Module Coding Demo - Part Seven

  14. Some readers may still be in doubt about the effectiveness of these new Event-Procedure coding methods. This page demonstrates the traditional Form Module coding alongside the streamlined standalone Class Module Coding advantage. The demo is divided into three parts, ranging from standard coding to advanced automation, which helps determine which approach works best.

    1. The Normal Coding method.

    2. The Stand-alone Class Module supported method.
    3. Two Stand-alone Class Modules supported the option.

    On January 3, 2024, I presented a concise overview of the intricate topic: Streamlining Form Module Code in Standalone Class Module for the Access User Groups (Europe) Chapter Live, moderated by Mr. Colin Riddington & Mr. Alessandro Grimaldi, with the Demo Database attached to this Article. 

    https://youtu.be/AjvjN3h1ipY

    You can view the Live Presentation supported by PowerPoint Slides in a YouTube Video by clicking the above Link. 

    The YouTube subtitles are available in eleven languages. Continue...

  15. Collection Object replaces Class Object Array - Part Eight

  16. In the past, we used the TextBox Wrapper Class Array to store TextBox instances with Events enabled, allowing us to capture them in memory and execute their associated Event Subroutines. While this Array-based method worked, it required frequent re-dimensioning and the maintenance of separate indices for different object types, such as Command Buttons, ComboBoxes, and List Boxes. Fortunately, there is a more efficient solution—the Collection Object. Continue ...

  17. Reusability of Streamlined VBA Code - Part Nine

  18. The OnDirty Event Subroutine.

    Private Sub txt_Dirty(Cancel As Integer)
        If MsgBox("Editing the " & UCase(Txt.Name) _
        & ": Value? " & Txt.Value, vbYesNo + vbQuestion, _
        Txt.Name & " DIRTY()") = vbNo Then
        
            Cancel = True
        End If
    End Sub
    

    The code snippet above monitors all TextBoxes on the Main Form Employees and Orders subform to prevent unintended changes. When the user attempts to modify any data field, a warning message appears, requiring confirmation before the edit can proceed. If the user recognizes the action as a mistake, he/she can cancel the event and restore the field to its original value. 

    This approach helps prevent accidental modifications and maintains data integrity.

    If you have 15 TextBoxes in the Form, the traditional coding needs to repeat the above 5 lines of code in fifteen different Subroutines in the Form's Class Module, instead of one time in the Standalone Class Module. Continue...

  19. Organizing Wrapper Classes for Different Forms - Part Ten

  20. Wrapper Class Templates

    Create a standard set of wrapper class templates for all frequently used controls, such as TextBoxes, CommandButtons, ComboBoxes, and others. When implementing these templates for a specific form, create copies of the required classes and rename them using a short, meaningful prefix that identifies the form. For example, for the Employees form, the prefix `Emp` can be used, resulting in class names such as `EmpTextBox`, `EmpCmdButton`, and `EmpComboBox`.

    This naming convention clearly associates each wrapper class with its corresponding form, making the code easier to identify, maintain, and manage while promoting consistency throughout the project.

    After reviewing the previous nine articles on streamlining form module VBA code, you should now be familiar with this new coding approach and understand how to create a new wrapper class whenever a required template is not already available—such as when a new control Type is added to the form. Continue ...

  21. ComboBox and Option-Group Wrapper Classes - Part Eleven

  22. Wrapper Class Design.

    In this episode of the Streamlining Form Module VBA Code series, we will create Wrapper classes for ComboBox and OptionGroup controls. Having worked through the previous episodes, you are now familiar with the process of creating Wrapper Class Modules for other controls, including TextBox, ListBox, CommandButton, and TabControl. You have also learned how to implement event procedures within these Wrapper Class Modules instead of placing them directly in the Form Module. 

    ComboBox and OptionGroup Control.

    In this session, we will focus on the usage of ComboBox and OptionGroup controls, as illustrated in the form image below.

    The Order Detail data displayed in the ListBox is filtered through the query OrderDetailQ1, which is based on the Employee ID selected in the ComboBox control named cboEmp, located above the ListBox. The SQL statement for this query is shown below: Continue ...

  23. Report Module Code in Class Module - Part Twelve

  24. Report Module VBA Code in Standalone Class Module.

    In the earlier episodes of this series, Streamlining Form Module Code in the Standalone Class Module, we explored how to handle Event Subroutines for frequently used Access controls within a standalone Class Module. This approach allows for managing event handling in Standalone Class Module(s),  without interfering with the Form design task, resulting in cleaner, more maintainable code.

    If you’re new to handling Form/Report Module Event Procedures in standalone Class Modules, I suggest starting with the earlier episodes in this series. These articles provide the necessary background and step-by-step explanations to help you understand and apply this approach effectively. Links to all previous articles in the series are provided at the end of this page. Continue ...

  25. Hiding Report Lines Conditionally - Part 13.

  26. To visually emphasize specific Report line records that do not meet the required marks criteria, a red ellipse is drawn around the corresponding TextBox. Traditionally, this procedure is implemented directly in the Detail_Print Event Subroutine within the Report’s Class Module. The Report Detail Format, Report_Page Events.

    The Report Detail Section Format Event runs before the Print Event. During this phase, the Report Detail Format Event arranges the data records line by line within the Detail section.

    Other events, such as the Report Header, Report Footer, Page Header, Page Footer, and Report Page Events, also occur during the formatting phase. When these Section events are enabled, code can be written within them to control or manipulate the layout and the report's preview or print. Continue ...

  27. Form Report Detail Sections Event Handling - Part 14.

  28. All other Frequently Used Controls on a Form.

    We have learned how to capture events fired by Form or Report controls and handle them through Event Subroutines in their respective Wrapper Classes. The TextBox and other objects' Wrapper Classes are enabled with the actual references of the controls on the Form, allowing us to interact with them seamlessly. Beyond event handling, any other control on the Form can also be accessed from any Wrapper Class to read or update its values. This flexibility opens the door to creative features such as running animations, simulating a digital clock on the Form, implementing a countdown timer before the Form is closed, and much more. 

    For such activities, every Wrapper Class includes a Form object instance, to which the active Form’s reference is assigned. This allows the Wrapper Classes to interact directly with the Form. When you need to handle events such as the Form_Timer() Event or the MouseMove Event on the Form’s Detail Section, the Form instance must be declared with the WithEvents keyword (Private WithEvents frm as Form) inside the Wrapper Class. Since the Form instance is always included in a Wrapper Class, any of the above-mentioned features can be coded within the Intermediary Class Module or in any control’s Wrapper Class. However, if the Form-level events are not used, the form object declaration can be like: Private frm as Form.

    The Form Detail Section declaration,

    Private frm as Access.Form
    Private WithEvents SecDetail As Access.Section
    
    Set SecDetail = frm.Section(acDetail)
    	SecDetail.OnMouseMove = "[Event Procedure]"
    
    

    Report Detail Section Declaration.

    Private WithEvents Rpt as Access.Report
    Private WithEvents RptSec as Access.[_SectionInReport]
    
    Set RptSec = Rpt.Section(acDetail)
    
    

    Continue ...


    Advanced Event Handling Examples in the following Articles.

  29. New Custom-Made Form Wizard VBA - Part 15.
  30. New Custom-Made Report Wizard - Part 16.
  31. Streamlining VBA External Files List in Hyperlinks-17
  32. Streamlining Event Procedures 3D-Text Wizard-18
  33. Streamlining Form Module VBA RGBColor Wizard-19
  34. Form VBA Structured Coding Numbers to Words Converter-20
  35. Form VBA Structured Coding Access Users-Group Europe Presentation-21
  36. The Event Firing Mechanism in Access Objects-22
  37. One TextBox and Three Wrapper Class Instances-23
  38. Streamlining Code Synchronized Floating Popup Form-24
  39. Streamlining Code Compacting/Repair Database-25
  40. Streamlining Code Remainder Popup Form-26
  41. Streamlining Code Editing Data in Zoom-in Control-27
  42. Streamlining Code Filter By Character and Sort-28
  43. Table Query Records in Collection Object-29
  44. Class for All Data Entry Editing Forms-30
  45. Wrapper Class Module Creation Wizard-31
  46. wrapper-class-template-wizard-v2
Share:

Complete Guide to Microsoft Access AI Integration

Complete Guide to Microsoft Access AI Integration.

Complete Guide to Microsoft Access AI Integration. Contents: Installing Ollama, Installing Qwen model, Connecting VBA to AI, Building JSON Request, Prompt Engineering, SQL Generation, VBA Generation, Debugging AI Output, Explain SQL, Explain VBA Code.

Contents: 

  1. Installing Ollama
  2. Installing Qwen model
  3. Connecting VBA to AI
  4. Building JSON Request
  5. Prompt Engineering
  6. SQL Generation
  7. VBA Generation
  8. Debugging AI Output
  9. Explain SQL
  10. Explain VBA Code

Share:

Understanding JSON, Temperature and Max Tokens in AI Integration (Part 3)

Understanding JSON, Temperature, and Max Tokens in Microsoft Access AI Integration (Part 3)

This tutorial explains how Microsoft Access developers can use JSON requests, temperature settings, max_tokens, and prompt engineering techniques when integrating local AI models such as Ollama and qwen2.5-Coder with VBA applications.

How JSON Works in Microsoft Access AI Integration.

When working with AI models through APIs—such as those provided by Ollama—data is exchanged using a structured format known as JSON. JSON (JavaScript Object Notation) is a lightweight, text-based format used to represent data as key-value pairs. It is widely adopted because it is both human-readable and easy for machines to parse efficiently. In the context of Microsoft Access and VBA, JSON serves as the communication bridge between your application and the AI engine, transmitting prompts to the model and returning generated responses in a consistent and predictable structure.

Earlier Post Links:

  1. How to Integrate AI into Microsoft Access VBA Using Ollama (Part 1)
  2. Generate Microsoft Access SQL and VBA with Local AI Models (Part 2)

Understanding JSON structure is essential for successfully integrating AI into your Microsoft Access applications. A typical JSON request includes elements such as the model name, prompt text, and optional parameters, all enclosed within curly braces and properly formatted using quotation marks. Similarly, the AI model returns its response in JSON format, which requires careful parsing to extract the relevant output. Even minor formatting issues—such as improperly escaped double quotation marks—can result in errors. Therefore, developing a solid understanding of JSON syntax and structure is a fundamental step toward building reliable AI-assisted VBA solutions.

A visual JSON structure diagram

Understanding JSON Structure (VBA - AI Request & Response)

When your Microsoft Access application communicates with a local AI model (via Ollama), it sends and receives data in JSON format.

This section shows exactly what goes out and what comes back.

1. JSON Request (Sent from VBA to AI)

{
  "model": "qwen2.5-coder:3b",
  "prompt": "Write a SQL query to list the top 5 customers",
  "stream": false
}

Explanation.

  • model - AI model name installed locally
  • prompt - Your instruction (SQL / VBA / etc.)
  • stream - false = return full response at once

2. Same JSON Built in VBA

JSON = "{""model"":""qwen2.5-coder:3b"",""prompt"":""" & safePrompt & """,""stream"": false}"

Visual Mapping

VBA String                     - JSON Output
---------------------------------------------------------
""model""                      - "model"
""prompt""                     - "prompt"
""stream""                     - "stream"
""""                           - "

3. JSON Response (Returned by AI)

{

  "model": "qwen2.5-coder:3b",

  "created_at": "2026-04-19T10:00:00Z",

  "response": "SELECT TOP 5 CustomerID, Name FROM Customers ORDER BY Sales DESC;",

  "done": true

}

4. What You Actually Need

"response"

This contains the generated SQL or VBA code.

5. Visual Flow Diagram

[Microsoft Access VBA]
        |
   Build JSON String
        |
Send via HTTP (POST)
        |
[Ollama Local API]
        |
   AI Model Processes Prompt
        |
 Returns JSON Response
        |
Extract "response" Field
        |
 Use in Access (SQL / VBA)
 

Common JSON Issue (Very Important)

"prompt": "He said "Hello""

'Invalid JSON (quotes not escaped)

Correct Version

"prompt": "He said \"Hello\""

Practical Tip for Developers

Always ensure:

  • Double quotes inside prompts are escaped (\") 
  • The JSON structure is properly formed
  • VBA strings are correctly constructed

Important Points

JSON is the communication bridge between VBA and AI.

If the JSON is incorrect, the AI request will fail—no matter how good your prompt is.

VBA JSON Builder Module (Ready to Use)

  • Handles escaping (", \, line breaks)
  • Clean and reusable
  • Designed for AI prompt calls
  • 1. JSON Escape Function (Core)

    Public Function JsonEscape(ByVal text As String) As String
    
        ' Escapes special characters for JSON
    
        text = Replace(text, "\", "\\")        ' Backslash
    
        text = Replace(text, """", "\""")     ' Double quote
    
        text = Replace(text, vbCrLf, "\n")     ' Line break (Windows)
    
        text = Replace(text, vbCr, "\r")
    
        text = Replace(text, vbLf, "\n")
    
    
        JsonEscape = text
    
    End Function
    
    

    2. Build AI Request JSON

    Public Function BuildAIJson(ByVal prompt As String, _
    
                               Optional ByVal model As String = "qwen2.5-coder:3b", _
    
                               Optional ByVal stream As Boolean = False) As String
    
        
    
        Dim json As String
        
    
        json = "{"
    
        json = json & """model"":""" & model & ""","
    
        json = json & """prompt"":""" & JsonEscape(prompt) & ""","
    
        json = json & """stream"":" & LCase(stream)
    
        json = json & "}"
        
    
        BuildAIJson = json
    
    
    End Function
    
    

    3. HTTP Call Function (Using the Builder)

    Public Function AskLocalAI(prompt As String) As String
    
        Dim http As Object
    
        Dim json As String
    Set http = CreateObject("MSXML2.XMLHTTP") json = BuildAIJson(prompt) http.Open "POST", "http://localhost:11434/api/generate", False http.setRequestHeader "Content-Type", "application/json" http.Send json AskLocalAI = http.responseText End Function

    4. Extract Only AI Response (Clean Output)

    Public Function ExtractAIResponse(ByVal json As String) As String    
    
        Dim startPos As Long
    
        Dim endPos As Long 
        
    
        startPos = InStr(json, """response"":""")
    
        If startPos = 0 Then Exit Function
    
        startPos = startPos + 12
    
        endPos = InStr(startPos, json, """,""done""")
    ExtractAIResponse = Mid(json, startPos, endPos - startPos) End Function

    5. Example Usage

    Sub TestAI()
    
        Dim raw As String
    
        Dim result As String
    
        raw = AskLocalAI("Write a Microsoft Access SQL query to list top 5 customers")
    
        result = ExtractAIResponse(raw)
    
        MsgBox result
    
    End Sub
    
    

    Important Notes

    1. Always use JsonEscape() for dynamic text
    2. Avoid manually concatenating quotes
    3. This works reliably for:

      • SQL generation
      • VBA code generation
      • Structured prompts

    Optional Enhancement

    • temperature
    • max_tokens
    • system prompt

      Example:

      "temperature": 0.2
      
      

    1. Temperature Option

    Think of Temperature as a randomness dial:

    Low temperature (e.g., 0.1 – 0.3)

    • More deterministic, consistent, and precise
    • Best for SQL, VBA, structured output

    Medium (0.4 – 0.7)

    • Balanced between accuracy and variation
    • Good for explanations or mixed tasks

    High (0.8 – 1.0+)

    • More creative, but less predictable
    • May introduce errors in code

    Simple Analogy

    Low temperature - Like a careful accountant

    High temperature - Like a creative writer

    Temperature: 0.2 is Ideal for Microsoft Access development tasks such as:

    • Writing SQL queries
    • Generating VBA procedures
    • Producing structured outputs

    You want accuracy, not creativity, so:

    'JSON
    
    "temperature": 0.2
    
    

    Produces: Cleaner syntax, Less unnecessary text, More repeatable results

    Example Comparison

    Prompt:

    'Plain Text
    
    "Write a SQL query to get top 5 customers by sales"
    
    

    Understanding Temperature Parameter

    Option: Temperature: 0.2

    'SQL
    
    SELECT TOP 5 CustomerID, SUM(SalesAmount) AS TotalSales
    FROM Orders
    GROUP BY CustomerID
    ORDER BY TotalSales DESC;
    
    

    Clean and Precise

    Option: Temperature: 0.9

    'SQL
    
    Here is one possible query you could try:
    
    SELECT CustomerID, SUM(SalesAmount) AS TotalSales
    FROM Orders
    GROUP BY CustomerID
    ORDER BY TotalSales DESC
    LIMIT 5;
    
    

    Issues:

    Uses LIMIT (not valid in Access), adds extra text

    How to Add It in Your VBA JSON

    Just include it in your builder:

    'vba
    
    json = json & """temperature"":0.2,"
    
    'Full Example:
    
    'JSON
    {
      "model": "qwen2.5-coder:3b",
      "prompt": "...",
      "temperature": 0.2,
      "stream": false
    }
    
    
    Temperature Settings
    Task Type Recommended Temperature
    SQL Queries 0.1 - 0.3
    VBA Code 0.2 - 0.4
    Explanation 0.5 - 0.7
    Creative Writing 0.8+

    In Short:

    • Lower temperature = more reliable code
    • Higher temperature = more creative but risky output

    Understanding Max Tokens.

    2. The max_tokens Parameter

    — Controlling Response Length.

    What does it?

    max_tokens limits the length of the AI’s response.

    A token is roughly:

    • 1 word = 1–1.5 tokens
    • 1 line of code = a few tokens

    Why it matters in Access/VBA work

    Without a limit, the AI may:

    • Add explanations
    • Generate overly long code
    • Include unnecessary comments

    With max_tokens, you keep output concise and predictable

    Example

    Prompt:

    "Write a VBA function to open a recordset"
    
    

    With max_tokens: 120

    'Output:
    
    Function OpenRS()
    
        Dim rs As DAO.Recordset
    
        Set rs = CurrentDb.OpenRecordset("Customers")
    
    End Function
    
    

    With max_tokens: 300

    Output may include:

    • Explanation
    • Comments
    • Extra variations
    max_tokens
    Task Type Recommended Values
    SQL Queries 50 - 120
    Small VBA Function 100 - 250
    Complex Procedure 300 - 600

    Rule of Thumb

    Use the smallest value that still completes the task.

    3. System Prompt Parameter

    Prompt — Controlling Behavior 

    The “system” parameter plays a decisive role in shaping how the AI interprets and responds to a prompt. When you include an instruction such as “You are a Microsoft Access VBA Expert”, you are not merely adding context—you are establishing a behavioral framework for the model. This system-level instruction influences the tone, depth, and technical accuracy of the response by biasing the model toward domain-specific knowledge, coding conventions, and best practices relevant to Access and VBA. As a result, when the actual user prompt follows (e.g., “Create a function to loop through a DAO Recordset”), the AI is far more likely to produce structured, idiomatic, and efficient VBA code rather than a generic or loosely adapted solution.

    In practical terms, the system prompt acts as a persistent guiding instruction that remains in effect throughout the interaction, ensuring consistency across responses. It can also enforce output constraints such as: 

     “return only VBA code”, 

     “avoid explanations”, 

     “include error handling”, 

     which is particularly valuable when integrating AI into automated workflows within Access.

    Without a well-defined system prompt, responses may vary in format, include unnecessary explanations, or drift away from the intended technical focus. Therefore, carefully designing the System parameter is essential for achieving reliable, predictable, and production-quality outputs when using AI for tasks like VBA function generation.

    What does it do?

    The system prompt defines the AI’s role and behavior.

    Think of it as:

    “Instructions that guide how the AI should respond—every time.”

    Why is it powerful?

    Instead of repeating instructions in every prompt, you define:

    • Tone (professional, concise)
    • Output format (code only, no explanation)
    • Context (Microsoft Access expert)

    Example

    Without system prompt:

    Write a SQL query for the top 5 customers
    
    

    Output may include explanations

    With system prompt:

    You are a Microsoft Access expert.
    
    Return only valid Access SQL.
    
    Do not include explanations.
    
    

    Output becomes:

    SELECT TOP 5 CustomerID, SUM(Amount) AS Total
    
    FROM Orders
    
    GROUP BY CustomerID
    
    ORDER BY Total DESC;
    
    

    How to Use it in JSON

    {
    
      "model": "qwen2.5-coder:3b",
    
      "system": "You are a Microsoft Access expert. Return only SQL or VBA code without explanation.",
    
      "prompt": "Write a SQL query to get the top 5 customers",
    
      "temperature": 0.2,
    
      "max_tokens": 150,
    
      "stream": false
    
    }
    

    Adding to Your VBA JSON Builder

    json = "{"
    
    json = json & """model"":""qwen2.5-coder:3b"","
    
    json = json & """system"":""You are a Microsoft Access expert. Return only code."","
    
    json = json & """prompt"":""" & JsonEscape(prompt) & ""","
    
    json = json & """temperature"":0.2,"
    
    json = json & """max_tokens"":150,"
    
    json = json & """stream"":false"
    
    json = json & "}"
    
    

    Practical Strategy - Combine all three.

    • temperature - accuracy
    • max_tokens - length control
    • system - behavior control
    • Recommended Default Setup for Access development:

      {
      
        "temperature": 0.2,
      
        "max_tokens": 150,
      
        "system": "You are a Microsoft Access expert. Return only valid SQL or VBA code without explanation."
      
      }
      
      

      Advantages

      • temperature - controls randomness
      • max_tokens - controls size
      • system prompt - controls behavior

      Note: Together, they turn AI from “chatty assistant” into a precise development tool.

      Constructing JSON string expressions and formatting Name: Value pairs in VBA requires careful practice and attention to syntax. You can experiment with each line of VBA code by assigning the expression to a variable, examining it in the Debug window, and printing the output to verify how the expression is interpreted and stored within the variable.

      For Example:

        
        
      model="qwen2.5-coder:3b"
      
      x="""model"":""" & model & """
      
              ? x
              "model":"qwen2.5-coder:3b"
      
      
      y = chr(34) & "model" & chr(34) & ":" & chr(34) & model & chr(34)
      
              ? y
              "model":"qwen2.5-coder:3b"
      z="""stream"":false"         ? z         "stream":false

      Access Class Module Architecture.

      A well-structured VBA Class Module architecture is the cornerstone of integrating AI into Microsoft Access in a maintainable and scalable way. Instead of embedding AI-related logic directly within forms or standard modules, the application should adopt a layered class-based design that encapsulates responsibilities such as prompt construction, API communication, response parsing, and conversation management. A central engine class (for example, clsLocalLLM) acts as the orchestrator, coordinating with supporting classes such as a prompt manager, JSON builder, and response parser. This separation of concerns not only keeps the user interface clean but also allows developers to extend or replace individual components—such as switching between local and cloud-based models—without impacting the rest of the application.

      This architectural approach enables Access applications to evolve into intelligent systems while preserving the strengths of VBA and the native Access environment. By treating AI as a reusable service layer implemented through class modules, developers can introduce features, such as natural language querying, automated VBA code generation, and intelligent reporting across multiple forms and databases with minimal duplication. Moreover, this design aligns well with the principles of modular development and code reusability, making it easier to package the entire AI capability as an add-in for broader deployment. In essence, a disciplined class module architecture transforms AI integration from an experimental feature into a robust, production-ready enhancement for modernizing Access applications.

      Access AI Interface and VBA Programs


      1. A few enhancements have been made to the Main Form. On the top-right, the list of installed AI models is displayed in an Option Group Control. You may select the appropriate model based on your specific requirements. Choose the first option (qwen2.5-coder) for VBA and SQL-related solutions, and the second option for general-purpose queries.

      2. A Spin Button Control has been added for selecting the AI “Temperature” parameter. The value ranges from 0.1 to 1.0, with the default setting being 0.2, which is ideal for VBA code generation. At this setting, implementation guidance and supplementary information will remain minimal and focused.

      3. A Spin Button Control is also provided for selecting the optional “max_tokens” parameter. The available range is from 1 to 2000, with the default value set to 80.

      4. Two Command Buttons have been added below the Prompt and Response fields to allow quick copying of the TextBox contents to the Clipboard.

      5. The Form’s record navigation buttons have been enabled. You may use a new record for each new AI session, saving the earlier activity.

      6. frmAIMain Module VBA Code.

         
        Option Compare Database
        Option Explicit
        
        Const dot As String = " +"
        Dim msg As String
        
        Private ai As New clsLocalLLM
        
        Private Sub cboSys_Click()
            Me!isysprompt = cboSys.Column(0)
        End Sub
        
        Private Sub cmdAskAI_Click()
        Dim resultJSON As String
        Dim m_prompt As String
        Dim sPrompt As String
        Dim sModelID As Integer
        Dim sTemperature As Double
        Dim smax_tokens As Long
        Dim txt_SysPrompt As String
        
        'Models
        Const q_wen = "qwen2.5-coder:3b"
        Const m_ist = "mistral"
        Const d_seek = "deepseek-coder:1.3b"
        
        On Error GoTo cmdAskAI_Err
        
        'Get prompt Parameters
        sTemperature = IIf(Me!ITemperature = 0, 0.2, Me!ITemperature)
        smax_tokens = IIf(Me!ITokens = 0, 120, Me!ITokens)
        txt_SysPrompt = Me!cboSys.Column(1) 'column-1 System Prompt text
        
        m_prompt = Trim(Me!Prompt)
        
        'Assign prompt Parameters
        If Len(Trim(txt_SysPrompt)) > 0 Then
            ai.AI_System = txt_SysPrompt
        End If
        
            ai.Temperature = sTemperature
            ai.Tokens = smax_tokens
           
            ai.AI_System = txt_SysPrompt
        
            Set ai.mForm = Me
            
        sModelID = Me!iModels
        
        Select Case sModelID
            Case 1
                ai.Model = q_wen
            Case 2
                ai.Model = m_ist
            Case 3
                ai.Model = d_seek
        End Select
        
        
        'Display Working... Please wait message
        With Me
            .lblMsg.visible = True
            .Repaint
        End With
        
        
        'Convert VBA ctrl codes like vbNewLine
        'to JSON code: '\n'
        sPrompt = ai.RefineRawPrompt(m_prompt)
        
        'send to AI
        resultJSON = ai.GenerateResponse(sPrompt)
        
        'Write the AI returned result in the Response Field.
        With Me
            !Response = "" 'erase existing contents
            !Response = resultJSON 'write result to field
        
            .lblMsg.visible = False 'Hide progress label
            .Repaint
        End With
        
        cmdAskAI_Exit:
        Exit Sub
        
        cmdAskAI_Err:
        MsgBox Err & " : " & Err.Description, , "cmdAskAI()"
        Resume cmdAskAI_Exit
        End Sub
        
        Private Sub cmdClose_Click()
        If MsgBox("Close the Form?", vbYesNo + vbQuestion, "cmdClose_Click()") = vbYes Then
            DoCmd.Close acForm, Me.Name
        End If
        End Sub
        
        Private Sub cmdPrompt_Click()
            Me.Prompt.SetFocus
            DoCmd.RunCommand acCmdCopy
        End Sub
        
        Private Sub cmdResponse_Click()
            Me.Response.SetFocus
            DoCmd.RunCommand acCmdCopy
        End Sub
        
        Private Sub Form_Current()
        On Error GoTo Form_current_Err
        
        With Me
            !isysprompt = IIf(Nz(!isysprompt, 0) = 0, 1, !isysprompt)
            !ITemperature = IIf(Nz(!ITemperature, 0) = 0, 0.2, !ITemperature)
            !ITokens = IIf(Nz(!ITokens, 0) = 0, 120, !ITokens)
            !iModels = IIf(Nz(!iModels, 0) = 0, 1, !iModels)
        End With
        
        Form_current_Exit:
        Exit Sub
        
        Form_current_Err:
        MsgBox Err & ": " & Err.Description, , "Form_current()"
        Resume Form_current_Exit
        End Sub
        
        Private Sub Form_load()
        
        With Me
            !Temperature = !ITemperature * 10
            If Nz(Me!ITokens, 0) = 0 Then
              Me!Tokens = 120
            Else
              Me!Tokens = !ITokens
            End If
            
            .TimerInterval = 0
            .Recalc
        
        End With
        
        msg = "Working, please wait "
        
        End Sub
        
        Private Sub Form_Timer()
        msg = msg & dot
        lblMsg.Caption = msg
        DoEvents
        
        End Sub
        
        Private Sub Temperature_Updated(Code As Integer)
        'Convert to proper value range
        Me!ITemperature = (Me!Temperature / 10)
        Me.Refresh
        End Sub
        
        Private Sub Tokens_Updated(Code As Integer)
        Me!ITokens = Me!Tokens
        Me.Refresh
        End Sub
          
        

        Building JSON Request in VBA.

        The clsLocalLLM Class Object Properties and Methods.

        The above Class Module has all the AI running Methods and properties. The project Diagram is given below for quick reference.

        The clsLocalLLM Class Module VBA Code is given below.

        Option Compare Database
        Option Explicit
        
        '=============================
        ' Private Members
        '=============================
        Private m_Model As String
        Private m_System As String
        Private m_EndPoint As String
        Private m_Temperature As Double
        Private m_Timeout As Long
        Private m_Tokens As Long
        Private m_Form As Access.Form
        
        
        '=============================
        ' Class Initialize
        '=============================
        Private Sub Class_Initialize()
            m_Model = "qwen2.5-coder:3b"
            m_System = "You are a Microsoft Access expert. Return only code."
            m_EndPoint = "http://localhost:11434/api/generate"
            m_Temperature = 0.2
            m_Tokens = 120
            m_Timeout = 60
        End Sub
        
        '=============================
        ' Public Properties
        '=============================
        
        
        Public Property Set mForm(ByRef value As Access.Form)
           Set m_Form = value
        End Property
        
        Public Property Get Model() As String
            Model = m_Model
        End Property
        
        Public Property Let Model(ByVal value As String)
            m_Model = value
        End Property
        
        Public Property Get Endpoint() As String
            Endpoint = m_EndPoint
        End Property
        
        Public Property Let Endpoint(ByVal value As String)
            m_EndPoint = value
        End Property
        
        Public Property Get AI_System() As String
            AI_System = m_System
        End Property
        
        Public Property Let AI_System(ByVal value As String)
            m_System = value
        End Property
        
        Public Property Get Temperature() As Double
            Temperature = m_Temperature
        End Property
        
        Public Property Let Temperature(ByVal value As Double)
            m_Temperature = value
        End Property
        
        Public Property Get Tokens() As Long
            Tokens = m_Tokens
        End Property
        
        Public Property Let Tokens(ByVal value As Long)
            m_Tokens = value
        End Property
        
        Public Property Get TimeoutSeconds() As Long
            TimeoutSeconds = m_Timeout
        End Property
        
        Public Property Let TimeoutSeconds(ByVal value As Long)
            m_Timeout = value
        End Property
        
        '=============================
        ' Public Methods
        '=============================
        
        Public Function GenerateResponse(ByVal Prompt As String) As String
        On Error GoTo ErrorHandler
        
            Dim http As Object
            Dim jsonBody As String
            Dim rawResponse As String
            Dim extResp As String
            
        Set http = CreateObject("MSXML2.XMLHTTP")
            'Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")
            'http.setTimeouts 5000, 5000, 5000, 60000
        
            jsonBody = BuildjsonBody(Prompt)
            
            http.Open "POST", m_EndPoint, True 'False
            http.setRequestHeader "Content-Type", "application/json"
            
            
            http.send jsonBody
            
        m_Form.TimerInterval = 10000
        Do While http.ReadyState <> 4
            DoEvents
        Loop
        m_Form.TimerInterval = 0
        
            rawResponse = http.responseText
            
            extResp = ExtractResponse(rawResponse)
            
        'Replace JSON escape Codes, if found, with VBA codes
            extResp = Replace(extResp, "\n", vbNewLine)
            extResp = Replace(extResp, "\u0026", "&")
            extResp = Replace(extResp, "\u003c", "<")
            extResp = Replace(extResp, "\u003e", ">")
            extResp = Replace(extResp, "\", vbNull)
            
            GenerateResponse = extResp
            
            Set http = Nothing
            
        ErrorHandler_Exit:
        Exit Function
        
        ErrorHandler:
            MsgBox "Error: " & Err.Description
            Set http = Nothing
        
        Resume ErrorHandler_Exit
        
        End Function
        
        Public Function RefineRawPrompt(ByVal rawPrompt As String) As String
        Dim rPrompt As String
        
        On Error GoTo ErrorHandler
        'Find VBA invalid CTRL characters of JSON
        'and replace valid control codes.
        
        rPrompt = rawPrompt
        rPrompt = Replace(rPrompt, """", "\""")
        rPrompt = Replace(rPrompt, vbCrLf, "\n")
        rPrompt = Replace(rPrompt, vbCr, "\r")
        rPrompt = Replace(rPrompt, vbLf, "\n")
        rPrompt = Replace(rPrompt, "'", "\u0027")
        rPrompt = Replace(rPrompt, "\", "\\")
        rPrompt = Replace(rPrompt, "/", "\/")
        
        RefineRawPrompt = rPrompt
        
        ErrorHandler_Exit:
        Exit Function
        
        ErrorHandler:
            MsgBox "Error: " & Err.Description
        Resume ErrorHandler_Exit
        
        End Function
        
        '=============================
        ' Private Helpers
        '=============================
        
        Private Function BuildjsonBody(ByVal Prompt As String) As String
            Dim safePrompt As String
            
        On Error GoTo ErrorHandler
        
            safePrompt = Replace(Prompt, """", "\""")
                
            BuildjsonBody = "{""model"":""" & m_Model & """," & _
            """system"":""" & m_System & """," & _
            """prompt"":""" & safePrompt & """," & _
            """stream"":false," & _
            """options"":{" & _
            """temperature"":" & m_Temperature & "," & _
            """max_tokens"":" & m_Tokens & "}}"
          
        ErrorHandler_Exit:
        Exit Function
        
        ErrorHandler:
            MsgBox "Error: " & Err.Description
        Resume ErrorHandler_Exit
        End Function
        
        Private Function ExtractResponse(ByVal jsonText As String) As String
            Dim startPos As Long
            Dim endPos As Long
            
        On Error GoTo ErrorHandler
        
            startPos = InStr(jsonText, """response"":""")
            If startPos = 0 Then
                ExtractResponse = jsonText
                Exit Function
            End If
            
            startPos = startPos + 12
            endPos = InStr(startPos, jsonText, """,""done""")
            
            If endPos > startPos Then
                ExtractResponse = Mid(jsonText, startPos, endPos - startPos)
            Else
                ExtractResponse = jsonText
            End If
            
        ErrorHandler_Exit:
        Exit Function
        
        ErrorHandler:
            MsgBox "Error: " & Err.Description
        Resume ErrorHandler_Exit
        End Function
        
         
          

        The above Program procedures were explained in detail in the second episode of this topic, viz. Access and AI Integration Part 2.

        The primary VBA functions used in this application are GenerateResponse() and ExtractResponse(). The GenerateResponse() function sends the user’s prompt to the selected AI model via the Local API using HTTP.send jsonBody. The AI model processes the JSON request and returns the generated output through http.responseText, which is stored in the rawResponse variable. The ExtractResponse() function retrieves the actual result generated for the user’s prompt and stores it in the extResp variable.

        Within the extResp response text, certain VBA control characters or special characters, such as <, >, &, and similar symbols, may appear as JSON escape codes. Therefore, it is advisable to validate and replace these special characters with their corresponding VBA-compatible characters.

        This conversion process is performed in the final steps of the GenerateResponse() function, as shown in the following lines of code.

         extResp = ExtractResponse(rawResponse)
            
        'Replace JSON escape Codes, if found, with VBA codes
            extResp = Replace(extResp, "\n", vbNewLine)
            extResp = Replace(extResp, "\u0026", "&")
            extResp = Replace(extResp, "\u003c", "<")
            extResp = Replace(extResp, "\u003e", ">")
            extResp = Replace(extResp, "\", vbNull)
            
            GenerateResponse = extResp

        Best Prompt Templates for Microsoft Access Developers.

        Prompt Engineering Toolkit for Access Developers

        Reusable AI Prompts for SQL and VBA

        Below is a Standard Prompt Template Library designed specifically for Microsoft Access (SQL + VBA) with local AI models (e.g., Ollama using qwen2.5-coder:3b).

        1. Universal System Prompt (Use Everywhere)

          You are a Microsoft Access expert.
          
          Generate only valid Microsoft Access SQL or VBA code.
          
          Do not include explanations, comments, or alternative options.
          
          Follow proper syntax and best practices.
          
        2. SQL Query Templates

          Basic SELECT Query

          Task: Create a Microsoft Access SQL SELECT query
          
          
          Table: [TableName]
          
          Fields: [Field1], [Field2], [Field3]
          
          Filter: [Condition]
          
          Sort: [Field ASC/DESC]
          
          
          
          Return only SQL.
          

          JOIN Query

          Task: Create a Microsoft Access SQL query with JOIN
          
          
          Tables:
          
          - Customers (CustomerID, Name)
          
          - Orders (OrderID, CustomerID, Amount)
          
          
          Requirement:
          
          Join Customers and Orders
          
          Show Customer Name and Total Order Amount
          
          
          Return only SQL.
          
           

          TOP N Query

          Task: Create a Microsoft Access SQL query
          
          
          
          Table: Orders
          
          Fields: CustomerID, Amount
          
          Requirement:
          
          Return top 5 customers by total Amount
          
          
          
          Return only SQL.
          
          

          PARAMETER Query

          Task: Create a parameter query in Microsoft Access
          
          
          Table: Orders
          
          Fields: OrderID, OrderDate, Amount
          
          
          Requirement:
          
          Prompt user for Start Date and End Date
          
          
          Return only SQL.
          
          
        3. VBA Code Templates

          Simple Function

          Task: Write a VBA function in Microsoft Access
          
          
          
          Requirement:
          
          Open a DAO Recordset for table Customers
          
          Loop through records
          
          Print Customer Name to Immediate Window
          
          
          
          Return only VBA code.
          
          

          Form Event Procedure

           
           Task: Write VBA code for a Form Button Click event
          
          
          Requirement:
          
          On click:
          
          - Open query "qrySalesReport"
          
          - Display results
          
          
          Return only VBA code.
          
          

          Error Handling Template

                  
          Task: Write a VBA procedure with error handling
          
          
          Requirement:
          
          Open a recordset
          
          Handle runtime errors properly
          
          Show error message
          
          
          Return only VBA code.
          
          

          Reusable Class Module

          Task: Create a VBA class module
          
          
          Requirement:
          
          Class Name: clsCustomer
          
          Properties:
          
          - CustomerID
          
          - CustomerName
          
          
          Include Property Let/Get procedures
          
          
          Return only VBA code.
          
          
        4. Debugging Templates

          Fix SQL Query

          Task: Correct the following Microsoft Access SQL query
          
          
          SQL:
          
          [Paste SQL here]
          
          
          
          Return corrected SQL only.
          
          

          Fix VBA Code

           
           Task: Debug the following VBA code
          
          
          Code:
          
          [Paste Code here]
          
          
          Fix errors and return corrected code only.
          
          
        5. Explanation Templates (Learning Mode)

          Explain SQL

           
           Explain the following Microsoft Access SQL query step by step:
          
          
          [Paste SQL]
          
          
          Keep explanation simple and structured.
          
          

          Explain VBA

           
           Explain the following VBA code:
          
          [Paste Code]
          
          Describe what each section does.
          
          
        6. Database-Aware Smart Template (Advanced)

          Task: Generate SQL based on database structure
          
          
          Tables:
          
          Customers(CustomerID, Name, City)
          
          Orders(OrderID, CustomerID, Amount)
          
          
          Requirement:
          
          Find top 3 customers by total order amount
          
          
          Return only Microsoft Access SQL.
          
            
        7. Output Control Add-on (Very Important)

          Append this to any prompt:

          Rules:
          
          - Output only code
          
          - No explanation
          
          - No comments
          
          
        8. Recommended Parameter Settings

                  
                  {
          
            "temperature": 0.2,
          
            "max_tokens": 150
          
          }
          
          

        How to Use This Library

        1. Pick a template

        2. Replace placeholders

        3. Send to your local AI

        4. Copy - Test - Refine.

        Note: The quality of AI output depends more on the prompt structure than the model itself.


        Frequently Asked Questions.

        1. Can Microsoft Access connect to AI models?

          Yes. Microsoft Access can connect to local AI models through HTTP APIs such as Ollama.

        2. What is the best AI model for VBA Code generation?

          Qwen2.5-Coder and similar coding models generally produce better VBA and SQL output.

        3. Can I generate Microsoft Access SQL queries?

          Yes. AI models can translate natural language instructions into Access-compatible SQL.

        Demo Databases Download.


        Related Articles

        1. AI Integration in Microsoft Access Part 1
        2. AI Integration in Access VBA and SQL Part 2
        3. Wrapper Class Module Creation Wizard-31
        4. wrapper-class-template-wizard-v2
    Share:

    Generate Microsoft Access SQL and VBA with Local AI Models (Part 2)

    Generate Microsoft Access SQL and VBA with Local AI Models (Part 2).

    Modernizing Microsoft Access applications with AI is not about replacing Access—it’s about extending it into a far more intelligent, responsive, and future-ready system. With the right integration approach, Access can evolve from a traditional desktop database into a smart, AI-assisted application platform.

    If you have not visited the first part of this series, AI Integration in Microsoft Access for VBA Coding Part 1, then please visit the Page and continue.

    Intelligent Query & SQL Generation.

    AI models can translate natural language into SQL queries, dramatically reducing the need for manual query design.

    A user types: “Show me dairy products sorted by name.”

    AI converts it into a valid Access SQL statement instantly

    This is especially powerful for non-technical users and rapid prototyping. Using local LLMs (via tools like Ollama), you can embed this capability directly into Access forms.

    AI-Assisted VBA Coding

    Writing and maintaining VBA code becomes faster and more reliable with AI assistance.

    • Generate boilerplate code for forms, reports, and modules

    • Debug and refactor existing VBA procedures

    • Auto-document your code for better maintainability

    • Models such as Mistral or Qwen2.5-Coder can run locally and assist developers directly within Access.

    Smart Data Entry & Validation

    AI can enhance forms with intelligent suggestions and validation:

    • Auto-complete fields based on historical data

    • Detect anomalies (e.g., incorrect pricing, duplicate entries)

    • Suggest corrections in real time

    • This reduces human error and improves data quality significantly.

    Natural Language Interface (NLI)

    Instead of navigating complex forms and menus, users can interact with Access using plain language.

    • “Add a new customer from Kochi with the pending invoice.”
    • “List the top 10 customers by sales this month.”
    • This can be implemented using prompt-driven interfaces embedded in Access forms.

    Automated Reporting & Insights

    AI can transform raw data into meaningful summaries:

    • Generate narrative reports (“Sales increased by 12% this quarter…”)
    • Identify trends and outliers automatically
    • Suggest actionable insights

    This moves Access from a data storage tool to a decision-support system.

    I assume that Ollama, Mistral, and qwen2.5-coder:3b are already installed on your Windows 10 or Windows 11 system. However, relying on Command Prompt–based trial runs is neither practical nor efficient for developing production-quality VBA code or generating SQL statements.

    Instead, we can design a user-friendly interface in Microsoft Access to execute AI prompts seamlessly. This approach will enable faster and more consistent generation of Access VBA code and SQL queries, significantly improving overall development efficiency.

    A Simple Table with only two Fields.

    Table Name: AIPrompt.

    Table Structure:

    AIPrompt Table
    Field Name Field Type
    Prompt LongText
    Result LongText

    A Simple Form in Design View is given below for reference:

    frmAIPrompt in Design View

    The AIPrompt table is linked to the form frmAIPrompt. The TextBox on the left has both its Control Source and Name properties set to the Prompt field of the table, while the TextBox on the right uses the Result field for its Control Source and Name properties.

    A command button is placed above the TextBoxes. In addition, a label with the caption “Working, please wait…” is positioned above the Prompt TextBox. This label remains hidden during normal use. When a prompt is executed by clicking the command button, the label becomes visible and stays on screen until the AI response is written to the Result TextBox.

    The Result TextBox is locked to prevent accidental edits, but it remains enabled so users can still select and copy its contents as needed.

    In a previous session, we downloaded and installed three different programs on our computers. We will now provide a brief introduction to each of them.

    1. Ollama

    Ollama is a lightweight runtime and management tool that lets you run large language models (LLMs) locally on your computer without relying on cloud-based AI services. It acts as a bridge between raw model files (such as Mistral or Qwen2.5-Coder) and user applications, making it easy to download, install, run, and interact with these models through simple commands or APIs.

    In the context of the Local AI models, Ollama performs several key functions.

    First, it manages model lifecycle operations - you can pull (download), list, update, and remove models using straightforward commands like Ollama pull mistral.

    Second, it provides a local inference engine, meaning it executes the model of your machine (CPU/GPU) and generates responses in real-time.

    Third, it offers a standardized API interface allowing developers to integrate local LLM capabilities into applications such as Microsoft Access, web apps, or automation tools.  

    Fourth, Ollama handles model configuration and optimization, including parameters like temperature and context size, simplifying what would otherwise be complex setup tasks. 

    Finally, it ensures privacy and offline capability, since all data processing happens locally, an important advantage for sensitive or enterprise data. In short, Ollama transforms complex LLM deployment into a simple, developer-friendly workflow for running AI models locally.

    2. Mistral.

    The Mistral Large Language Model (LLM) is a family of advanced generative AI models developed by Mistral AI. Designed to understand and generate human language with high efficiency and strong reasoning ability.  Built on transformer-based neural network architecture and can perform a wide range of tasks such as text generation, translation, summarization, and code writing by predicting patterns in language data. 

    Additionally, many Mistral models are released with open weight or open-source licenses, making them highly attractive for developers and enterprises seeking customizable, locally deployable AI solutions.

    3. Qwen2.5-Coder:3B

    The Qwen2.5-coder:3B model is a compact, code-specialized large language model developed by Alibaba Cloud as part of the broader Qwen2.5 series, designed specifically for programming-related tasks such as code generation, compilation, debugging, and reasoning. It supports multiple programming languages and demonstrates solid performance in real-world development scenarios.

    In addition to coding, it retains general language and mathematical reasoning abilities, and its availability in different sizes within the Qwen2.5-Coder family allows developers to choose models based on their computational constraints and application needs.

    frmAIPrompt in Form View

    Right-click the form image above to open a larger version in a new tab for clearer viewing. The left-side TextBox displays the AI prompt used to generate an Access wrapper class module for a command button control. The required details are entered on separate lines within the prompt.

    For simplicity, a basic prompt—such as one for an Access SQL statement or a VBA function—could have been used. However, this more detailed example demonstrates how to structure a multi-step prompt within a TextBox control. Use Ctrl + Enter to insert line breaks and organize the prompt into logical sections on separate lines.

    When complete, click the 'AskAI' Command Button to execute the Prompt.

    Let us inspect the Command Button Click Event Procedure listed below:

    Option Compare Database
    Option Explicit
    
    Private Sub cmdClose_Click()
    If MsgBox("Close the Form?", vbYesNo + vbInformation, "cmdClose()") = vbYes Then
        DoCmd.Close acForm, Me.Name
    End If
    End Sub
    
    Private Sub cmdRun_Click()
    Dim sPrompt As String
    Dim sResult As String
    Dim sModel As String
    Dim sel_Model As Integer
    
    Const m_Model = "mistral"
    Const q_Model = "qwen2.5-coder:3b"
    
    sel_Model = Me!Models
    
    
    If sel_Model = 1 Then
        sModel = q_Model
    Else
        sModel = m_Model
    End If
    
    Me.Label5.Visible = True
    Me.Repaint
    
    sPrompt = Me!Prompt
    ' Convert VB Speial characters to
    'Java Script Object Notation compatible characters
    ' Escapes special characters for JSON
        sPrompt = Replace(sPrompt, "\", "\\")        ' Backslash
        sPrompt = Replace(sPrompt, vbCrLf, "\n")     ' Line break (Windows)
        sPrompt = Replace(sPrompt, vbCr, "\n")      'Cariage Return
        sPrompt = Replace(sPrompt, vbLf, "\n")      'Line Feed
    
    sResult = AskLocalAI(sPrompt, sModel)
    
    Me!Result = ""
    Me!Result = sResult
    
    Me.Label5.Visible = False
    Me.Repaint
    
    Me.Result.SetFocus
    
    End Sub
    
    

    At the start of the procedure, the selected LLM model is initialized in the sModel variable. The AI prompt, stored in a Long Text field, may include special characters such as line breaks (Ctrl+Enter), double quotes, backslashes, and non-printable characters like carriage return and line feed (vbCrLf). Before submitting the prompt to the chosen AI model, these characters must be properly encoded into a valid JSON string—the format required by the AI for processing.

    Note: The response from the AI model is returned in JSON format. The required result must be extracted from the JSON string, specifically from the content between the response and end tags. After reformatting the AI prompt, the AskLocalAI() function is invoked, with the prompt and model name passed as parameters. Once the response is returned by the AskLocalAI() function, it replaces any existing content and is inserted into the Result TextBox on the form. 

    The AI workflow itself is straightforward: clearly describe the task you want the AI to perform in the Prompt TextBox, ideally in a step-by-step manner. Providing detailed instructions yields more accurate and useful results than a brief, one-line request such as: “Create an SQL query to display Employees’ Last Name, First Name, and City from the Employees table.”

    Note: Avoid running the same Task with minor changes repeatedly.

    You should continuously refine your ability to write effective AI prompts tailored to your specific task. Be as detailed and explicit as possible when describing your requirements, since clearer instructions lead to more accurate and useful outputs.

    When requesting VBA or SQL solutions, explicitly specify that you need Microsoft Access VBA or Microsoft Access SQL in your prompt. This ensures the generated code uses the correct syntax and conventions for Microsoft Access.

    If you request only VBA code without specifying the platform, it is typically assumed to be for Microsoft Excel. As a result, the code provided may not be compatible with Microsoft Access.

    The AskLocalAI() Function

    Option Compare Database
    Option Explicit
     
     Function AskLocalAI(aiPrompt As String, ModelName As String) As String
    
        Dim http As Object
        Dim JSON As String
        Dim Response As String
        Dim safePrompt As String
        Dim txtResponse As String
    
    
        Set http = CreateObject("MSXML2.XMLHTTP")
        
    'Escape Double Quptes in Prompt (important)
        safePrompt = Replace(aiPrompt, """", "\""") 'double quote to JSON escape Code \"
    
        JSON = "{""model"":""" & ModelName & """,""prompt"":""" & safePrompt & """,""stream"":false}"
    
        http.Open "POST", "http://localhost:11434/api/generate", False
    
        http.setRequestHeader "Content-Type", "application/json"
    
        http.Send JSON
    
        Response = http.responseText
        
        txtResponse = ExtractText(Response)
        
    'Replace escape Code with VBA codes
    txtResponse = Replace(txtResponse, "\n", vbNewLine)
    txtResponse = Replace(txtResponse, "\u0026", "&")
    txtResponse = Replace(txtResponse, "\u003c", "<")
    txtResponse = Replace(txtResponse, "\u003e", ">")
    txtResponse = Replace(txtResponse, "\", vbNull)
    
        AskLocalAI = txtResponse
    
     End Function
    

    The statement: Set http = CreateObject("MSXML2.XMLHTTP") creates an Instance of the MSXML2.XMLHTTP COM Object.

    This object is primarily used to send HTTP requests to servers and receive responses (such as HTML, XML, or JSON data) without a web browser, making it a cornerstone API interaction and automated web tasks in VBA.

    The Prompt that was passed to AskLocalAI() is further checked for Double quotes (") in the Prompt; if found, then changes it to (\") JSON Escape code.

    Note: JSON escape codes are backslash-prefixed sequences used to represent characters within a JSON string that would otherwise break the data's structure or are impossible to type directly.  Because JSON strings must be enclosed in double quotes, any literal double quote inside the string must be escaped so the JSON Parser does not mistake it for the end of the string

    Next, the Input information, the Large Language Model Name, and the user's Task Prompt values are validated, formatted, and saved in the JSON String Variable, ready to pass to the Local Cloud Service.

    The next two steps, the Local Host Cloud is open for API Service and initialized to accept the JSON input.

    The statement: http.Send JSON, transmit the JSON input to the user-selected LLM Model for action. 

    We will get the response from the AI Model through the statement: Response = http.responseText

    The Response variable may contain a significant amount of extraneous information, such as timestamps indicating when the request was received, action logs, and other system-generated metadata. This is typically followed by the actual response to the requested information, which often ends with the word “Done,” and may then be followed by additional system log details.

    Note: We will explore JSON Syntax and Structure in detail next week.

    The graphical representation of the Response looks like the following:

    Log--------- Response >>>>>>>>>>>>>>>>>Done------------Log

    We are interested only in retrieving the information between the words: Response and Done, from within the JSON Response String. 

    There is a small Function to do that job. The VBA Code is given below.

    Private Function ExtractText(ByVal jsonText As String) As String
        Dim startPos As Long
        Dim endPos As Long
        
        startPos = InStr(jsonText, """response"":""") + 12
        endPos = InStr(startPos, jsonText, """,""done""")
        
        If endPos > startPos Then
            ExtractText = Mid(jsonText, startPos, endPos - startPos)
        Else
            ExtractText = jsonText
        End If
    End Function
    
    

    The first statement in the ExtractText() function searches for the tag "response":. If found, it calculates the character position immediately after this tag by adding the length of "response": plus one (i.e., 12) and saves it in the startPos variable. This value marks the starting point of the AI-generated output.

    The next statement searches for the "done" tag, which indicates the end of the relevant output, within the JSON string, and stores its position in the endPos variable. With both the starting and ending positions identified, the function can extract the prompt result from the JSON string.

    The following statement validates these positions. If they are valid, it extracts the response text (from startPos to endPos) and returns the result. Otherwise, it returns the entire JSON string—including all extraneous details—to the calling function AskLocalAI().

    When the prompt response is extracted, it may still contain JSON-encoded characters (such as "\u0026" for & and "\u003c" for <) and similar codes. A series of additional statements is included to replace these escape sequences with their corresponding VBA-compatible characters.

    Finally, the processed response is returned to the cmdAskAI() command button click event procedure, where the result is used to populate the Result TextBox, replacing any existing content. 

    The 'Working, Please wait...' label disappears. If the process takes too much time your System may hang for some time. Don't panic, give it time, and it will return with the result.

    Prompt Engineering Toolkit for Access Developers

    Reusable AI Prompts for SQL and VBA

    1. Universal System Prompt (Use Everywhere)

      You are a Microsoft Access expert.
      
      Generate only valid Microsoft Access SQL or VBA code.
      
      Do not include explanations, comments, or alternative options.
      
      Follow proper syntax and best practices.
      
    2. SQL Query Templates

      Basic SELECT Query

      You are a Microsoft Access expert.
      
      Generate only valid Microsoft Access SQL or VBA code.
      
      Do not include explanations, comments, or alternative options.
      
      Follow proper syntax and best practices.
      
      Task: Create a Microsoft Access SQL SELECT query
      
      Table: [TableName]
      
      Fields: [Field1], [Field2], [Field3]
      
      Filter: [Condition]
      
      Sort: [Field ASC/DESC]
      
      
      Return only SQL.
      
      

      JOIN Query

      You are a Microsoft Access expert.
      
      Generate only valid Microsoft Access SQL or VBA code.
      
      Do not include explanations, comments, or alternative options.
      
      Follow proper syntax and best practices.
      
      Task: Create a Microsoft Access SQL query with JOIN
      
      Tables:
      
      - Customers (CustomerID, Name)
      
      - Orders (OrderID, CustomerID, Amount)
      
      Requirement:
      
      Join Customers and Orders
      
      Show Customer Name and Total Order Amount
      
      
      Return only SQL.
      
      

      TOP N Query

      Task: Create a Microsoft Access SQL query
      
      
      Table: Orders
      
      Fields: CustomerID, Amount
      
      Requirement:
      
      Return top 5 customers by total Amount
      
      
      Return only SQL.
      
      

      PARAMETER Query

      Task: Create a parameter query in Microsoft Access
      
      
      Table: Orders
      
      Fields: OrderID, OrderDate, Amount
      
      
      Requirement:
      
      Prompt user for Start Date and End Date
      
      
      Return only SQL.
      
    3. VBA Code Templates

      Simple Function

      Task: Write a VBA function in Microsoft Access
      
      
      Requirement:
      
      Open a DAO Recordset for table Customers
      
      Loop through records
      
      Print Customer Name to Immediate Window
      
      
      DO NOT:
      - Explain the code
      - Add Instruction text
      - Add conclusion text
      - Use markdown
      - code fences

      Form Event Procedure

      Task: Write VBA code for a Form Button Click event
      
      Requirement:
      
      On click:
      
      - Open query "qrySalesReport"
      
      - Display results
      
      
      DO NOT:
      - Explain the code
      - Add Instruction text
      - Add conclusion text
      - Use markdown
      - code fences

      Error Handling Template

      Task: Write a VBA procedure with error handling
      
      
      Requirement:
      
      Open a recordset
      
      Handle runtime errors properly
      
      Show error message
      
      
      
      DO NOT:
      - Explain the code
      - Add Instruction text
      - Add conclusion text
      - Use markdown
      - code fences

      Reusable Class Module

      Task: Create a VBA class module
      
      Requirement:
      
      Class Name: clsCustomer
      
      Properties:
      
      - CustomerID
      
      - CustomerName
      
      
      Include Property Let/Get procedures
      
      
      
      
      DO NOT:
      - Explain the code
      - Add Instruction text
      - Add conclusion text
      - Use markdown
      - code fences.
    4. Debugging Templates

      Fix SQL Query

      Task: Correct the following Microsoft Access SQL query
      
      
      SQL:
      
      [Paste SQL here]
      
      
      Return corrected SQL only.
      

      Fix VBA Code

      Task: Debug the following VBA code
      
      
      Code:
      
      [Paste Code here]
      
      
      Fix errors and return corrected code only.
      
      
    5. Explanation Templates (Learning Mode)

      Explain SQL

      Explain the following Microsoft Access SQL query step by step:
      
      
      [Paste SQL]
      
      
      
      Keep explanation simple and structured.
      
      

      Explain VBA

      Explain the following VBA code:
      
      [Paste Code]
      
      Describe what each section does.
      
      
    6. Database-Aware Smart Template (Advanced)

      Task: Generate SQL based on database structure
      
      
      Tables:
      
      Customers(CustomerID, Name, City)
      
      Orders(OrderID, CustomerID, Amount)
      
      
      Requirement:
      
      Find top 3 customers by total order amount
      
      
      Return only Microsoft Access SQL.
      
      
    7. Output Control Add-on (Very Important)

      Append this to any prompt:

      Rules:
      
      - Output only code
      
      - No explanation
      
      - No comments
      
    8. Recommended Parameter Settings.

      {
      
        "temperature": 0.2,
      
        "max_tokens": 150
      
      }
      

    How to Use This Library

    1. Pick a template
    2. Replace placeholders
    3. Send to your local AI
    4. Copy → Test → Refine

    Key Insight for Readers

    The quality of AI output depends more on the prompt structure than the model itself.

    Will continue Next Week.

    Downloads:


    Demo Databases Download.


    1. AI Integration in Microsoft Access Part 1
    2. Wrapper Class Module Creation Wizard-31
    3. wrapper-class-template-wizard-v2

    Share:

    How to Integrate AI into Microsoft Access VBA Using Ollama (Part 1)

    Local AI for Microsoft Access SQL and VBA Coding - Part 1.

    The idea of using Artificial Intelligence within Microsoft Access may sound complex at first, but recent advancements have made it surprisingly accessible—even on a standard Windows 10/11 PC. With lightweight local AI runtime, such as 'Ollama' and efficient coding-focused models like Qwen2.5-Coder, Access developers can now experiment with AI-assisted SQL and VBA generation directly from within Microsoft Access, without relying on cloud services.

    This first step is intentionally simple: install Ollama, download a compact model such as qwen2.5-coder:3b, and run a few test prompts. For example, you can ask the model to generate an SQL query to retrieve top customers or to write a basic VBA function to open a recordset. Within seconds, the AI responds with structured output that you can study, refine, and adapt into your own applications. This hands-on approach helps demystify AI and demonstrates its immediate practical value.

    From a hardware perspective, one of the key advantages of smaller models like Qwen2.5-Coder (3B) is that they are optimized for modest systems. A modern dual-core or quad-core processor (Intel i5/Ryzen 5 or equivalent) with at least 8 GB RAM can run such models comfortably for basic tasks, although 16 GB RAM is recommended for smoother performance and multitasking. Since the model runs locally, you also benefit from improved data privacy and independence from internet connectivity.

    At this stage, the objective is not to build a full integration, but to gain familiarity and confidence. By interacting with the model through simple prompts in the Command Prompt, developers begin to understand how AI interprets instructions, generates SQL syntax, and structures VBA procedures. This foundational experience is essential before moving on to deeper integration within Access using VBA and API calls.

    In the sections that follow, we will walk through the installation steps, demonstrate sample prompts, and explore how even a basic setup can assist in writing queries and VBA code. Once you see how quickly AI can respond to your development needs, you may begin to view it not as a replacement but as a reliable assistant in your everyday Access workflow.

    AI Environment for Microsoft Access Developers.

    Setting up a local AI environment for Microsoft Access development is a powerful idea—especially for automating SQL generation, VBA code assistance, and database analysis without relying on cloud services.

    Here’s a clear, practical step-by-step guide tailored to the development workflow.

    1. Choose a Local AI Engine

    We need a locally running LLM (Large Language Model).

    Recommended options:

    • Ollama (Best for simplicity)

    • LM Studio (GUI-based)

    • GPT4All

    Best choice for developers: Ollama (lightweight + API support)

    2. Install Ollama (Core Engine)

    Steps:

    • Download OllamaSetup.exe for Windows from: https://ollama.com

    • Install OllamaSetup.exe

    • Verify installation:

    Open Windows Command Prompt and Type:

    Download and Install the Large Language Model: Mistral, like ChatGPT. The 'pull' command downloads the model from source.

    C:\Users\HP>ollama pull mistral C:\Users\HP>ollama run mistral

    Download and Install the SQL and Code-generating AI model: qwen2.5-coder:3b with 3 billion parameters. The model is downloaded and installed with the following command. 

    C:\Users\HP>ollama pull qwen2.5-coder:3b C:\Users\HP>ollama run qwen2.5-coder:3b
    'Display the Installed Model's information.
    C:\Users\HP>ollama --version ollama version is 0.20.7 C:\Users\HP>ollama list NAME ID SIZE MODIFIED qwen2.5-coder:3b f72c60cabf62 1.9 GB 7 weeks ago - if installed mistral:latest 6577803aa9a0 4.4 GB 7 weeks ago - if installed C:\Users\HP>

    The VBA code-generating AI is installed on your machine. You need an Intel i5 or i7 Machine for better performance.

    >>>      The Coder AI 'prompt' input line appears. Let us try it out in the Command Prompt.

    Type /? or /help for help

    >>> /?  
    
    Available Commands:
    
      /set            Set session variables
    
      /show           Show model information
    
      /load    Load a session or model
    
      /save    Save your current session
    
      /clear          Clear session context
    
      /bye            Exit
    
      /?, /help       Help for a command
    
      /? shortcuts    Help for keyboard shortcuts
    
    Use """ to begin a multi-line message.
    
    
    >>> /show
    
    Available Commands:
    
      /show info         Show details for this model
    
      /show license      Show model license
    
      /show modelfile    Show Modelfile for this model
    
      /show parameters   Show parameters for this model
    
      /show system       Show system message
    
      /show template     Show prompt template
    
    
    >>> /show info
    
      Model
    
        architecture        qwen2
    
        parameters          3.1B
    
        context length      32768
    
        embedding length    2048
    
        quantization        Q4_K_M
    
    
    
      Capabilities
    
        completion
    
        tools
    
        insert
    
      System
    
        You are Qwen, created by Alibaba Cloud. You are a helpful assistant.
    
    
    
      License
    
        Qwen RESEARCH LICENSE AGREEMENT
    
        Qwen RESEARCH LICENSE AGREEMENT Release Date: September 19, 2024
    
        ...
    
    
    
    >>> Hello?
    
    Hello! How can I assist you today?
    
    'SQL SELECT Query creation AI PROMPT:
    
    >>> """Create SELECT SQL
    
    ... Table: Employees
    
    ... Fields: FirstName, LastName, City, Jobtitle
    
    ... Filter: Jobtitle = "Sales Representative"
    
    ... Sort: LastName"""
    
    Certainly! Here is the SQL query that selects employees with the job title "Sales Representative", 
    filters them by city, and sorts the results by last name:
    
    
    ```sql
    
    SELECT FirstName, LastName, City, Jobtitle
    
    FROM Employees
    
    WHERE Jobtitle = 'Sales Representative'
    
    ORDER BY LastName;
    
    ```
    
    

    This query will return a list of sales representatives from all cities, sorted alphabetically by their last names.

    AI Prompt for creating a VBA Function to calculate the Volume of a tree log.

    Type the following Prompt on the command line exactly as shown below. Start typing three quote characters next to each other, then the Prompt text in multiple lines, by pressing the Enter Key on each line, and type 3 quotes at the end of the AI Prompt finish line, indicating the end of the Prompt, and press Enter Key to execute.

    >>> """Create an MS Access VBA Function to calculate the Volume of a Tree Log
    ... Input Parameter values: Circumference value in Inches
    ... Log Length value: in Feet"""
    
    

    To create an MS Access VBA function that calculates the volume of a tree log using the provided parameters, you need to consider that the volume is calculated by assuming the cross-sectional area of the log is a circle. Here's a simple function that does this:


    1. Open Microsoft Access.

    2. Press `Alt + F11` to open the VBA editor.

    3. In the Project Explorer, right-click on "Microsoft Access Objects" and select "Add > Module".

    4. Copy and paste the following code into the module:


    ```vba

    Function CalculateVolumeOfLog(circumference As Double, logLength As Double) As Double

        ' Define the value of pi

        Dim pi As Double

        pi = 3.141592653589793


        ' Calculate the radius from the circumference

        Dim radius As Double

        radius = circumference / (2 * pi)


        ' Convert log length from feet to inches

        Dim logLengthInInches As Double

        logLengthInInches = logLength * 12


        ' Calculate the volume of the log

        Dim volume As Double

        volume = pi * (radius ^ 2) * logLengthInInches


        ' Return the calculated volume

        CalculateVolumeOfLog = volume

    End Function

    ```

    ### Explanation:

    - **Step 1**: The `pi` variable is set to its approximate value.

    - **Step 2**: The radius \( r \) is calculated using the circumference in inches.

    - **Step 3**: The log length in feet is converted to inches by multiplying it by 12.

    - **Step 4**: The volume is calculated using the formula for the volume of a cylinder, where the radius is in inches, and the log length is in inches.

    >>> /Exit

    C:\Users\HP>

    NB: Click and drag over the required lines of content in the Command Prompt area and press Ctrl+C to copy. Paste it into a Text File or into the Global Module of  Access. Copy and paste the SQL into the Query SQL Editing Window. That is for now. We will use better methods when run from within MS Access.

    The Machine hardware, Memory recommendation, and suitable Models.

    Running Qwen2.5-Coder:3B locally on a Windows 10/11 PC (via Ollama) is quite feasible—even without a GPU—but the experience depends heavily on your hardware.

    Let’s make it practical and tailored for smooth day-to-day use.

    Minimum vs Recommended Hardware

    Minimum (Will run, but slower)

    • CPU: Dual-core (Intel i3 / Ryzen 3)

    • RAM: 8 GB

    • Storage: ~6–8 GB free (model + cache)

    • GPU: Not required

    Expect:

    • Slower responses (3–10 seconds per reply)

    • Occasional lag with longer prompts

    Recommended (Smooth experience)

    • CPU: 4–8 cores (Intel i5 / Ryzen 5 or better)

    • RAM: 16 GB

    • Storage: SSD with 10+ GB free

    • GPU: Optional (integrated GPU is fine)

    Expect:

    • Fast responses (1–3 seconds typical)

    • Comfortable coding + debugging workflow

    Optimal (Best performance)

    • CPU: 8+ cores (Intel i7 / Ryzen 7)

    • RAM: 32 GB

    • Storage: NVMe SSD

    • GPU (optional but powerful):

    • NVIDIA with 6–8 GB VRAM (e.g., RTX 3060)

    Expect:

    • Near-instant responses

    • Handles long prompts + large codebases easily

    Model Size & Memory Usage

    • Qwen2.5-Coder:3B (quantized via Ollama):

    • Disk size: ~2–4 GB

    • RAM usage during run: ~4–6 GB

    So your system must have extra RAM beyond this for smooth multitasking.

    Key Performance Factors

    1. RAM (Most Important)

      • Less RAM → swapping → slow performance

      • 16 GB is the sweet spot

    2. SSD vs HDD

      • SSD = fast model loading

      • HDD = noticeable delay

    3. Strong recommendation: Use SSD

    4. CPU Threads

      • More cores = faster token generation

      • LLMs are CPU - parallel friendly

    5. GPU (Optional Boost)

      • Ollama can use a GPU, if available

      • Not required for 3B models

    Realistic Performance (What You’ll Feel)

    Hardware Experience

    8GB RAM + HDD Slow, sometimes frustrating

    8GB RAM + SSD Usable, but limited

    16GB RAM + SSD - Smooth & practical

    32GB + GPU - Excellent


    For MS Access + Coding Use Case

    • Generate SQL queries

    • Work with VBA

    • Write structured logic in Class Modules.

    You’ll benefit from:

    • 16 GB RAM (minimum target)

    • SSD (mandatory)

    • Mid-range CPU (i5/Ryzen 5+)

    Final Recommendation

    If you’re planning a stable setup:

    Best value configuration:

    • 16 GB RAM

    • SSD

    • Intel i5 / Ryzen 5

    This will run Qwen2.5-Coder:3b smoothly without frustration

    NB: If the 3b model hangs the Access System in the middle of a Code generating run, due to hardware limitations, be patient, it completes the work in the background and comes out. Consider installing the 1b Model: qwen2.5-coder:1b (the lightweight 1 billion parameters Model).

    Will Continue >>> Next Week.


    1. Wrapper Class Module Creation Wizard-31
    2. wrapper-class-template-wizard-v2
    Share:

    PRESENTATION: ACCESS USER GROUPS (EUROPE)

    Translate

    PageRank

    Post Feed


    Search

    Popular Posts

    Blog Archive

    Powered by Blogger.

    Labels

    Forms Functions How Tos MS-Access Security Reports msaccess forms Animations msaccess animation Utilities msaccess controls Access and Internet MS-Access Scurity MS-Access and Internet Class Module External Links Queries Array msaccess reports Accesstips WithEvents msaccess tips Downloads Objects Menus and Toolbars Collection Object MsaccessLinks Process Controls Art Work Property msaccess How Tos Combo Boxes Dictionary Object ListView Control Query VBA msaccessQuery Calculation Event Graph Charts ImageList Control List Boxes TreeView Control Command Buttons Controls Data Emails and Alerts Form Custom Functions Custom Wizards DOS Commands Data Type Key Object Reference ms-access functions msaccess functions msaccess graphs msaccess reporttricks Command Button Report msaccess menus msaccessprocess security advanced Access Security Add Auto-Number Field Type Form Instances ImageList Item Macros Menus Nodes RaiseEvent Recordset Top Values Variables Wrapper Classes msaccess email progressmeter Access2007 Copy Excel Export Expression Fields Join Methods Microsoft Numbering System Records Security Split SubForm Table Tables Time Difference Utility WScript Workgroup database function msaccess wizards tutorial Access Emails and Alerts Access Fields Access How Tos Access Mail Merge Access2003 Accounting Year Action Animation Attachment Binary Numbers Bookmarks Budgeting ChDir Color Palette Common Controls Conditional Formatting Data Filtering Database Records Defining Pages Desktop Shortcuts Diagram Disk Dynamic Lookup Error Handler External Filter Formatting Groups Hexadecimal Numbers Import Labels List Logo Macro Mail Merge Main Form Memo Message Box Monitoring Octal Numbers Operating System Paste Primary-Key Product Rank Reading Remove Rich Text Sequence SetFocus Summary Tab-Page Union Query User Users Water-Mark Word automatically commands hyperlinks iSeries Date iif ms-access msaccess msaccess alerts pdf files reference restore switch text toolbar updating upload vba code