الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحديد مكان ملف

مغلق
بدأه مفرج في 13 ديسمبر 2001 · 18 رد · 1,857 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اخواني الكرام ارجو مساعدتي

صممت قاعدة بيانات اكسس وجعلت لها كلمة سر وستطعت فتحها بواسطة الفجيول وتجاوز كلمة السر والمشكلة عندي تحديد موقع مشغل الاكسس MSACCESS.EXE حيث يختلف مكانه حسب تركيب الاوفس ارجو مساعدتكم في الطريقة لجلب اسم البرنامج والمسار

ارجو المعذرة ودمتم

من سار على الدرب وصل

#2

بس عندما تستعمل الفيجول لا داعي لتعرف اين مكان الاكسيس بالبط وين ولا داعي لأن يكون مركب على الجهاز اصلا

اما اذا كنت تود تشغيل الاكسي في جميع الاحوال سامدك بكود البحث غذا ان شاء الله تعالى لنو الوقت الا يسمح لي الحين

لك تحياتي

لا يتعلم العلم كل مستحي او مستكبر

#3

اخي طارق موسى

جزاك الله عنا خيرا

انا اريد فتح قاعدة البيانات وتشغيلها من الاكسس بعد تجاوز كلمة السر فقط مهمة الفجيول فقط فتح القاعدة وتجاوز كلمة السر

من سار على الدرب وصل

#4

اخوتي الكرام الا يوجد جواب

من سار على الدرب وصل

#5

ليه متعب نفسك .....؟؟؟

كلام رسمي :

يحتوي الاكسيس على حزء يمكنك من خلاله ان تصمم واجهه للبرنامج وتضع فيها نموذج لادخال كلمة السر وهذه اللغة قريبة جدا من الفجول بيسك واسمها ( فيجول بيسك ابليكيشن ) Visual Baisc Aplacation وأما مسألة ان تبحث عن الاكسيس فلا تقم بذلك لأن ( الشغله ) راح تطول .. لكن قم بوضع قاعدة البيانات وماف الاكسيس التنفيذي ومستلزماته بملف Setup لكي ينفذها المستخدم وينزل عنده البرنامج .

لكي تتضح الصورة اكثر جرب المثال وهو قاعدة بيانات اسمها

Northwind.mdb

وأتأسف شديد الاسف ان كنت تريد غير ذلك .

اخوك

#6

اخي MANSUR

اشكرك على الرد

المشكلة عندي قاعدة بيانات اكسس ولا اريد احد يفتح ملفاتها او يجلب الملفات من اي ف=قاعدة بيانات أخرى فوضعت لها كلمة سر والغيت الشفت وصرت افتحها عن طريق الفجيول بيسك حيث يستطيع ان يتجاوز كلمة السر من الفجيول بيسك اما المستخدم فلا يعرف كلمة السر وبهذا انتهت المشكلة الاولى

اما المشكلة الثانية هي يجب ان تعرف موقع ال MSaccess حيث يختلف تركيبه من جهاز الاخر فقط

وجت خيارا ان يضع المستخدم المسار للاكسس ولكنها طريقة صعبة على بعض المستخدمين .

ولكم جزيل شكري وامتناني

من سار على الدرب وصل

#7

معليش

انت سويت ملف فيجول بيسك مهمته انه يدقق كلمة السر Password

وبعدين يشغل القاعدة يعني كذا .

If password = "1234" Then
Shell "C:Program FilesMicrosoft OfficeOfficeMsAccess.exe  Mydata.mdb"
exit sub
end if
Msgbox " كلمة السر خاطئة"

ايه بس معنا ذلك انك تحتاج ترفق الملفات اللازمة لتشغيل الفجول وهي المكتبات .. و الاكسيس مشاكله كثيرة ابسطها ان النسخه التي ترسلها تكون نفذتها على 2000 فالشخص الذي لديه 97 لن تعمل عنده .. واذا نفذتها على 97 فالشخص الذي لديه 2000 احيانا تلخبط معه ولا تشتغل بالطريقة الصحيحة ..

على العموم انت نفذ انت كود فتح القاعدة عن طريق فورم ضعه في بداية التشغيل احسن بدل ما تستعمل ملفات فجول بيسك ..

انت اذا ما تتقن اللغة VBA ممكن اجيب لك الكود وهو شبيه بالفجول بيسك جدا .

تحياتي

اخوك

#8

انا عملت

Private Sub Command1_Click()

