اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

قام بنشر (معدل)

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

 

تحية طيبة لكل الاخوة والاساتذة الكرام 

أما بعد ..

 

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

وعند استبدال الملف من الموقع بملف اخر بنفس الاسم فان البرنامج يستطيع تحميله من نفس الرابط المزود به مسبقاً 

هل هنالك طريقة ما لفعل ذلك؟

 

وشكراً ..

 

تم تعديل بواسطه sandanet
قام بنشر

جرب ان تضع

   عادي----url  

داخل النموزج لكي يزهب الي رابط التحميل عند الضغط عليه

---------------------------------------------------------------------

وعند تغير الملف يستحسن ان يكن بنفس الاسم في نفس الصفح في الموقع

قام بنشر

نعم بالطبع يجب ابقاء الملف بنفس الاسم والامتداد عند تغييره بواحد اخر .. لكن اين يمكن انشاء رابط ثابت للملف؟؟ على اي موقع مثلاً؟؟ 

قام بنشر
3 ساعات مضت, sandanet said:

نعم بالطبع يجب ابقاء الملف بنفس الاسم والامتداد عند تغييره بواحد اخر .. لكن اين يمكن انشاء رابط ثابت للملف؟؟ على اي موقع مثلاً؟؟ 

في هذه الحالة يلزمك حساب على موقع استضافة مجانية أو مدفوعة

http://www.hostingadvice.com/how-to/free-web-hosting/

  • Like 1
قام بنشر (معدل)
7 ساعات مضت, sandanet said:

نعم بالطبع يجب ابقاء الملف بنفس الاسم والامتداد عند تغييره بواحد اخر .. لكن اين يمكن انشاء رابط ثابت للملف؟؟ على اي موقع مثلاً؟؟ 

ھذا فقط تفكير

اعمل فولدر وقم بعمل رابط للفولدر
وبعدين احتمال ان تقدر تتغير مافي داخلة بنفس الرابط

للتجربة : اليك هذا الرابط به صورة فقط

https://drive.google.com/drive/folders/0Bw7lKz1UIsW1MEdadDh0OVBWVmM
اعمل تنزيل له وبعدين اي بعد تعمل التنزيل راح اعطيك نفس الرابط وبه صور اخر غير هذا

تم تعديل بواسطه Shivan Rekany
  • Like 1
قام بنشر

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

 

تحياتي لكم

  • Like 1
قام بنشر
12 دقائق مضت, sandanet said:

وذلك عن طريق عمل مجلد واخذ رابطه ووضعه في البرنامج حيث يمكني لاحقاً تغيير مابداخل المجلد فقط .

نعم بالضبط

الان انا اضفت صورة اخر باسم اصدار جديد مثلا

وتقدر تنزل الصورة في نفس الرابط

اي يعني تقدر تتغير او تضيف اليه اي ملف بنفس المسار حسب رغبتك

والله يعلم

  • Like 2
قام بنشر

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

قام بنشر
4 ساعات مضت, sandanet said:

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

السلام عليكم شباب:smile:

 

أخي أوس ، خلينا من اللف والدوران ، والاشارة بين الروابط :wink2:

إذن الفكرة ان كل يرنامج سيكون لديه الصلاحية في الدخول لهذه الصفحة وانزال البرنامج المرفق فيها ، بغض النظر عن الرابط ،

اذا الجواب نعم ، ضع برنامجك في موقع معين ، واعطنا صلاحية تغيير الملف ، وخلينا نجرب عليه:smile:

 

جعفر

  • Like 1
قام بنشر

استاذي الكبير @jjafferr كنت انتظر رأيك منذ مدة .. انا فكرتي ببساطة هو جعل البرنامج قابل للتحديث عن طريق الانترنت يعني مثلاً عندما تنتهي الفترة التجريبية للبرنامج فان المستخدم يستطيع تحديث البرنامج عن طريق زر امر في النموذج حيث يقوم بانزال ملف mde صغير يفعل له البرنامج .. طبعاً الفكرة هي ان كل شخص يملك البرنامج يستطيع تنزيل الملف لكن فقط من قام بشراء البرنامج يستطيع تفعيله عن طريق ذلك الملف.

 

