منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
الترقيم التلقائي في برامج الداتا بيز - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : الترقيم التلقائي في برامج الداتا بيز (/showthread.php?tid=16059)



الترقيم التلقائي في برامج الداتا بيز - silverlight - 06-06-16

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

عملية الترقيم التلقائي في برامج الداتا بيز التي تستخدم Sql أو التي تستخدم MS-Access تحدث بشكل تلقائي لأن ملفات Sql و ملفات MS-Access تقوم بعملية الترقيم التلقائي نيابة عن المبرمج
لكن هنا يأتي السؤال هل من الممكن الإستفادة من هذا الترقيم التلفائي ليعمل بمثابة مفتاح Key يمكن استخدامه في عمليات البحث داخل الداتا بيز ..... من المؤكد أنه يوجد هناك افكارا كثيرة للإجابة علي هذا السؤال
والفكرة التالية تعتبر واحدة من تلك الأفكار


الفكرة

1- يتم قراءة الوقت والتاريخ في لحظة إدخال البيانات باستخدام الدالة DateTime.Now

2- يتم استخدام StopWatch Class لتحديد الفترة الزمنية التي يأخذها تنفيذ الكود وهي غالبا ستكون عبارة عن اجزاء من الثانية

3- يتم إضافة الوقت المستغرق لتنفيذ الكود الي الوقت و التاريخ
4- تحويل الناتج الي String باستخدام String.Format

5- يتم تحويل هذا String الي رقم

و الكود التالي يوضح الأمر قليلا


PHP كود :
       Dim keyDateTime As DateTime DateTime.UtcNow
        Dim sw 
As New Stopwatch

        sw
.Start()
 
       Dim currentValue As DateTime keyDateTime sw.Elapsed
        Dim currentValueString 
As String currentValue.ToString(String.Format("{0:00}{1:00}{2:00}{3:00}{4:00}{5:00}ffffff"keyDateTime.DaykeyDateTime.MonthkeyDateTime.YearkeyDateTime.HourkeyDateTime.MinutekeyDateTime.Secondsw.Elapsed), Globalization.CultureInfo.InvariantCulture)
 
       sw.Stop()

 
       Me.Text currentValueString 


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

PHP كود :
       Dim keyDateTime As DateTime DateTime.UtcNow
        Dim sw 
As New Stopwatch

        sw
.Start()
 
       Dim currentValue As DateTime keyDateTime sw.Elapsed
        Dim currentValueString 
As String currentValue.ToString(String.Format("{0:00} - {1:00} - {2:00} - {3:00} - {4:00} - {5:00} - ffffff"keyDateTime.DaykeyDateTime.MonthkeyDateTime.YearkeyDateTime.HourkeyDateTime.MinutekeyDateTime.Secondsw.Elapsed), Globalization.CultureInfo.InvariantCulture)
 
       sw.Stop()

 
       Me.Text currentValueString 


كما هو واضح فإنه وحتي الأن فإن الكود سهل و بسيط وقد لا تحتاج الي تحويله الي رقم بل ويمكن استخدامه كما هو في قواعد البيانات بحيث يتم تخزينه علي هيئة String
لكن إن أردت تحويله الي رقم فأنت بحاجة للمزيد من العمل علي الكود قليلا لأنك لو حاولت تحويل String هذا الي Integer سيحدث بعض الأخطاء وهذه الأخطاء سببها محدودية الكلاس Integer لأن الكلاس Integer أقصي قيمة له ستكون دوما اقل من قيمة الترقيم التلقائي لذلك قد يكون من الأفضل أن تقوم بتحويله إلي ULong مثلا وعلي ما أعتقد أنه وفي بعض الحالات قد تحدث أخطاء ايضا لذلك يجب ان تفكر في تحويل String الذي يعبر عن الترقيم التلقائي إما الي بايت Byte او مصفوفة من الأرقام او الي DateTime حتي يمكنك التحكم في الترقيم التلقائي بشكل افضل


