- PR -

多重接続時のアプリケーションエラー

投稿者投稿内容
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2003-10-31 13:31
Jittaさん、返答ありがとうございました。

Jittaさんの書き込みを引用-----------------------------------

実行中、EXCELプロセスが2つできていることを確認したので、
オブジェクトが正しく参照されているなら、複数のアクセスがあっ
ても値が混合するなどの問題はないと判断します。

-------------------------------------------------------------
私の場合、問題はズバリ、これだと思います。
実行中にEXCELプロセスは2つ出来ていますがオブジェクトが正しく参照されていないから
こういう結果になっているのだと思います。
私の場合、どうやら
一時表→本番用シート
の部分でつまずいているようです。
抜粋してロジックを載せてみました。

Dim objExcelApp As New Excel.Application
objExcelApp = CType(CreateObject("Excel.Application"), Excel.Application)
Dim objExcelBook As Excel.Workbooks = objExcelApp.Workbooks
Dim book As Excel.Workbook = objExcelBook.Open("C:\TestFolder\TESTFile.xls")
Dim objExcelSheets As Excel.Sheets = book.Worksheets

With objExcelApp
.Sheets(ExcelFORMAT2).Select()
.Range(.Sheets(ExcelFORMAT2).cells(1, 1), .Sheets(ExcelFORMAT2).cells(1, 1)).Copy()
.Sheets(ExcelFORMAT1).select()
.Range(.Sheets(ExcelFORMAT1).cells(1, 1), .Sheets(ExcelFORMAT1).cells(1, 1)).PasteSpecial(Excel.XlPasteType.xlPasteValues)
End With

OPENするファイルはユーザーによって異なります。
上記のようにEXCELFORMAT2を一時表とし、そこにDBから取得したデータをとりあえず
入れてしまい、出力されたEXCELFORMAT2のデータをコピーして
EXCELFORMAT1の本番用シートに値貼り付けしています。
もしかしたら2台のPCで実行した時に編集を行う際、同じEXCELFORMAT2のシートを見に行っている可能性があります。
(ExcelFORMAT2,ExcelFORMAT1ともにシート名は固定のものです。)
でも複数PC立ち上げたらフォルダも別々のを見に行くようにしているので
ファイルも別々のものに編集してくれると思ったのですが・・。
だめなんですかね・・。こういうやり方は・・。




Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-31 13:56
引用:

ななさんの書き込み (2003-10-31 13:31) より:

Dim objExcelApp As New Excel.Application
objExcelApp = CType(CreateObject("Excel.Application"), Excel.Application)
Dim objExcelBook As Excel.Workbooks = objExcelApp.Workbooks
Dim book As Excel.Workbook = objExcelBook.Open("C:TestFolderTESTFile.xls")
Dim objExcelSheets As Excel.Sheets = book.Worksheets

With objExcelApp
.Sheets(ExcelFORMAT2).Select()
.Range(.Sheets(ExcelFORMAT2).cells(1, 1), .Sheets(ExcelFORMAT2).cells(1, 1)).Copy()
.Sheets(ExcelFORMAT1).select()
.Range(.Sheets(ExcelFORMAT1).cells(1, 1), .Sheets(ExcelFORMAT1).cells(1, 1)).PasteSpecial(Excel.XlPasteType.xlPasteValues)
End With


 う〜ん、問題はPasteSpecialでしょう。これって、クリップボード使いません?クリップボードは、マシン(つまり、サーバ)に1つです。

 それから、
Dim objExcelApp As New Excel.Application
ここ、newいりません。下の行でCreateしていますから。
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2003-11-04 11:11
Jittaさん返答ありがとうございました。
クリップボードの件は本当に初歩的なことですが、正直、私は知りませんでした。
やっぱり、二つ同時にというのは無理そうなのでフラグかなにかで
判断させて、強制的に1つしか接続出来ないように作り変えようと思います。
でも非常に良い勉強になりました。
返答を下さった方々、ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-04 16:28
 クリップボードについてですが、いい加減なことを書いていました。「PCに1つ」と書いた根拠は、SunOSマシンで/tempディレクトリにファイルができていたことに由来します。したがって、Windowsマシンでは事情が違います(同じようなファイルはできていなかったと思う)。

 そこでMSDN、サポート情報を「クリップボード clipboard」をキーワードに探してみましたが、該当するような記述は見つけられませんでした。しかし、プラットフォームSDKの「OpenClipboard」に、『検討の目的でクリップボードを開き、他のアプリケーションがクリップボードの内容を変更できないようにします。』という記述があります。ここでクリップボードはプロセス間通信の目的に使われているため、やはり「PC(正しくはOS)に1つ」なのかもしれません。

スキルアップ/キャリアアップ(JOB@IT)