في الحقيقة لازلت لا املك ملف لتفعيل البرنامج حتى اقوم برفعه افكر في عمله لاحقاً والان لايهم فيمكن استعمال اي ملف mde للتجربة 

مبدئياً المشكلة تكمن في انه لو تم رفع الملف على google dive  مثلاً فان الموقع ينشئ رابط ديناميكي للملف يتم حذفه بمجرد تغييرك للملف بواحد آخر حتى وان كان يحمل نفس الاسم والامتداد وهذا يسبب مشكلة لان الرابط يجب ان يكون مثبت تحت زر امر في البرنامج الموجود لدى العملاء بهذا الشكل مثلاً "https://drive.google.com/drive/my-drive/Activation.mde

 

لو يتم رفع الملف على استضافة سواء كانت مجانية او مدفوعة فستكون مشكلة ايضاً لان الاستضافة المجانية لن تدوم والاستضافة الدفوعة مرهونة بفترة الاشتراك ايضاً .. لذلك كنت اود ان تطبق الفكرة على استضافة دائمية مثل google drive لكن كما اشرت مسبقاً فان الموقع لايعطيك رابط ثابت 

قام بنشر

بفضل الله أولاً ومن ثم بفضل فكرة استاذي الكبير @Shivan Rekany تمكنت من ايجاد الكود التالي مع بعض التعديلات عليه ليقوم بالمهمة المطلوبة

 

Sub DownloadUpdate()
Dim FileNum As Long
Dim FileData() As Byte
Dim MyFile As String
Dim WHTTP As Object
Dim str_folder As String

On Error Resume Next

myIp = "www.google.com"

strCommand = "%ComSpec% /C %SystemRoot%\system32\ping.exe -n 1 -w 500 " & myIp & " | " & "%SystemRoot%\system32\find.exe /i " & Chr(34) & "TTL=" & Chr(34)
strPing = fShellRun(strCommand)

If strPing = "" Then
MsgBox "تحقق من اتصالك بالانترنت لكي يتم تنزيل الملف", vbCritical, "فشل التحديث"

Else

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5")
If Err.Number <> 0 Then
Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
End If
On Error GoTo 0

MyFile = "https://drive.google.com/drive/folders/0B9STtJY2DhAoQ1JET3F5N3NiMDQ"

WHTTP.Open "GET", MyFile, False
WHTTP.send
FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

If Dir("C:\MyDownloads", vbDirectory) = Empty Then MkDir "C:\MyDownloads"

FileNum = FreeFile
Open "C:\MyDownloads\Activation.mde" For Binary As #FileNum
Put #FileNum, 1, FileData
Close #FileNum

MsgBox " [ C:\MyDownloads ]تم تنزيل ملف التفعيل في المسار التالي", vbInformation + vbMsgBoxRight, "تنبيه"

str_folder = "C:\MyDownloads"  ' folder to open

Call Shell("explorer.exe " & str_folder, vbNormalFocus)

DoCmd.Quit

End If

 

  • Like 3
قام بنشر

استاذ @sandanet عند تنفيذ الكود ظهر هذا الخطأ 

وقد تم اضافة هاتين الجملتين الى الكود وعمل بنجاح والحمد لله 

Dim fShellRun As Object

Set fShellRun = CreateObject("Wscript.Shell")

strPing = fShellRun.Run(strCommand)

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

 

wrong1.jpg

  • Like 3
قام بنشر (معدل)

استاذي @أبو عبدالله الحلوانى اعتذر عن هذا الخطأ الغير مقصود فنسيت ان اضيف التالي 

Option Explicit
Option Compare Database
Dim strPing As String
Dim strCommand As String
Dim myIp

والكود يعمل لدي بنجاح على اكسس 2007 وسأقوم بتجربته لاحقاً على اكسس 2003 ايضاً ان شاء الله

 

تم تعديل بواسطه sandanet
  • Like 2
قام بنشر (معدل)

