Microsoft Access 2000 and 2002 are similar. Smaller capacities for the older versions of Access are noted in the tables.

These figures are taken from Microsoft sources and published here for the convienience of my students and clients.

I no longer build full applications in Access, but it is excellent for prototypes, and under some circumstances it works well as a front end with SQL Server as a back end. In this situation the application should be an Access project.

Database specifications
Attribute Maximum
Database (.mdb) file size 2 gigabyte. However, because your database can include linked tables in other files, its total size is limited only by available storage capacity.
Number of objects in a database 32,768
Modules (including forms and reports with the HasModule property set to True) 1,000
Number of characters in an object name 64
Number of characters in a password 14
Number of characters in a user name or group name 20
Number of concurrent users 255
Table specifications
Attribute Maximum
Number of characters in a table name 64
Number of characters in a field name 64
Number of fields in a table 255
Number of open tables 2048. The actual number may be less because of tables opened internally by Microsoft Access.
Table size 2 gigabytes minus the space needed for the system objects; 1 for Access 2000 and 2002.
Number of characters in a Text field 255
Number of characters in a Memo field 65,535 when entering data through the user interface; 1 gigabyte when entering data programmatically.
Size of an OLE Object field 1 gigabyte
Number of indexes in a table 32
Number of fields in an index 10
Number of characters in a validation message 255
Number of characters in a validation rule 2048
Number of characters in a table or field description 255
Number of characters in a record (excluding Memo and OLE Object fields) 4,000; 2,000 for Access 2000 and 2002
Number of characters in a field property setting 255
Query specifications
Attribute Maximum
Number of enforced relationships 32 per table minus the number of indexes that are on the table for fields or combinations of fields that are not involved in relationships
Number of tables in a query 32
Number of fields in a recordset 255
Recordset size 1 gigabyte
Sort limit 255 characters in one or more fields
Number of levels of nested queries 50
Number of characters in a cell in the query design grid 1,024
Number of characters for a parameter in a parameter query 255
Number of ANDs in a WHERE or HAVING clause 99; 40 for Access 2000 and 2002
Number of characters in a SQL statement approximately 64,000
Form and report specifications
Attribute Maximum
Number of characters in a label 2,048
Number of characters in a text box 65,535
Form or report width 22 in. (55.87 cm)
Section height 22 in. (55.87 cm)
Height of all sections plus section headers (in Design view) 200 in. (508 cm)
Number of levels of nested forms or reports 7; 3 for Access 2000 and 2002
Number of fields or expressions you can sort or group on in a report 10
Number of headers and footers in a report 1 report header/footer; 1 page header/footer; 10 group headers/footers
Number of printed pages in a report 65,536
Number of controls and sections you can add over the lifetime of the form or report 754
Number of characters in an SQL statement that serves as the Recordsource or Rowsource property of a form, report, or control (both .mdb and .adp) 32,750
Macro specifications
Attribute Maximum
Number of actions in a macro 999
Number of characters in a condition 255
Number of characters in a comment 255
Number of characters in an action argument 255

Variable and Table Data Types

Data type Prefix Example Note
String (Text) str strCity Text to 255 characters
Date/Time dtm dtmCreated Date and Time
Boolean bln blnIsNotNull Yes/No or True/False, two values
Byte byt bytMonth One Byte, values from 0 to +255
Integer int intCount Two Bytes; values from -32,768 to +32,767; No fractions
(long integer)
lng lngDistance Four Bytes, values from
-2,147,483,648 to 2,147,483,647
Single sng sngPopulation Four Bytes single precision, floating point
Currency cur curTraded Fifteen digits to the left, four to the right. Fixed decimal place.
Double dbl dblClientID Eight Bytes
Decimal dec decMicroseconds Twelve Bytes
Object obj objConnection
Variant vnt vntUserInput It can store numeric, string, date/time, Null, or Empty data
Error err errBadEmailAddress

source : http://www.databasezone.com/techdocs/acclimit.html


