منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : دالة تقوم بترقيم السجلات حسب السنة الهجرية
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
المطلوب كود يقوم بالترقيم لسجلات يبداء من الرقم واحد مع كل بداية سنة هجرية

وهذا كود لنفس المطلوب بس مادري كيف احولة للعمل مع السي شارب


   '========== دالة لمعرفة أكبر رقم مسجل للسنة المحددة =========='
   Private Function GetMaxHijriID(ByVal hijriYear As Integer) As Integer
       Try

           conn.Open()

           '========== معرفة أكبر رقم مسجل للسنة الحالية =========='
           ' متغير من نوع أوبجكت تحسباً لرجوع قيمة فارغة '
           Dim maxHijriID As Object
           Using comm As New OleDbCommand(" SELECT MAX([HijriID]) FROM [Tab1] WHERE [HijriYear] = @HijriYear ", conn)
               comm.Parameters.AddWithValue("@HijriYear", hijriYear)
               maxHijriID = comm.ExecuteScalar
           End Using
           ' في حالة القيمة الفارغة يتم تحويلها إلى رقم صفر '
           maxHijriID = IIf(maxHijriID.GetType Is GetType(System.DBNull), 0, maxHijriID)

           conn.Close()

           Return maxHijriID

       Catch ex As Exception
           MsgBox(ex.Message)
           Return -1
       End Try
   End Function
تفضل الكود بعد التحويل
كود :
// ========== دالة لمعرفة أكبر رقم مسجل للسنة المحددة =========='
private int GetMaxHijriID(int hijriYear)
{
   try
   {
       conn.Open();

       // ========== معرفة أكبر رقم مسجل للسنة الحالية =========='
       // متغير من نوع أوبجكت تحسباً لرجوع قيمة فارغة '
       object maxHijriID;
       using (OleDbCommand comm = new OleDbCommand(" SELECT MAX([HijriID]) FROM [Tab1] WHERE [HijriYear] = @HijriYear ", conn))
       {
           comm.Parameters.AddWithValue("@HijriYear", hijriYear);
           maxHijriID = comm.ExecuteScalar;
       }
       // في حالة القيمة الفارغة يتم تحويلها إلى رقم صفر '
       maxHijriID = Interaction.IIf(maxHijriID.GetType() == typeof(System.DBNull), 0, maxHijriID);

       conn.Close();

       return maxHijriID;
   }
   catch (Exception ex)
   {
       Interaction.MsgBox(ex.Message);
       return -1;
   }
}
(17-06-20, 06:26 PM)kiki كتب : [ -> ]تفضل الكود بعد التحويل
كود :
// ========== دالة لمعرفة أكبر رقم مسجل للسنة المحددة =========='
private int GetMaxHijriID(int hijriYear)
{
   try
   {
       conn.Open();

       // ========== معرفة أكبر رقم مسجل للسنة الحالية =========='
       // متغير من نوع أوبجكت تحسباً لرجوع قيمة فارغة '
       object maxHijriID;
       using (OleDbCommand comm = new OleDbCommand(" SELECT MAX([HijriID]) FROM [Tab1] WHERE [HijriYear] = @HijriYear ", conn))
       {
           comm.Parameters.AddWithValue("@HijriYear", hijriYear);
           maxHijriID = comm.ExecuteScalar;
       }
       // في حالة القيمة الفارغة يتم تحويلها إلى رقم صفر '
       maxHijriID = Interaction.IIf(maxHijriID.GetType() == typeof(System.DBNull), 0, maxHijriID);

       conn.Close();

       return maxHijriID;
   }
   catch (Exception ex)
   {
       Interaction.MsgBox(ex.Message);
       return -1;
   }
}

