كيف يمكنني تجاوز بدء التشغيل الوصول MS عند استخدام OLE؟
-
22-07-2019 - |
سؤال
وأنا أحاول أن تفعل تصدير أكس الآلي من قاعدة بيانات الوصول باستخدام C # و OLE. كل شيء يعمل بشكل ممتاز إلا أن يتم عرض نموذج بدء التشغيل و لن تغلق دون تدخل المستخدم.
وهنا هو ما أقوم به حتى الآن:
objAccess = CreateObject("Access.Application");
objAccess.OpenCurrentDatabase("C:\\MYDB.mdb", true); //true = open in exclusive mode
objAccess.ExportXML(0, "TestTable", "c:\\test.xml");
objAccess.CloseCurrentDatabase();
objAccess.Quit();
المحلول
وبقدر ما أعرف الطريقة الوحيدة هي استخدام رمز التبديل / nostartup على MSACCESS.EXE
وهكذا لديك لاستخدام قذيفة القيادة للحصول على كائن وصول
ولدي وظيفة التي تفتح قاعدة بيانات وإرجاع الكائن (وهذا هو رمز VBA التي سيكون لديك لتحويل إلى C #)
Private Function OpenDatabaseWithShell(pDatabaseFullPath As String) As Access.Application
Dim AccObj As Access.Application
On Error GoTo ErrorHandler
Set OpenDatabaseWithShell = Nothing
Dim cmd As String
On Error Resume Next
' basically build full msaccess.exe path and append database name and command switches
cmd = SysCmd(acSysCmdAccessDir) & "MSAccess.exe """ & psDatabaseFullPath & """"
cmd = cmd & " /nostartup /excl"
'start ms access with shell
Shell PathName:=cmd
Do 'Wait for shelled process to finish.
Err = 0
Set AccObj = GetObject(pDatabaseFullPath)
Loop While Err <> 0
On Error GoTo ErrorHandler
'return access object
Set OpenDatabaseWithShell = AccObj
NormalExit:
Exit Function
ErrorHandler:
'error logging here
Exit Function
End Function
وتحرير: وهنا صلة لبعض رمز VB.NET أن يفعل شيئا مماثلا. انزل الى "إنشاء نموذج كامل المشروع. NET ل Visual Basic" وابحث عن وظيفة "ShellGetDB"
نصائح أخرى
وينبغي أن لا يكون من الضروري فتح الوصول إلى إخراج الجدول إلى XML، على سبيل المثال، في VBScript:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adPersistXML = 1
Dim strCon, cn, rs
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source=" & "C:\Docs\LTD.mdb"
cn.Open strCon
rs.Open "Select * from Table1", cn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
rs.MoveFirst
rs.Save "C:\Docs\Table1.xml", adPersistXML
End If
rs.Close
cn.Close
لا تنتمي إلى StackOverflow