What about that “Private Sub MessageUser()” line from our previous example? It’s a private sub, as the name states, but try to access it from outside the Vehicle class. In the MainForm_Load() sub, try adding Van.MessageUser. You should get a build error that states ‘Vehicle.Private Sub MessageUser()’ is not accessible in this context because it is ‘Private’. Try the same thing with the _VehicleType variable and you should get a similar result.

As the error suggests, you can’t access certain types of class members from outside of the class itself.

The four types of variables we have used so far are:
Public variables. These can be access directly from the class. We choose not to use this with OP by convention. Rather we create Properties (we’ll get into this later) to adjust variables directly, or use Get/Set methods.

Private variables. These can be accessed only within the class. Private variables cannot be accessed by any subclasses or other class. These are ideal whenever you have a class you know will not be inherited. Also, these are good for storing data that should not be exposed publicly.

Protected variables. These can be accessed by the class or any subclass that is inherited. These are what I personally use because if you design a subclass later, you don’t have to change your base class code later. This is a good catchall private storage method.

Local variables. These are created by the Dim statement. These exist for the duration of the location in which they are declared. For example, if you Dim x As Int32 in Form_Load(), it will only exist in the Form_Load() method.

These four access types are also used frequently in sub/function/property headings, and thus are not limited to just variables. For more information on access types, see the MSDN article.

Classes vs. Objects

I know I said this was object-oriented programming. So why am I talking about classes? The answer to this question is that all objects are classes. (Mind-blowing, huh?) The way to separate the difference between objects and classes is quite easy. An object has an IS-A relationship, while a class has a HAS-A relationship.

A car IS-A vehicle, while a dog HAS-A tail. The car would be an object declared as type Vehicle, while the dog would have a member that IS-A tail. However, Fido IS-A dog. The dog class is the base template for all dog objects, so when we declare Fido as a dog, Fido is an object. Since Fido IS-A dog, Fido HAS-A tail.

IS-A = object
HAS-A = class

“Class” and “object” are sometimes used interchangeably. However, classes describe the structure of objects, while objects are instances of classes. Each instance is an exact copy of its base class. Because an object is an “instance” of a class, the act of creating an object is called instantiation.
To describe it better, a class is a blueprint, and an object is a building based on that blueprint.

To understand it, we can use an example. Open up Visual Studio, and create a new Windows Application. Go to the File menu, click Add New Item, and select “Class”. A blank class window should show up. Change the name from Class1 to Vehicle. This should be what comes up:

Public Class Vehicle 'This is an empty class End Class

We will start by creating a constructor. A constructor is a special method inside each class that tells the class what to do when it is instanced. The instantiation of a class occurs when a new instance of a class is declared. In VB.NET, this is accomplished with the New sub.

Change your class so it looks like this:

Public Class Vehicle #Region " Constructors " 'The default constructor Public Sub New() 'Tell the user that the new sub is being called. MessageBox.Show("This is a new vehicle object", "Object Oriented Programming") End Sub #End Region End Class

Notice two things. The first is the Region called “Constructors”. I usually create these different regions to keep the code window nice and neat, and as you can have multiple constructors (see below), it’s nice to keep them all in one place. The second is the code in the New sub. This should fire every time a new object is declared.

To test this out, we can add some code to the MainForm_Load() method on our form:

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Declare a vehicle called Car and instance it Dim Car As Vehicle Car = New Vehicle() ' 'Declare a vehicle called Truck and instance it Dim Truck As Vehicle Truck = New Vehicle() End Sub

Run it. You’ll notice that you get two identical MessageBoxes that tell you that you have created a new vehicle object. That’s nice, right? Wouldn’t it be better to at least let it tell you what type of vehicle it is? We can: just overload a new constructor.

Change the class to:

