× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



It might be because the cmd.execute is inside of a loop but I'm not sure
about that. IF you can expand the current cell range you might be able
to do the whole sheet with one cmd.execute, but I don't know the syntax
and I don't know if the IBMDA400 provider will support that. 
You might want to try a recordset.

Dim conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
   
Dim x As integer
   
' Set up ADO connection object properties. This connection will be read
only
' Depending on user's Client Access Settings they may or may not be
prompted
' to enter their user name and password to the AS/400 
With conn
   conn.Provider = "IBMDA400"  'IBM Data Access o the AS/400 provider
   conn.Properties("Data Source") = "192.168.1.1" 'Name of our AS/400
   conn.Open 'Open Connection.
   conn.CursorLocation = adUseServer
End With

rst.Open ("Select * FROM Lib.File"), conn, adOpenDynamic,
adLockOptimistic
   
For Each Row In Me.Rows
   x = x + 1
   If Me.Cells(x, 1) <> " " Then
      rst.AddNew
      rst.Fields(0) = Me.Cells(x, 1).Value
      rst.Fields(1) = Me.Cells(x, 2).Value
      rst.Update
   Else
      Exit For
   End If
Next

Rst.close
Conn.close

Rst = nothing
Conn = nothing

It's kind of hoaky, but it works.  The for loop should be changed not to
check each row in Me.Rows because that checks the maximum number of
allowable rows in a spreadsheet. Also the IF statement would need to be
altered in a fashion that would actually leave the for loop. This
example looks like it does, but it doesn't really work.

-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx
[mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of nick
Sent: Thursday, January 05, 2006 7:54 AM
To: Midrange Forumn
Subject: IBMDA400 and performance using VBA in Excel

Greetings all,

 

I'm not sure if this is the correct place to post this, but please
correct
me if its not.

 

I wrote a VBA proc to upload records from an Excel spreadsheet to the
iSeries. I realize I can use IBM's file upload addin for Excel, but
chose
not to. When the code runs, it take a very long time. I looked at the
job
running on the iSeries  and noticed it opening and closing the file I'm
uploading to for each row in the spreadsheet. A snipit of the code is
follows: 

 

Set cn_iSeries = CreateObject("ADODB.Connection")

cn_iSeries.Open "provider=IBMDA400;data source=S103LB4M;", "", ""

Set rs = CreateObject("ADODB.Recordset")

Set cmd = CreateObject("ADODB.Command")

Set cmd.ActiveConnection = cn_iSeries

  

Set currentcell = Worksheets(ActiveSheet.Name).Range("A3")

 

Do Until currentcell.Value = ""

  

  cmd.CommandText = "INSERT INTO library.file VALUES ("

  cmd.CommandText = cmd.CommandText & "'" & currentcell.Offset(0,
0).Value &
"'" & ","

  cmd.CommandText = cmd.CommandText & "'" & currentcell.Offset(0,
1).Value &
"'"

  cmd.CommandText = cmd.CommandText & ")"

  

  cmd.CommandType = adCmdText

  cmd.Execute

  

   Loop  

 

 

I was wondering if there is a better way performance wise to do this. It
would be nice if the iSeries wouldn't open and close the file for each
row,
but I'm not sure if that can be controlled or not. 

 


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.