اليكم الملف 
تم تجربة بنجاح على اوفيس 2010 
وعملت بها بعض اضافات و مسحت کود التأکید الانترنیت لأن ما اشتغل عندی حین عدم وجود الانترنیت وعگیت ھدول الرسائل

22.PNG.973960b25e21f2017e45847aea8ed319.PNG و Capture.PNG.254390060ff337a66f16e33be9b6e6ad.PNG

هذا هو الكود لنموذج التنزيل اوبديت للبرامج

Option Compare Database
Option Explicit
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long ' لتأکيد على اتصالك بالانترنيت

Sub DownloadUpdate()
Dim FileNum As Long
Dim FileData() As Byte
Dim MyFile As String
Dim WHTTP As Object
Dim str_folder As String
Dim fShellRun As Object

Set fShellRun = CreateObject("Wscript.Shell")

On Error Resume Next

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5")
If Err.Number <> 0 Then
Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
End If
On Error GoTo 0

MyFile = "https://drive.google.com/drive/folders/0B9STtJY2DhAoQ1JET3F5N3NiMDQ"

WHTTP.Open "GET", MyFile, False
WHTTP.send
FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

If Dir("C:\MyDownloads", vbDirectory) = Empty Then MkDir "C:\MyDownloads"

FileNum = FreeFile
Open "C:\MyDownloads\Activation.mde" For Binary As #FileNum
Put #FileNum, 1, FileData
Close #FileNum

            DoCmd.OpenForm "frmrisale", acNormal
            Forms!FrmRisale.TimerInterval = 1000
            Forms!FrmRisale!MyTxt.Caption = " [ C:\MyDownloads ]تم تنزيل ملف التفعيل في المسار التالي "
            Forms!FrmRisale!MyTxt.TopMargin = 100

str_folder = "C:\MyDownloads"  ' folder to open

Call Shell("explorer.exe " & str_folder, vbNormalFocus)

'DoCmd.Quit

 End Sub
Private Sub Command0_Click()
    If GetIPAddress <> "127.0.0.1" Then
            Call DownloadUpdate
        Else
            DoCmd.OpenForm "frmrisale", acNormal
            Forms!FrmRisale.TimerInterval = 1000
            Forms!FrmRisale!MyTxt.Caption = "انت غير متصل بالانترنيت .. تأكد من اتصالك بالانترنيت وحاول مجدداً  "
            Forms!FrmRisale!MyTxt.TopMargin = 100
    End If

End Sub

وهذا فانكشن للتأكيد على وجود الانترنيت

Option Compare Database
Option Explicit

Public Const MIN_SOCKETS_REQD As Long = 1
Public Const WS_VERSION_REQD As Long = &H101
Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Public Const SOCKET_ERROR As Long = -1
Public Const WSADESCRIPTION_LEN = 257
Public Const WSASYS_STATUS_LEN = 129
Public Const MAX_WSADescription = 256
Public Const MAX_WSASYSStatus = 128
Public Type WSAData
    wVersion As Integer
    wHighVersion As Integer
    szDescription(0 To MAX_WSADescription) As Byte
    szSystemStatus(0 To MAX_WSASYSStatus) As Byte
    wMaxSockets As Integer
    wMaxUDPDG As Integer
    dwVendorInfo As Long
End Type
Type WSADataInfo
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * WSADESCRIPTION_LEN
    szSystemStatus As String * WSASYS_STATUS_LEN
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As String
End Type
Public Type HOSTENT
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLen As Integer
    hAddrList As Long