عموما ولكي نستفيد بشكل أكبر من الكود اعلاه من الافضل تحويل الكود الي دالة او إلي كلاس حتي نستطيع التحكم فيه بشكل افضل و بالتالي يمكن استخدامه في عقد المقارانات والبحث بين البيانات بكل سهولة

و إن شاء الله فإن للحديث بقية .... تقبلوا تحياتي وكل عام و انتم بخير


RE: الترقيم التلقائي في برامج الداتا بيز - silverlight - 07-06-16

الكلاسات التالية توضح الشكل النهائي للكود الذي من الممكن الإستفادة منه بطرق كثيرة جدا و في النهاية الأمر متروك للقارئ

الكلاس Era
هذا الكلاس جزء من الكود الخاص بتحديد الترقيم التلقائي و الهدف منه بدء StopWatch و إيقافها

PHP كود :
Public Class Era
    Implements IDisposable

    Private disposed 
As Boolean
    Private _sw 
As Stopwatch

    Public Sub 
New(sw As Stopwatch)
 
       _sw sw
        _sw
.Start()
 
   End Sub

    Public ReadOnly Property Span 
As String
        Get
            Dim currentSpan 
As TimeSpan _sw.Elapsed
            Dim currentSpanString 
As String currentSpan.ToString(String.Format("ffffff"_sw.Elapsed), Globalization.CultureInfo.InvariantCulture)
 
           Return currentSpanString
        End Get
    End Property

    Protected Sub OnDisposed
()
 
       CType(_swStopwatch).Stop()
 
   End Sub

    Protected Overridable Sub Dispose
(disposing As Boolean)
 
       If disposed Then
            Return
        End 
If

 
       If disposing Then
            OnDisposed
()
 
       End If
 
       disposed True
    End Sub


    Public Sub Dispose
() Implements IDisposable.Dispose
        Dispose
(True)
 
       ' TODO: uncomment the following line if Finalize() is overridden above.
        ' 
GC.SuppressFinalize(Me)
 
   End Sub

End 
Class 

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

الكلاس EraKey
هذا هو الكلاس الرئيسي الذي سوف يقوم بإنشاء الترقيم التلقائئي للبيانات

PHP كود :
Public Class EraKey

    Private keyDateTime 
As DateTime
    Private keyWatch 
As Stopwatch
    Private keyStringValue 
As String

    Public Sub 
New()
 
       keyDateTime DateTime.UtcNow
        keyWatch 
= New Stopwatch()
 
       Using era As New Era(keyWatch)
 
           Dim currentValue As DateTime keyDateTime keyWatch.Elapsed
            Dim currentValueString 
As String currentValue.ToString(String.Format("{0:00}{1:00}{2:00}{3:00}{4:00}{5:00}{6:00} "keyDateTime.DaykeyDateTime.MonthkeyDateTime.YearkeyDateTime.HourkeyDateTime.MinutekeyDateTime.Secondera.Span), Globalization.CultureInfo.InvariantCulture)
 
           keyStringValue currentValueString
        End Using
    End Sub

    Public ReadOnly Property Key 
As String
        Get
            Return keyStringValue
        End Get
    End Property

    Public Overrides 
Function Equals(obj As Object) As Boolean
        If obj Is Nothing OrElse Not Me
.GetType() Is obj.GetType() Then
            Return False
        End 
If
 
       Dim current As EraKey CType(objEraKey)
 
       Return Me.Key current.Key
    End 
Function

 
   Public Overrides Function ToString() As String
        Return Key
.ToString
    End 
Function

End Class 

ملحوظة
الكلاس أعلاه لم يكتمل بعد و لاجقا سوف أقوم بالتعديل عليه ليظهر في صورته النهائية

الكود التالي يوضح و بشكل مبدئي كيفية الإستفادة من الكلاس أعلاه


PHP كود :
   Me.Text = New EraKey().Key