توجد اخطاء ارجو التطبيق على المثل المرفق
السلام عليكم و رحمة الله و بركاته
جربه بهذا الشكل
PHP كود :
       public  int GetMaxHijriID(int hijriYear)
 
       {
 
           try
            
{

 
               object maxHijriID null;
 
               using (OleDbCommand comm = new OleDbCommand("SELECT MAX([HijriID]) FROM [Tab1] WHERE [HijriYear] = @HijriYear "con))
 
               {
 
                   comm.Parameters.AddWithValue("@HijriYear"hijriYear);
 
                   con.Open();
 
                   maxHijriID comm.ExecuteScalar();
 
                   con.Close();
 
               }
 
               maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID;
 
               return int.Parse(Convert.ToString(maxHijriID));
 
           }
 
           catch (Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
               return -1;
 
           }



 
       
(18-06-20, 02:41 AM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
جربه بهذا الشكل
PHP كود :
       public  int GetMaxHijriID(int hijriYear)
 
       {
 
           try
            
{

 
               object maxHijriID null;
 
               using (OleDbCommand comm = new OleDbCommand("SELECT MAX([HijriID]) FROM [Tab1] WHERE [HijriYear] = @HijriYear "con))
 
               {
 
                   comm.Parameters.AddWithValue("@HijriYear"hijriYear);
 
                   con.Open();
 
                   maxHijriID comm.ExecuteScalar();
 
                   con.Close();
 
               }
 
               maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID;
 
               return int.Parse(Convert.ToString(maxHijriID));
 
           }
 
           catch (Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
               return -1;
 
           }



 
       

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

تعقيب : الاخ Kiki معه حق , لقد تم تعديل الملف المرفق و لم يعد يحتوي على اكواد الاتصال انا اتحدث عن الملف الاول الذي يحتوي على اكواد الاتصال التي كانت موجودة ضمن الكلاس CLS_DAL.cs
بعد ان تكون اضفت الكود يصبح الفورم الرئيسي بهذا الشكل

PHP كود :
   public partial class Form1 Form
    
{
 
    
        public Form1
()
 
       {
 
           InitializeComponent();
 
       }
 
               DL.CLS_DAL cll = new DL.CLS_DAL();

 
       private void Form1_Load(object senderEventArgs e)
 
       {
 
           try
            
{
 
               cll.FillDGV(dg"select * from Depart");

 
               
                dg
.Columns[0].HeaderText "التسلسل";
 
               dg.Columns[1].HeaderText "القسم";
 
              // dg.Columns[2].HeaderText = "كلمة المرور";
 
           }
 
           catch(Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
           }
 
       }

 
       private void button1_Click(object senderEventArgs e)
 
       {
 
           int Idnt=cllGetMaxHijriID(1435);
 
           MessageBox.Show(Idnt.ToString());

 
       }
 
   
(18-06-20, 10:10 PM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
ضع الكود في الكلاس المسمى CLS_DAL.cs
اذهب الى الفورم الرئيسي و ضع زر و استدعي الكود مع تمرير السنة المطلوبة و اعرض الناتج في مربع نص او رسالة نصية

تعقيب : الاخ Kiki معه حق , لقد تم تعديل الملف المرفق و لم يعد يحتوي على اكواد الاتصال انا اتحدث عن الملف الاول الذي يحتوي على اكواد الاتصال التي كانت موجودة ضمن الكلاس CLS_DAL.cs
بعد ان تكون اضفت الكود يصبح الفورم الرئيسي بهذا الشكل

PHP كود :
   public partial class Form1 Form
    
{
 
    
        public Form1
()
 
       {
 
           InitializeComponent();
 
       }
 
               DL.CLS_DAL cll = new DL.CLS_DAL();

 
       private void Form1_Load(object senderEventArgs e)
 
       {
 
           try
            
{
 
               cll.FillDGV(dg"select * from Depart");

 
               
                dg
.Columns[0].HeaderText "التسلسل";
 
               dg.Columns[1].HeaderText "القسم";
 
              // dg.Columns[2].HeaderText = "كلمة المرور";
 
           }
 
           catch(Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
           }
 
       }

 
       private void button1_Click(object senderEventArgs e)
 
       {
 
           int Idnt=cllGetMaxHijriID(1435);
 
           MessageBox.Show(Idnt.ToString());

 
       }
 
   
استاذي مشكور على الرد بس الكود طبقته على الفورم ولم يضبط معي وهذا هو مرفق اذا امكن تعدل عليه
السلام عليكم و رحمة الله و بركاته
الاخ علي عند الاطلاع على مثالك الكود يعمل
هو يعود بعدد السجلات للسنة المحددة (السنة المحددة في الكود هي 1436) و عددها 3 سجلات
و عند تغير السنة الى 1437 يعود باربع سجلات (و هي الموجودة في القاعدة)
و في حال مررنا 1438 كسنة جديدة سيعود لنا بالرقم 1 اي ان هناك سجل واحد للسنة الجديدة و مرد ذلك , بالنظر الى الكود نرى اننا ارجعنا الرقم واحد عند عدم وجود سجلات لذا وجب تغيره الى الرقم صفر كما يلي :
PHP كود :
       public int GetMaxHijriID(int hijriYear)
 
       {
 
           try
            
{

 
               object maxHijriID null;
 
               using (OleDbCommand comm = new OleDbCommand("SELECT MAX([HijriID]) FROM [tbl] WHERE [HijriYear] = @HijriYear "con))
 
               {
 
                   comm.Parameters.AddWithValue("@HijriYear"hijriYear);
 
                   con.Open();
 
                   maxHijriID comm.ExecuteScalar();
 
                   con.Close();
 
               }
 
               maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID;
 
               return int.Parse(Convert.ToString(maxHijriID));
 
           }
 
           catch (Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
               return -1;
 
           }



 
       
الاصلاح في هذه الجزئية فقط
PHP كود :
maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID
و عند الاستدعاء ستزيد بمقدار واحد لكل سجل جديد
كما يلي:
PHP كود :
       private void Button1_Click(object senderEventArgs e)
 
       {
 
           int Idnt cll.GetMaxHijriID(1438)+1;

 
           MessageBox.Show(Idnt.ToString());


 
       

غير ذلك انا لا ارى مشكلة في الكود
الا اذا كان طلبك شيئ مغاير لما فهمته؟؟
حاول ان تقرأ الكود و تتعلم منه
(19-06-20, 02:02 AM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
الاخ علي عند الاطلاع على مثالك الكود يعمل
هو يعود بعدد السجلات للسنة المحددة (السنة المحددة في الكود هي 1436) و عددها 3 سجلات
و عند تغير السنة الى 1437 يعود باربع سجلات (و هي الموجودة في القاعدة)
و في حال مررنا 1438 كسنة جديدة سيعود لنا بالرقم 1 اي ان هناك سجل واحد للسنة الجديدة و مرد ذلك , بالنظر الى الكود نرى اننا ارجعنا الرقم واحد عند عدم وجود سجلات لذا وجب تغيره الى الرقم صفر كما يلي :
PHP كود :
       public int GetMaxHijriID(int hijriYear)
 
       {
 
           try
            
{

 
               object maxHijriID null;
 
               using (OleDbCommand comm = new OleDbCommand("SELECT MAX([HijriID]) FROM [tbl] WHERE [HijriYear] = @HijriYear "con))
 
               {
 
                   comm.Parameters.AddWithValue("@HijriYear"hijriYear);
 
                   con.Open();
 
                   maxHijriID comm.ExecuteScalar();
 
                   con.Close();
 
               }
 
               maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID;
 
               return int.Parse(Convert.ToString(maxHijriID));
 
           }
 
           catch (Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
               return -1;
 
           }



 
       
الاصلاح في هذه الجزئية فقط
PHP كود :
maxHijriID = (maxHijriID.GetType() == typeof(System.DBNull)) ? maxHijriID
و عند الاستدعاء ستزيد بمقدار واحد لكل سجل جديد
كما يلي:
PHP كود :
       private void Button1_Click(object senderEventArgs e)
 
       {
 
           int Idnt cll.GetMaxHijriID(1438)+1;

 
           MessageBox.Show(Idnt.ToString());


 
       

غير ذلك انا لا ارى مشكلة في الكود
الا اذا كان طلبك شيئ مغاير لما فهمته؟؟
حاول ان تقرأ الكود و تتعلم منه

الف شكر ياستاذي بس ممكن اذا ما عليك امر تعدل على المثال المرفق عند كل  حفظ السجل يزيد
وذلك لكي يستفيد الجميع من هاذا الموضوع
الصفحات : 1 2