End Type
Declare Function WSAStartupInfo Lib "WSOCK32" Alias "WSAStartup" (ByVal wVersionRequested As Integer, lpWSADATA As WSADataInfo) As Long
Declare Function WSACleanup Lib "WSOCK32" () As Long
Declare Function WSAGetLastError Lib "WSOCK32" () As Long
Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA As WSAData) As Long
Declare Function gethostname Lib "WSOCK32" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
Declare Function gethostbyname Lib "WSOCK32" (ByVal szHost As String) As Long
Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Public Function GetIPAddress() As String
    Dim sHostName As String * 256
    Dim lpHost As Long
    Dim HOST As HOSTENT
    Dim dwIPAddr As Long
    Dim tmpIPAddr() As Byte
    Dim i As Integer
    Dim sIPAddr As String
    If Not SocketsInitialize() Then
        GetIPAddress = ""
        Exit Function
    End If
    If gethostname(sHostName, 256) = SOCKET_ERROR Then
        GetIPAddress = ""
        MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."
        SocketsCleanup
        Exit Function
    End If
    sHostName = Trim$(sHostName)
    lpHost = gethostbyname(sHostName)
    If lpHost = 0 Then
        GetIPAddress = ""
        MsgBox "Windows Sockets are not responding. " & "Unable to successfully get Host Name."
        SocketsCleanup
        Exit Function
    End If
    CopyMemoryIP HOST, lpHost, Len(HOST)
    CopyMemoryIP dwIPAddr, HOST.hAddrList, 4
    ReDim tmpIPAddr(1 To HOST.hLen)
    CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.hLen
    For i = 1 To HOST.hLen
        sIPAddr = sIPAddr & tmpIPAddr(i) & "."
    Next
    GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
    SocketsCleanup
End Function
Public Function GetIPHostName() As String
    Dim sHostName As String * 256
    If Not SocketsInitialize() Then
        GetIPHostName = ""
        Exit Function
    End If
    If gethostname(sHostName, 256) = SOCKET_ERROR Then
        GetIPHostName = ""
        MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."
        SocketsCleanup
        Exit Function
    End If
    GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)
    SocketsCleanup
End Function
Public Function HiByte(ByVal wParam As Integer)
    HiByte = wParam \ &H100 And &HFF&
End Function
Public Function LoByte(ByVal wParam As Integer)
    LoByte = wParam And &HFF&
End Function
Public Sub SocketsCleanup()
    
    Dim ERROR_SUCCESS
    If WSACleanup() <> ERROR_SUCCESS Then
        MsgBox "Socket error occurred in Cleanup."
    End If
End Sub
Public Function SocketsInitialize() As Boolean
    Dim WSAD As WSAData
    Dim sLoByte As String
    Dim sHiByte As String
   Dim ERROR_SUCCESS
    If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
        MsgBox "The 32-bit Windows Socket is not responding."
        SocketsInitialize = False
        Exit Function
    End If
    If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
        MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) & " supported sockets."
        SocketsInitialize = False
        Exit Function
    End If
    If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
        sHiByte = CStr(HiByte(WSAD.wVersion))
        sLoByte = CStr(LoByte(WSAD.wVersion))
        MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by 32-bit Windows Sockets."
        SocketsInitialize = False
        Exit Function
    End If
   
    SocketsInitialize = True
End Function





شکرا لك استاذ @sandanet على هذا الموضوع الرائع

شكرا لك استاذنا @أبو عبدالله الحلوانى على المداخلة

وشكرا لك استاذنا @jjafferr على مشاركتك .. لان مشاركتك يفرحنا ويعطينا الامل

وهذا هو الملف بصيغة mdb

تنزيل تحديث في رابط ثابت.rar

تم تعديل بواسطه Shivan Rekany
  • Like 3
قام بنشر

اشكرك جزيل الشكر استاذي الكبير @Shivan Rekany جاري تجربة ماتفضلت به .. في الحقيقة ان مشاركتك في الموضوع في بدايته كانت ذو فائدة عظيمة أدت الى تلك النتائج .. كما ان مشاركة اساتذتي الكرام الآخرين وعلى رأسهم الاستاذ جعفر كانت هي الحافز الكبير لدي للبحث المستمر حتى النهاية

 

الموضوع من وجهة نظري مهم جداً وسوف يحتاجه الاخوة الافاضل لعمل تحديث لبرامجهم عن طريق الانترنت .. الموضوع قد طرحته قبل فترة لكن لم يتم التعقيب عليه وكنت شخصياً قد نسيته الى ان قام الاخ  ebnjabalapp بالرد عليه مشكوراً ..فتحياتي لكم جميعاً 

  • Like 1
قام بنشر

السلام عليكم شباب:smile:

 

