Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 191
  • Last Modified:

imagebox array loses index, possibly declare connectionstring globally

i am using vb6sp5, and an access database to get strings for the pictures on the imageboxes

i have an array of imageboxes
on the click event, the index is called:

Private Sub imgPicture_Click(Index As Integer)

however i can click on say img1,then img2, then img3
and the indexes are called fine , namely, 1,2,3 respectively

then when i click on img1 for example again, the index is set to 0
this happens when i click on imageX, imageY and imageX again.
and i get an "unspecified error" the debugger stops on my connection string

 oconn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=.\tapeus.mdb;" & _
               "User ID=admin;" & _
               "Password=;"
               
which is working fine, because i just connected to it twice.

maybe its the connection that does not like to be reconnected so much, how can i the connectionstring
public so i only need to connect once, i cant put it in general declaration
i am currently declaring it in every sub or function


0
jxharding
Asked:
jxharding
1 Solution
 
TimCotteeCommented:
Hi jxharding,

If you put the declaration in the declarations section of your form, you can set the connection in form_load. Alternatively you can do it in a module:

In a form:

'Declarations Section
Private oConn As ADODB.Connection

Private Sub Form_Load()
'Instantiate the object
  Set oConn = New ADODB.Connection
'Assign the connection string
  oConn.ConnectionString = "Your connection string"
'Open the connection
  oConn.Open
End Sub

Private Sub Form_Unload()
'Clean up and destroy connection
  If Not(oConn Is Nothing) Then 'the connection object has not been released
    If oConn.State <> adStateClosed Then 'the connection is open
      oConn.Close 'close the connection
    End If
    Set oConn = Nothing ' destroy the object
  End If
End Sub
 
In a module, you would simply have

Public oConn As ADODB.Connection

And then two subs which have the same code as for the form, however you need to then call these when your application starts and ends. A good way of doing this is by setting your startup object to Sub Main(). You then create SUB Main in your module:

Public Sub Main()
  'Initiate connection
  frmMyMainForm.Show vbModal 'pass control to the form
  'terminate connection
End Sub

Tim Cottee MCSD, MCDBA, CPIM
Brainbench MVP for Visual Basic
http://www.brainbench.com
0
 
jxhardingAuthor Commented:
Hi Tim

heres my sub main module, which is set as start up:

(general declaration)
  Public oConn As ADODB.Connection

Public Sub Main()
   Set oConn = New ADODB.Connection
  oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=.\tapeus.mdb;" & _
           "User ID=admin;" & _
           "Password=;"
  oConn.Open
  Form1.Show vbModal
End Sub

then it goes straight to form_load,which contains only
    Dim SQLQ As String
    SQLQ = "SELECT * FROM Products"
    rsProductsG.Open SQLQ, oConn, adOpenStatic, adLockBatchOptimistic, adCmdText

but when i reach this , oconn = nothing
and i get an "object required " message


0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now