Dim RetVal

RetVal = Shell("D:Microsoft OfficeOffice10MSACCESS.EXE D:XXXHOME.MDB", 1)

SendKeys "" 'كلمة سر الاكسس

SendKeys "{ENTER}"

DoEvents: DoEvents

SendKeys "11" ' كلمة سر القاعدة

SendKeys "{ENTER}"

DoEvents: DoEvents

Unload Me

End Sub

وتم عمل البرنامج بشكل ممتاز والمشكل ان هذا المسار

D:Microsoft OfficeOffice10

يختلف حسب تركيب الاكسس

اما تركيب الفجيول وغيره فهي ليست المشكلة

البرنامج يشترط اكسس 2000 مركب على الجهاز

من سار على الدرب وصل

#9

طيب الله يوفقك .

احسن شي خلي في مسار افترضي للاكسيس واذا ما لقاه يطلب من المستخدم تحديد مكانه ؟

;)

#10

جرب هذا الكود :

Private Declare Function GetModuleHandle& Lib "kernel32" Alias _
   "GetModuleHandleA" (ByVal FileName$)

Private Declare Function GetModuleFileName& Lib "kernel32" Alias _
   "GetModuleFileNameA" (ByVal hModule&, ByVal FileName$, ByVal _
      nSize&)

Private Sub أمر0_Click()
Dim hModule&, Buffer$, Length&, Msg$
   hModule& = GetModuleHandle("MSACCESS.EXE")
   Buffer$ = Space$(255)
   Length& = GetModuleFileName(hModule&, Buffer$, Len(Buffer$))
   Buffer$ = Left$(Buffer$, Length&)
   Msg$ = "Startup path and filename: " & Buffer$
   MsgBox Msg$

End Sub

أو هذا الكود :

الحصول على مسار ملف تنفيذي بتمرير لاحقة ملف

Option Compare Database
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
   KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) _
   And (Not SYNCHRONIZE))
Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or _
   KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _
   KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY _
   Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) _
   And (Not SYNCHRONIZE))
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