انا ساكت واستمتع بالتطورات ، لكن مخي يمخخ وراح بعيد لكيفية الاستفادة من هذه الخطوة:smile:

 

مادمتم قد قطعتوا المشوار في هذا الطريق البديع (شكرا أخي أوس على الفكرة والكود ، ابو عبدالله وشفان على تعديل الكود) ، فبدل ان ابدأ من البداية ، سوف اضع امامكم الفكرة اللي على بالي ، راجيا منكم بلورتها برمجيا:smile:

 

خلينا نتوسع في الفكرة شوي ، لتشمل احتياجات المبرمج ، فاللي على بالي هو:

1. البرنامج يدخل على مجلد معين في الموقع (وحاليا كلامنا عن Google Drive) (كما هو الحال الآن) ، ويكون فيه ملف نص txt او xml ، ويُنزل هذا الملف ،

2. هذا الملف يكون فيه اسماء برامجي ، ورقم النسخة الموجودة ، واسم مجلد الموقع الذي فيه هذه البرامج (مجلد آخر في Google Drive ، يعني اعمل مجلد لكل برنامج من برامجي) ،

 (طبعا نستطيع ان نضيف تاريخ من ، تاريخ الى ، نوع البرنامج: Full او Demo او Activation ، و....) ، والنص يكون هكذا مثلا :

Enquiry_Book,2.0,0B9STtJY2DhAoQ1JET3F5N3NiMDQ
myAccounting,1.5,0B9STtJY2DhAoQ1JET3F5N3Nuwiu
Archiving_Goods,5.23,0B9STtJY2DhAoQ1JET3F5Nlujhft

 

3. البرنامج يُنزل هذا الملف ويقرأه ، ويقارن نسخة البرنامج (سيكون هناك جدول خاص في البرنامج ، وبه رقم نسخة البرنامج) ،

4. البرنامج سيقارن رقم النسخة من الجدول ، مع رقم نسخة البرنامج الموجودة في ملف النص ،

5. اذا كان رقم النسخة الموجودة في الملف/الموقع اكبر من النسخة الموجودة في البرنامج ، فيعطي رسالة للمستخدم بأنه هناك نسخة احدث للبرنامج ، وسيقوم بإنزالها وتنصيبها ،

6. البرنامج سيقوم بإستخدام نفس الكود اعلاه (طبعا مع تغييرات بسيطة اذا دعى الامر ، او نجعل الكود كوحدة نمطية نستطيع استعمالها لإنزال مختلف الملفات من الموقع) ، ويُنزل البرنامج.

 

بهذه الطريقة المبرمج يستطيع ان يُحدث برامجه عالميا ، وبدون الذهاب الى مكتب المستخدم:smile:

مجرد فكرة :smile:

 

جعفر

  • Like 1
قام بنشر

استاذنا الكبير @jjafferr اولاً احب ان اشكرك جزيل الشكر على مشاركتك السابقة والتي فيها افكار جميله جداً لكنها معقدة بعض الشيء بالنسبة لي :biggrin: واعتقد بانه لو تم عمل ماتفضلت به على برنامج واحد يكون افضل ومن ثم بعدها يمكن التوسع بالفكرة لتشمل مجموعة اخرى .

 

لكن ما استوقفني في ماتفضلت به هو "لكن مخي يمخخ وراح بعيد لكيفية الاستفادة من هذه الخطوة" نعم انا احسست بذلك لان الموضوع فيه خطورة نوعاً ما في ما اذا تم استخدام الطريقة في امر اخر وانت سيد العارفين وفاهم الموضوع كيف يتم :wink2: لكن الحمد لله ليس في نيتي الا الخير ان شاء الله

 

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

 

على العموم الباب مفتوح لتطوير الفكرة وان شاء الله تكون مرجع لجميع البرامج المعمولة بالاكسس

 

تحياتي

  • Like 1
قام بنشر

السلام عليكم:smile:

 

موضوع التحديث كبير وفيه عدة نقاط والتي يجب النظر فيها ، مثلا:

1. تحديث FE فقط ،