Public Class Vehicle Protected _VehicleType As String #Region " Constructors " 'The default constructor Public Sub New() 'There was no parameter passed, so let's say the vehicle is a "vehicle" _VehicleType = "vehicle" ' 'Alert the user MessageUser() End Sub ' 'Another constructor that accepts a parameter Public Sub New(ByVal VehicleType As String) 'We've been passed a parameter, so let's store that in a private variable 'for later use _VehicleType = VehicleType ' 'Alert the user MessageUser() End Sub #End Region Private Sub MessageUser() 'Tell the user what type of class it is MessageBox.Show("This object is a " & _VehicleType, "Object Oriented Programming") End Sub End Class

That’s a lot! What does it mean? The first line “Protected _VehicleType As String” means that this is a variable that can be used anywhere inside the class, or any subclass (we’ll get to this topic later). The default constructor has been modified to take into account the storage variable, and if there’s no parameter passed, it sets the variable to “vehicle”.

What about that second constructor? It’s known as an overloaded constructor because it is a New sub, but has a parameter attached to it. We take the passed value and assign it to our protected variable. Let’s see what this new class does. Modify MainForm_Load to be the following:

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Declare a vehicle called Car and instance it Dim Car As Vehicle Car = New Vehicle("car") ' 'Declare a vehicle called Truck and instance it Dim Truck As Vehicle Truck = New Vehicle("truck") ' 'Declare a vehicle called Van and instance it Dim Van As Vehicle Van = New Vehicle() End Sub

Notice how the MessageBox has been changed to reflect this addition. Car and Truck are shown to be their respective types, but because nothing was passed to the Van instantiation call, it defaults to “vehicle”.

Public Class Hello

Private _sample As String

Public Property Sample() As String
Return _sample
End Get
Set(ByVal Value As String)
_sample = Value
End Set
End Property

Public Sub DoSomething()
Me.Sample = “SampleText” ‘2
MessageBox.Show(Me.Sample) ‘1

End Sub

End Class

*) note : we use .netCharting as component/control in this article


This document describes how to add the .netCHARTING control to various versions of Visual Studio toolbox.

Visual Studio 2002 & 2003:

  • Right-Click on the toolbox > Add/Remove Items
  • Select the .net Framework Components tab
  • If the server version is installed, the component will be listed in the list box. Otherwise, click browse and select the .netCHARTING dll.
  • Click Ok to finish.
  If the error “The format of the file ‘dotnetcharting’ is invalid.” occurs. This means the dll being added is a .net 2.0 assembly. To resolve this issue, the .net 1.x version of the bundle must be downloaded and used instead.


