ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Import Data - from Excel (https://www.excelbanter.com/excel-programming/415325-import-data-excel.html)

makulski

Import Data - from Excel
 
I've started experimenting with the rather cool technique of using Data
Import to get data from another spreadsheet. This is better than linking to
the other spreadsheet, because the other spreadsheet doesn't need to be open,
and I can easily grab large chunks of data.

Setting up the link for the first time I use the "Data : Get External
Data"menu. This sets up the Connection string, Command type, and Command
text. I found that I can change the Command type from Table to SQL, then I
can actually use SQL commands to filter and choose fields, do calcs, etc. I
can also use code to externalize the spreadsheet to use, destination range,
etc.

This is really useful, except I've run into one problem.
Once I've run the Data Import, the source workbook is now locked. ie. if I
open it, I get a "Locked by another user (me)" message and it won't unlock
until I close the destination workbook.

There is a piece of the connection string that looks like this:
Mode=Share Deny Write;
This might be the culprit, but I can't find a list of other options anywhere
in the help.

Help?
Thanks



makulski

Import Data - from Excel
 
Figured it out.

The correct incantation is mode=read

For a list of mode options, see:
http://www.tech-archive.net/Archive/.../msg00003.html

makulski

Wrongo - Read access takes more than read
 
Turns out that didn't work after all.
Even though my connection string says "Read", after I do the Data Import,
the workbook is locked by another user (me).

Here is the full connection string in the query definition. I didn't write
all of this gobbledygook, this is the connection string that results from
just pointing at the data source using the "Data : Import External data" menu.

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data
Source=\\mylan\MyFile.xls;Mode=Read;Extended Properties="Jet OLEDB: Don 't
Copy Locale on Compact=False;HDR=YES;";Jet OLEDB:System database="";Jet
OLEDB:Registry Path="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking
Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk
Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System
Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale
on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False

Does anybody know how the connection string should/could be altered to not
lock up the source file?
Or is there any way to tell my destination workbook that I'm done using the
source file and let it go?

Very frustrating.
Thanks

"makulski" wrote:

Figured it out.

The correct incantation is mode=read


ward376

Wrongo - Read access takes more than read
 
Rather than using Data Import from the External data menu, you could
try using New Database Query from the same menu and choose Excel
Files* as the data source.This method uses ODBC/SQL to extract data.

Is there a reason you need to open the source file while the query is
connected? This can lead to other issues like memory leaks.

Cliff Edwards

makulski

And the answer is ... MaintainConnection
 
I seem to have things working now.
The MaintainConnection property of QueryTable lets my people go.

Here is the code that ultimately did the trick:


With Selection.QueryTable
.Connection = MyConnectString1 & Range("Folder") & Range("FileName")
& MyConnectString2
.CommandType = xlCmdSql
.CommandText = Array(SqlStatement)
.MaintainConnection = False
.Refresh BackgroundQuery:=False
End With



All times are GMT +1. The time now is 03:48 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com