2. تحديث FE ، وعمل تغيير على الجداول.

 

خلينا في النقطة الاصعب والاهم ، وهي انزال النسخة الاحدث من الموقع:smile:

 

كنتم 3 محترفين في عمل هذا الموضوع ، وانت قررت ان الخطوة التالية "معقدة بعض الشيء بالنسبة" :smile:

فأرجو من اخي @Shivan Rekany و اخي @أبو عبدالله الحلوانى ان يتطوعوا لهذا العمل (او يعتذروا) ، وإلا فأنا مستعد ان شاء الله:smile:

 

جعفر

قام بنشر

استاذي الغالي جعفر موضوع تحديث FE فقط او FE مع تغيير في الجداول يعتمد على الملف الذي سوف ترفعه على google drive فأنا في هذا الموضوع كنت ارغب بتغيير المدة الزمنية فقط والتي هي قيمة مشفرة مخزنة في جدول خاص بملف FE عن طريق ملف ال Activation.mde حيث انه بعد التنزيل يتم غلق البرنامج الاصلي ومن ثم تشغيل ملف ال Activation واختيار مكان ملف FE لكي يتم تعديل المدة الزمنية لدى العميل طبعاً بعد التأكد من التصريح المعمول له في ملف ال Activation .. لكن يمكن تطويع الفكرة ايضاً لكي يتم تنزيل ملف FE محدث بالكامل ويتم استبداله يدوياً او عن طريق الكود بالملف الاصلي لكن بالنسبة لموضوع انزال النسخة حسب رقم التحديث اجد فيها صعوبة في كيفية تطبيقها لكنها جميلة فهي سوف تمنع تنزيل الملف من الانترنت الا اذا كان اصداره احدث من الذي يمتلكه المستخدم وهذه الفكرة تنفع في حال تم عمل تحديث كامل على ملف البرنامج وترغب باستبداله بالملف القديم وليس لعمل Activation كما في حالتي تلك

 

تحياتي

قام بنشر

أستاذنا جعفر @jjafferr   شكرا لثقتكم التى أعتز بها

مشاركتم بعمل ما لأمر جدير أن يحرص عليه المرؤ - ولكن حسب ما اتسع الوقت لو سمحتم لى :smile: 

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

4 ساعات مضت, jjafferr said:

2. تحديث FE ، وعمل تغيير على الجداول.

واعتقد أن هذا رابط موضوع أستاذنا @ابوخليل

أما بشأن فكرة سيادتكم بشأن اضافة ملف نص txt او xml  أعتقد أننا الآن ابتعدنا بهذه الفكرة عن مضمون الموضوع الأصلى ( ولكنى أعتقد أنها فكرة متميزة وتستحق أن تفرد بموضوع مستقل )

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

عودا لفكرة تحديث البرنامج وفقا لرقم الاصدار الأحدث للنسخة الجديدة اعقد أننا بحاجة للسير وفقا لتسلسل عمل كهذا:

1- نحتاج لوضع كود لتحميل هذا الملف النصى عند بداية فتح البرنامج كل مرة - ومن ثم استيراد هذا الملف ومقارنة رقم رقم الاصدار برقم الاصدار المخزن بجدول مسبق بالبرنامج 

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

3- ولكن نحن بحاجة لسؤال وتنبيه المستخدم قبل تحميل النسخة الأحدث هل يريد الاستمرار بالتحديث أم لا (حتى لا نفرض عليها قرارات :biggrin:)

هذه بعض الأفكار التى تدور بخاطرى الآن ان لم ترو خللا بها عملت على تنفيذها متى اتسع الوقت ان شاء الله.

ولكن هنالك سؤالا يؤرقنى واحاول منع نفسى منه ولكن لم استطع ؟ :wink2:

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

أرجو أن لا يكون كلامى مزعجا ولا معوقا للمواصلة بتنفيذ الفكرة.

تحياتى:fff:

قام بنشر
5 ساعات مضت, jjafferr said:

 خلينا في النقطة الاصعب والاهم ، وهي انزال النسخة الاحدث من الموقع:smile:

