PDA

View Full Version : استفاده از دستور shell با آدرس متغیر



ali190
دوشنبه 08 شهریور 1389, 15:56 عصر
باسلام و عرض خسته نباشید
میخواستم بدونم چطور میتونم از دستور shell با برای یک فایل با آدرس متغیر استفاده کنم؟
مثال :

Shell "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE c:\database.MDB"
به جای درایو \:c میخوام از آدرس
app.path+"\database.mdb" استفاده کنم ولی ارور میده بمن.
ممنون

M.T.P
دوشنبه 08 شهریور 1389, 16:08 عصر
سلام
یعنی اینطوری خطا میده؟


Shell "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE " & App.Path & "\database.MDB"

ali190
دوشنبه 08 شهریور 1389, 16:16 عصر
سلام
آره خطا میده
ببین خطای زیر رخ میده:

http://barnamenevis.org/forum/attachment.php?attachmentid=55050&stc=1&d=1283170496

میشه لطفآً خودتون تو سیستمتون یه تست بکنید؟
ممنون

M.T.P
دوشنبه 08 شهریور 1389, 16:34 عصر
مشکل از App.path نیست.
فقط در صورتی پارامتر رو قبول میکنه که دیتابیس در ریشه درایو باشه اگه تو فولدر باشه Error میده. :متفکر:

ali190
دوشنبه 08 شهریور 1389, 18:12 عصر
سلام
مشکل رو با سرچ در اینترنت و گفتن یک sample مشابه پیدا کردم:

location = Chr(34) + "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" + Chr(34)
file = Chr(34) + App.Path + "\milad.dll" + Chr(34)
Shell location + " " + file, vbHide
فقط یه سئوال:
این Chr(34) چیه؟
بعضی از جاها میبینم ازش استفاده میشه ، به چه دردی میخوره؟
ممنون

M.T.P
دوشنبه 08 شهریور 1389, 18:25 عصر
MsgBox Chr(34)
خب حتما برای Shell کردن با این روش نیازه که قبل از رشته علامت " باشه.
با تشکر.

xxxxx_xxxxx
دوشنبه 08 شهریور 1389, 19:03 عصر
این Chr(34) چیه؟
بعضی از جاها میبینم ازش استفاده میشه ، به چه دردی میخوره؟
ممنون
سلام،
به طور کلی وقتی پارامتر در پارامتر داشته باشیم مجبوریم از Chr(34) استفاده کنیم.
مثلاً تو همین دستورات بالا، شما به Shell می خواید پارامتر بدید و به MSACCESS.EXE هم می خواید پارامتر بدید.
پارامتر Shell همون MSACCESS.EXE هست.
پارامتر MSACCESS.EXE هم آدرس فایلی هست که می خوایم باز بشه.
چون پارامترها تو در تو هستند برای همین بهش میگم پارامتر در پارامتر.

حالا چرا به Chr(34) احتیاج هست؟ در واقع وقتی Type هر دو تا پارامتر از نوع رشته ای باشه (String) این مشکل به وجود میاد. پارامترهامون تو در تو هستند پس باید رشته هامون هم تو در تو باشند. اما شما نمی تونید با علامت " " رشته‌ای در رشته دیگر درست کنید. (Syntax دستور به هم میریزه). برای همین میایم از Chr(34) استفاده می کنیم که درواقع همون علامت " هست. تابع Chr یک کد اسکی میگیره و کاراکترش رو به عنوان خروجی بر میگردونه.
پس این کارو مجبوریم انجام بدیم فقط به خاطر اینکه Syntax دستور به هم نریزه.

موفق باشید/

alirezabahrami
سه شنبه 09 شهریور 1389, 08:56 صبح
سلام
مشکل رو با سرچ در اینترنت و گفتن یک sample مشابه پیدا کردم:

location = Chr(34) + "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" + Chr(34)
file = Chr(34) + App.Path + "\milad.dll" + Chr(34)
Shell location + " " + file, vbHide
فقط یه سئوال:
این Chr(34) چیه؟
بعضی از جاها میبینم ازش استفاده میشه ، به چه دردی میخوره؟
ممنون
سلام
دو سؤال:
1- اگر ويندوز در درايو C نصب نشده باشد و يا در حالت ديگر آفيس در درايو C نباشد ، آيا اين كد جواب ميدهد ؟
2-با توجه به اينكه OFFICE11 مربوط به آفيس 2003 است آيا برنامه شما قابليت اجرا بر روي سيستمي كه مثلاً آفيس 2007 بر روي آن نصب است را دارد؟
موفق باشيد

vbhamed
سه شنبه 09 شهریور 1389, 10:06 صبح
سلام

شما براي باز كردن هر فايلي بهتره از روش زير استفاده كني تا با ورژن نرم افزار مرتبط با اون فايل هم مشكل نداشته باشي

Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()

ShellExecute psForm.hwnd, "open", App.Path & "\Database.mdb", "", "", 0

End Sub

abas1388
سه شنبه 09 شهریور 1389, 12:02 عصر
سلام

شما براي باز كردن هر فايلي بهتره از روش زير استفاده كني تا با ورژن نرم افزار مرتبط با اون فايل هم مشكل نداشته باشي

Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()

ShellExecute psForm.hwnd, "open", App.Path & "\Database.mdb", "", "", 0

End Sub

سلام جناب vbhamed
من در نمونه ضميمه از كد پيشنهادي شما استفاده كرده ام ولي جهت باز كردن ديتابيس اكسس خطا صادر ميشود .
و يك سؤال ديگر آيا با كد فوق ميتوان ديتابيس را با پسوند dll. را باز كرد؟
با تشكر

ƒxmahdi
سه شنبه 09 شهریور 1389, 22:22 عصر
شما به جای کد


ShellExecute psForm.hwnd, "open", App.Path & "\Database.mdb", "", "",

از کد


ShellExecute Form1.hwnd, "open", App.Path & "\Database.mdb", "", "", 0


استفاده کن .