Private Const ERROR_SUCCESS = 0&

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
   Alias "RegOpenKeyExA" (ByVal hKey As Long, _
   ByVal lpSubKey As String, ByVal ulOptions As Long, _
   ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
   Alias "RegQueryValueExA" (ByVal hKey As Long, _
   ByVal lpValueName As String, ByVal lpReserved As Long, _
   lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long

Function Getfiles(اللاحقة As String) As String
On Error GoTo errorhandler:
  Dim vwbtmp$
  Dim wbrows$
  Dim exeplace As Integer
  Dim lgnType As Long


  vwbtmp$ = sdaGetRegEntry("HKEY_CLASSES_ROOT", "." & اللاحقة, "", lgnType)
  vwbtmp$ = Left$(vwbtmp$, (Len(vwbtmp$) - 1))
  vwbtmp$ = vwbtmp$ + "shellopencommand"
  wbrows$ = sdaGetRegEntry("HKEY_CLASSES_ROOT", vwbtmp$, "", lgnType)
  exeplace = (InStr(LCase(wbrows$), ".exe"))
  wbrows$ = Left$(wbrows$, exeplace + 3)
  If Mid$(wbrows$, 1, 1) = Chr$(34) Then
  wbrows$ = Right$(wbrows$, (Len(wbrows$) - 1))
  End If
  Getfiles = wbrows$

errorhandler:
  Exit Function

End Function


Function sdaGetRegEntry(strKey As String, _
   strSubKeys As String, strValName As String, _
   lngType As Long) As String
On Error GoTo sdaGetRegEntry_Err

  Dim lngResult As Long, lngKey As Long
  Dim lngHandle As Long, lngcbData As Long
  Dim strRet As String

  Select Case strKey
    Case "HKEY_CLASSES_ROOT": lngKey = &H80000000
    Case "HKEY_CURRENT_CONFIG": lngKey = &H80000005
    Case "HKEY_CURRENT_USER": lngKey = &H80000001
    Case "HKEY_DYN_DATA": lngKey = &H80000006
    Case "HKEY_LOCAL_MACHINE": lngKey = &H80000002
    Case "HKEY_PERFORMANCE_DATA": lngKey = &H80000004
    Case "HKEY_USERS": lngKey = &H80000003
    Case Else: Exit Function
  End Select

  If Not ERROR_SUCCESS = RegOpenKeyEx(lngKey, _
     strSubKeys, 0&, KEY_READ, _
     lngHandle) Then Exit Function

  lngResult = RegQueryValueEx(lngHandle, strValName, _
     0&, lngType, ByVal strRet, lngcbData)
  strRet = Space(lngcbData)
  lngResult = RegQueryValueEx(lngHandle, strValName, _
     0&, lngType, ByVal strRet, lngcbData)

  If Not ERROR_SUCCESS = RegCloseKey(lngHandle) Then _
     lngType = -1&

  sdaGetRegEntry = strRet

sdaGetRegEntry_Exit:
  On Error GoTo 0
  Exit Function

sdaGetRegEntry_Err:
  lngType = -1&
  MsgBox Err & ">  " & Error$, 16, _
     "GenUtils/sdaGetRegEntry"
  Resume sdaGetRegEntry_Exit

End Function

Private Sub أمر0_Click()
MsgBox Getfiles("ZIP")
End Sub

ولك تحياتي

#11

يعطيك العافية اخوي ابو حمود .

بس ممكن سؤال .. هل الكود الاول على الـ VBA يعني في الاكسيس؟

لأني اشوف (امر0 )

#12

الاخ/ ابو حمود ... فكرة ممتازة ولكن الاتوافقني ان استخدام الدالة FindExecutable يجعل الامر مباشرا..

ايضا اعتقد انه يمكن تنفيذ المهمة دون الحاجة للعثور على مسار الآكسس وذلك بالاعتماد على الدالة ShellExecute

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 Command1_Click()
 ShellExecute hwnd, "Open", "C:Mydata.mdb", "", "", 1
End Sub
#13

الأخ منصور

نعم الكود على الأكسس ولكن في الأسطر الثلاثة الأخيرة أزل الأول والثالث واستخدم الأوسط فقط ولا اظن أن هذا يخفى عليك :)

الأخ Read Only

أنا لا اعرف الجواب في موضوعه ولكنني رأيته يطلب معرفة مسار الملف التنفيذي للأكسس فكتب له الكود الذي عندي .

جربت الكود الذي كتبته لكن يشغل الأكسس واظن أن طلبه مختلف .

وللجميع التحية

#14

الاخ/ابو حمود

لقد كان الاخ السائل يريد تشغيل الملف D:XXXHOME.MDB باستخدام الدالة Shell وهذا يستوجب تمرير المسار الآكسس قبل مسار الملف ولكن باستخدام الدالة ShellExecute سيتكفل النظام بالعثور على البرنامج المشغل بقراءة القيمة من الريجيستري ثم يقوم بتمرير ملف القاعدة كوسيطه للبرنامج المشغل.فيتم حينها تشغيل الملف باستخدام برنامج الآكسس..

ولك تحياتي..

#15

يعطيك العافية اخوي ابو حمود ...

بس انا استغربت انه يكون على الاكسيس لفحص لفحص وجود الاكسيس .

:) ولكن ما دام يمشي مع الـ VB

الله يعطيك العافية على العموم .

#16

اخوي ابوحمود و منصور وريد اونلي

شكركم جميعا على مساعدتكم لي

اخوي ابو حمود جربت الكودين على الاكسس وعملا بشكل ممتاز ولكنهما لم يعمل على الفجيول بسك وهو المطلوب

انا شكر لك بمجهودك في المنتديين ولا اقول الاجزاك الله خيرا

في

Private Sub أمر0_Click()

MsgBox Getfiles("ZIP")

End Sub

كتبت mdb بدل zip

اخو ريد اونلي لم اجرب الكود وساخبرك لاحقا وشكرا لكم جميعا

من سار على الدرب وصل

#17

اشكركم على هذا المجهود وقد عمل الكود بنجاح

وكذلك كود ابو احمود عمل على الفجيول بيسك

اشكركم جميعا

من سار على الدرب وصل

#18

الأخ مفرج

الكود الأول الظاهر أنه يظهر مسار الملف التنفيذي من نفس البرنامج الذي يشغله يعني لا فائدة منه :(

أما الثاني فأزل السطر :

Option Compare Database

من أعلى الكود واجعل الكود في الوحدة النمطية الخاصة بالنموذج وليس في وحدة نمطية عامة وقد جربته في VB وعمل معي .

ولك تحياتي

#19

كما قلت وقد عمل بنجاح

اشكرك الله يوفك لما يحب الله ويرضى

من سار على الدرب وصل

هذا الموضوع مغلق.

مواضيع مشابهة