VBA에서 다른 데이터베이스를 제어하려고 할 때 간헐적인 오류가 발생합니다.

StackOverflow https://stackoverflow.com/questions/70417

  •  09-06-2019
  •  | 
  •  

문제

다음 코드가 있습니다.

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing

제가 실험하고 있는 문제는 Access가 다른 데이터베이스에 포커스를 설정할 수 없다는 팝업 메시지입니다.코드에서 볼 수 있듯이 다른 mdb에서 서브루틴을 실행하고 싶습니다.이를 달성하기 위한 다른 방법이 있으면 감사하겠습니다.

저는 MS Access 2003을 사용하고 있습니다.

간헐적으로 발생하는 오류입니다.한 달에 한 번만 실행되는 프로덕션 코드이기 때문에 재현이 매우 어려우며 현재로서는 정확한 텍스트와 숫자를 알려드릴 수 없습니다.이런 일이 일어난 지 두 번째 달이다.

누군가가 이 데이터베이스나 다른 데이터베이스로 작업할 때 이런 일이 발생할 수 있다고 생각됩니다.

데이터 흐름은 한 데이터베이스에서 한 달에 한 번씩 모든 '프로젝트'를 업데이트한 다음 이 정보를 다른 데이터베이스에서 사용할 수 있도록 하는 것입니다.

어쩌면 '루틴' 코드의 첫 번째 줄 때문일 수도 있습니다.vbno = msgbox ( "업데이트하고 싶습니까?", vbyesno, "update") 인 경우 함수 종료

MsgBox 없이 또 다른 서브루틴을 만들겠습니다.

나는 이 행동을 재현할 수 있었습니다.호출된 데이터베이스로 포커스를 이동해야 하는데 사용자가 첫 번째 데이터베이스에 포커스([ALT]+[TAB])를 설정한 경우에 발생합니다.'해결책'은 사용자를 교육하는 것이 었습니다.


간헐적으로 발생하는 오류입니다.한 달에 한 번만 실행되는 프로덕션 코드이기 때문에 재현이 매우 어려우며 현재로서는 정확한 텍스트와 숫자를 알려드릴 수 없습니다.이런 일이 일어난 지 두 번째 달이다.

누군가가 이 데이터베이스나 다른 데이터베이스로 작업할 때 이런 일이 발생할 수 있다고 생각됩니다.

데이터 흐름은 한 데이터베이스에서 한 달에 한 번씩 모든 '프로젝트'를 업데이트한 다음 이 정보를 다른 데이터베이스에서 사용할 수 있도록 하는 것입니다.

어쩌면 '루틴' 코드의 첫 번째 줄 때문일 수도 있습니다.vbno = msgbox ( "업데이트하고 싶습니까?", vbyesno, "update") 인 경우 함수 종료

MsgBox 없이 또 다른 서브루틴을 만들겠습니다.


나는 우리 개발 데이터베이스에서 이것을 시도했고 작동했습니다.다른 코드도 개발 중에 잘 작동하므로 이는 아무 의미가 없습니다.

도움이 되었습니까?

해결책 3

'개발'에서 오류를 재현할 수 있게 되었습니다.

"다른 애플리케이션이 사용 중이기 때문에 이 작업을 완료할 수 없습니다.활성화하려면 '전환'을 선택하세요...."

메시지가 매우 빠르게 깜박이기 때문에 메시지의 나머지 부분을 실제로 볼 수 없습니다.이 오류는 두 데이터베이스 간의 '전환'으로 인해 발생한 것 같습니다.사용자 교육을 통해 이러한 현상이 중단되기를 바랍니다.

필립, 당신의 대답은 물론 맞습니다.미리 '루틴'을 개발하지 않았다면 나는 그 길을 선택했을 것입니다.

"저는 이 행동을 재현할 수 있었습니다.호출된 데이터베이스로 포커스를 이동해야 하는데 사용자가 첫 번째 데이터베이스에 포커스([ALT]+[TAB])를 설정한 경우에 발생합니다.'해결책'은 사용자를 교육하는 것이었습니다." Windows에서는 사용자가 응용 프로그램을 전환하는 것을 방지하는 것이 불가능하므로 주제를 닫고 싶습니다.

다른 팁

이 오류 메시지는 데이터베이스 중 하나의 상태와 연결되어 있는 것 같습니다.여기에서는 Jet 연결 및 Access 개체를 사용하고 있으며 여러 가지 이유로(다중 사용자 환경, LDB 잠금 파일을 삭제할 수 없는 등) 활성 데이터베이스를 제대로 닫고 다른 데이터베이스를 열지 못할 수도 있습니다.따라서 내 생각에 해결책은 Jet 엔진을 잊어버리고 다른 연결을 사용하여 "다른" 데이터베이스의 데이터를 업데이트하는 것입니다.

"데이터 흐름은 한 데이터베이스에서 한 달에 한 번 모든 '프로젝트'를 업데이트한 다음 이 정보를 다른 데이터베이스에서 사용할 수 있도록 하는 것입니다."라고 말하면 "루틴"의 역할은 SQL을 통해 일부 데이터를 업데이트하는 것이라고 가정합니다. 지침 또는 이에 상응하는 레코드세트 업데이트.

다른 데이터베이스에 대한 연결을 열고 (1) 해당 SQL 명령을 보내거나 (2) 레코드 세트를 열고 요청된 업데이트를 수행하여 해당 업데이트를 수행해 보는 것은 어떻습니까?

예를 들어 한 가지 아이디어는 다음과 같습니다.

Dim cn as ADODB.connexion, 
    qr as string, 
    rs as ADODB.recordset

'qr can be "Update Table_Blablabla Set ... Where ...
'rs can be "SELECT * From Table_Blablabla INNER JOIN Table_Blobloblo  

set cn = New ADODB.connexion
cn.open

You can here send any SQL instruction (with command object and execute method) 
or open and update any recordset linked to your other database, then

cn.close

이는 ODBC 연결(및 DAO.recordsets)을 통해서도 수행할 수 있으므로 원하는 개체를 선택할 수 있습니다.

함수를 실행하는 다른 방법을 원할 경우 다음을 시도해 보십시오.

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing

어디 '마이매크로'에는 '의 동작이 있습니다.실행코드'를 Working.mdb에서 실행하려는 함수 이름으로 바꾸세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top