Visual Studio 2005, 2008 & Express editions.

  • Right-Click on the toolbox > Choose Items
  • Select the .net Framework Components tab
  • If the server version is installed, the component will be listed in this tab. Otherwise, click browse and select the .netCHARTING dll.
  • Click Ok to finish. 

    Web Matrix

    • Select “Custom Controls” tab of the toolbox.
    • Right-Click on the custom controls tab and select “Add Local Toolbox Components…”
    • Click “Browse…”
    • Navigate to the location of the dotnetcharting.dll file, select it and click ok.
    • Finally click ok at the “Select Components” popup.
    • When the “Install to GAC” popup appears, click no.
  • Build Your Own ASP.NET Server Control Component
    by alfred_ng@hotvoice.com

    Here will deliver a simple tutorial guide you how to build a component using VB.NET, and the steps using it with ASP.NET Web Page.

    This component will generate the bullet or numbering beside your list.

    Below is the coding of the component

    Step1: Copy the code below save it as “ShowList.vb” filename.

    ================== Code Listing: ShowList.vb ========================

    Imports System
    Imports System.Web
    Imports System.Web.UI
    Imports System.Collections

    Namespace listControl

    Public Class ShowList: Inherits Control

    Private _dataSource As IEnumerable

    Public Property DataSource As IEnumerable

    Return _dataSource
    End Get

    _dataSource = Value
    End Set
    End Property

    Public Title As String
    Public Format As String

    Protected Overrides Sub OnDataBinding (e As EventArgs)

    Dim DataEnum As IEnumerator
    Dim ltlLiteral As LiteralControl
    Dim lstBeginFormatTag As String
    Dim lstEndFormatTag As String

    Controls.Add(New LiteralControl(“” & Title & ““))

    Select Case Format.ToLower()
    Case “number”
    lstBeginFormatTag = “

      lstEndFormatTag = “

    Case “bullet”
    lstBeginFormatTag = “

      lstEndFormatTag = “

    End Select

    If Format.ToLower() “number” AND Format.ToLower() “bullet” Then
    Controls.Add(New LiteralControl(“
    ” _
    & “Error Message: Undefined “”Format”” Property, either ” _
    & “””number”” or “”bullet””

    If Not DataSource Is Nothing
    DataEnum = DataSource.GetEnumerator()
    Controls.Add(New LiteralControl(lstBeginFormatTag))

    While (DataEnum.MoveNext())
    ltlLiteral = New LiteralControl (DataEnum.Current.ToString())

    Controls.Add(New LiteralControl(“

  • “))
    Controls.Add(New LiteralControl(“
  • “))
    End While

    Controls.Add(New LiteralControl(lstEndFormatTag))
    Controls.Add(New LiteralControl(“
    ” _
    & “Data Not Found!

    End If
    End If
    End Sub

    End Class

    End Namespace

    ================== End of Code Listing ==============================

    Step2: Compile and locate it at your web application root\bin folder.

    vbc /t:library /r:System.dll,System.Web.dll ShowList.dll

    Step3: Implement into your ASP.NET page, copy it and save it as “ListControl.aspx”.

    ================== Code Listing: ListControl.aspx ===================

    Sub Page_Load

    Dim theList As ArrayList

    theList = New ArrayList
    theList.Add (“Expresso”)
    theList.Add (“Cappurino”)
    theList.Add (“Coffee”)
    theList.Add (“Mocha”)

    dbBound.DataSource = theList

    End Sub

    ListControl Demonstration

    Build Your Own Bullet and Numbering Control Component

    ================== End of Code Listing ==============================
    In order to use the control, remember that locate the “ShowList.dll” file which is just generated into the web application root\bin folder. Inside your .aspx page, you need to attach this code on top

    Inside the content, you need to attach the code below to using the control.

    Description: Initially the Page_Load will bind the data into the control. You may bind the data with the database. For the “Format” property you can use either “bullet” or “number” to display your list. The “Title” property, it is just a title for the listing and in “BOLD” format.

    Thanks for reading and try it out. Any suggestion or recommendation about this control are welcome reply to me.

    source : http://www.asp101.com/articles/misc/usercontrol/default.asp

    Aika Imanina Ardhiansa putriku sayang, Ayah-Bunda mengucap Alhamdulillah untuk kehadiran Aika bersama kami. Semoga Aika sayang menjadi putri yang sholehah, beriman kepada Allah, berbakti dan dapat mengangkat derajat Ayah-Bunda.

    Aika lahir di RSI Al Arafah Kediri pada tanggal 28 Agustus 2008 pukul 15:18 WIB. Bunda tentu akan segera melupakan rasa sakit dan berganti bahagia ketika melihat Aika lahir dengan selamat.

    Aika Imanina Ardhiansa kami ambil dari kata :
    – Aika (Arab) : Tanaman yang tumbuh dengan baik, yang secara harfiah kami artikan Tumbuh dengan Baik
    – Aika (Kanji) : kanji Ai berarti Cinta dan kanji Hana yang berarti Bunga, jadi secara harfiah bisa diartikan Bunga Cinta
    – Imanina (Arab) : Keimanan kita kepada Allah
    Secara harfiah, Aika Imanina Ardhiansa kami maksudkan Tumbuh Dengan Baik Keimanan Kita Kepada Allah. Semoga doa kami dalam nama Aika mendapat rahmat dan kasih-sayang Allah SWT.

    Aika sayang, cepat besar ya nak, kita rajut bersama hari-hari nanti, semoga selalu penuh keberkahan, Amiin.