كنتم 3 محترفين في عمل هذا الموضوع ، وانت قررت ان الخطوة التالية "معقدة بعض الشيء بالنسبة" :smile:

فأرجو من اخي @Shivan Rekany و اخي @أبو عبدالله الحلوانى ان يتطوعوا لهذا العمل (او يعتذروا) ، وإلا فأنا مستعد ان شاء الله:smile:

جعفر

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

3 ساعات مضت, sandanet said:

اخواني الاعزاء واجهتني مشكلة وهي تشغيل ملف ال Activation على ملف mde لكنه يعمل بكفاءة مع ملف mdb كما في المرفق ..فما السبب؟؟

 

example.zip

اتفضل اليك هذا الحل

Dim sql As String
Dim x As Integer
x = Len(Forms!FORM1![txtPath]) - Len(Replace(Forms!FORM1![txtPath], ".", ""))

If (Split(Forms!FORM1!txtPath, ".")(1)) = "MDE" Then
    sql = "UPDATE TdateT INNER JOIN [system.MDE].Tdate ON TdateT.ID = Tdate.ID SET Tdate.demo = TdateT.demo"
        Else
    sql = "UPDATE TdateT INNER JOIN [system.MDB].Tdate ON TdateT.ID = Tdate.ID SET Tdate.demo = TdateT.demo"
End If

DoCmd.SetWarnings False
DoCmd.RunSQL (sql)

DoCmd.close acForm, Me.nAME

اليك القاعدة

 

example.rar

  • Like 1
قام بنشر (معدل)

شكراً جزيلاً استاذي القدير @Shivan Rekany ماشاء الله عليك مبدع دائماً .. وفقك الله .. اطمح منك المزيد استاذي الفاضل وهو في الكود الذي عدلته يوجد تحته كود غير مفعل وهو لقاعدة اسمها system_admin.MDE هل يمكن دمجها ايصاَ لكي يتم تطبيق البرنامج على اكثر من قاعدة؟ 

 

بالنسبة لتطوير الفكرة فاعتقد انه يجب البدء بعمل كود يقرأ مابداخل ملف text موجود على الجهاز ليكن اسمه update.text فيه البيانات التالية

اسم البرنامج مع امتداده

اصدار البرنامج

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

Enquiry_Book.mde,2.0,0B9STtJY2DhAoQ1JET3F5N3NiMDQ
myAccounting.mde,1.5,0B9STtJY2DhAoQ1JET3F5N3Nuwiu
Archiving_Goods.mde,5.23,0B9STtJY2DhAoQ1JET3F5Nlujhft

 

طبعاً الكود اللازم يجب اولاً ان يتأكد من وجود ملف ال update.txt على المسار المحدد بعد تنزيله تلقائياً من الانترنت اثناء فتح صفحة التحديث من داخل البرنامج 

ثم يقوم بقراءة المعلومات التي في داخله ويقارنها مع المعلومات المخزنة في جدول داخل البرنامج فيه نفس البيانات مع اختلاف رقم اصدار البرنامج وكود التفعيل طبعاً

 

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

 

مبدئياً هذه الفكرة هي الاساس كما تفضل بها استاذ جعفر

 

تحياتي

 

طبعاً ملف ال update.text يمكن رفعه على google drive واستعمال الطريقة التي اتبعناها في هذا الموضوع لتنزيله من داخل البرنامج  

تم تعديل بواسطه sandanet
قام بنشر
4 دقائق مضت, sandanet said:

طبعاً الكود اللازم يجب اولاً ان يتأكد من وجود ملف ال update.txt على المسار المحدد بعد تنزيله تلقائياً من الانترنت اثناء فتح صفحة التحديث من داخل البرنامج

الان ليس لدي شيء ولكن حسب فكري الان

يجب ان يقرأ ما بداخل الملف تيكست قبل تنزيل من الانترنيت وليس بعد

قام بنشر

لا ضرر في ان يتم تنزيل ملف ال txt عند فتح البرنامج ويتم قراءته على الجهاز وعمل المقارنات ومن ثم تنبيه المستخدم بانه يوجد اصدار جديد

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information