تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] مساعدة في عمل برنامج تعليم
#11
اهلا اخي شمس جدول المحتويات سيكون لكل المواضيع صممه بالشكل الذي تريد
اعرف ان الامور ستختلط عليك لان هذا النوع من العلاقات صعب جدا و التعامل معه مرير و لكن الهدف كان التوضيح فقط
لا عليك اخي شمس , باذن المولى عز و جل ساحاول ان اوجهك بطريقة جيدة لفهم الالية (حسب قدرتي)
سارفق لك ملف قاعدة البيانات و سابدأ بشرح مقتضب عبر مثال يعطيك القدرة على فهم الالية

ابدأ مشروع جديد وادرج فيه فورم (Form1) و ادرج ايضاً مديول وسميه (Connect)
سنضيف داخل المديول بعض الدوال البسيطة لتسهل علينا العمل (لكي لا نكرر كتابة الاكواد)
داخل المديول سنكتب هذه الاكواد
PHP كود :
ImportsSystem.Data.OleDb
Module Connect
    Public ConnectionString 
As String "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TestDb.accdb"
 
   Public Con As New OleDbConnection(ConnectionString)

 
   Public Sub CloseConnect()
 
       If Con.State ConnectionState.Open Then
            Con
.Close()
 
       End If
 
   End Sub

    Public Sub OpenConnect
()
 
       If Con.State ConnectionState.Closed Then
            If Con
.ConnectionString Nothing Then Con.ConnectionString ConnectionString
            Con
.Open()
 
       End If
 
   End Sub


    Public 
Function SelectWithString(ByVal TblNmae As StringByVal Fileds() As StringByVal CondFiled As StringByVal Match As String) As DataTable

        If Fileds
.Length 0 Then
            MessageBox
.Show("تاكد من ملئ مصفوفة الحقول")
 
           Return Nothing
        End 
If

 
       Dim SelectStatement As String "Select "
 
       Dim SetFileds As String ""
 
       For Each str As String In Fileds
            SetFileds 
+= str ","
 
       Next

        If SetFileds
.EndsWith(","Then SetFileds SetFileds.Remove(SetFileds.Count 11)

 
       SelectStatement += SetFileds " From " TblNmae " Where " CondFiled " Like '" Match "' "
 
       If Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString
        Dim Cmd 
As New OleDbCommand(SelectStatementCon)
 
       Dim Dt As New DataTable
        Dt
.Clear()
 
       Dim Da As New OleDbDataAdapter(Cmd)
 
       If Con.State ConnectionState.Closed Then Con.Open()
 
       Da.Fill(Dt)
 
       Cmd.Dispose()
 
       Return Dt
    End 
Function

 
   Public Function SelectWithInteger(ByVal TblNmae As StringByVal Fileds() As StringByVal CondFiled As StringByVal ID As Integer) As DataTable

        If Fileds
.Length 0 Then
            MessageBox
.Show("تاكد من ملئ مصفوفة الحقول")
 
           Return Nothing
        End 
If

 
       Dim SelectStatement As String "Select "
 
       Dim SetFileds As String ""
 
       For Each str As String In Fileds
            SetFileds 
+= str ","
 
       Next

        If SetFileds
.EndsWith(","Then SetFileds SetFileds.Remove(SetFileds.Count 11)

 
       SelectStatement += SetFileds " From " TblNmae " Where " CondFiled " Like '" ID "' "
 
       If Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString
        Dim Cmd 
As New OleDbCommand(SelectStatementCon)
 
       Dim Dt As New DataTable
        Dt
.Clear()
 
       Dim Da As New OleDbDataAdapter(Cmd)
 
       If Con.State ConnectionState.Closed Then Con.Open()
 
       Da.Fill(Dt)
 
       Cmd.Dispose()
 
       Return Dt
    End 
Function


 
   Public Function SelectFTableNormal(ByVal TblNmae As StringByVal Fileds() As String) As DataTable
        If Fileds
.Length 0 Then
            MessageBox
.Show("تاكد من ملئ مصفوفة الحقول")
 
           Return Nothing
        End 
If

 
       Dim SelectStatement As String "Select "
 
       Dim SetFileds As String ""
 
       For Each str As String In Fileds
            SetFileds 
+= str ","
 
       Next

        If SetFileds
.EndsWith(","Then SetFileds SetFileds.Remove(SetFileds.Count 11)

 
       SelectStatement += SetFileds " From " TblNmae
        If Con
.ConnectionString Nothing Then Con.ConnectionString ConnectionString
        Dim Cmd 
As New OleDbCommand(SelectStatementCon)
 
       Dim Dt As New DataTable
        Dt
.Clear()
 
       Dim Da As New OleDbDataAdapter(Cmd)
 
       If Con.State ConnectionState.Closed Then Con.Open()
 
       Da.Fill(Dt)
 
       Cmd.Dispose()
 
       Return Dt
    End 
Function

    Public Function GetFiled(ByVal ReturnFiled As StringByVal Tbl As StringByVal CondFiled As StringByVal Id As String) As String
        Dim serch 
As String ""
        serch "Select " ReturnFiled " From " Tbl " Where " CondFiled " Like '" Id "' "

        Dim Cmd As New OleDbCommand(serchCon)
        Dim ReturnResult As String ""
        OpenConnect()
        Dim red As OleDbDataReader Cmd.ExecuteReader
        
While red.Read
            
If red.HasRows Then
                
If Not (red(ReturnFiledIs Nothing) Or red(ReturnFiled).ToString.Length 0 Then
                    ReturnResult 
red(ReturnFiled).ToString
                
Else
                    ReturnResult 0
                End 
If
            End If
        End While
        red.Close()
        Cmd.Dispose()
        CloseConnect()
        Return ReturnResult
    End 
Function


End Module 

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

PHP كود :
   Public ConnectionString As String "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TestDb.accdb"
 
   Public Con As New OleDbConnection(ConnectionString)

 
   Public Sub CloseConnect()
 
       If Con.State ConnectionState.Open Then
            Con
.Close()
 
       End If
 
   End Sub

    Public Sub OpenConnect
()
 
       If Con.State ConnectionState.Closed Then
            If Con
.ConnectionString Nothing Then Con.ConnectionString ConnectionString
            Con
.Open()
 
       End If
 
   End Sub 
في هذا الكود انا اقوم بتاسيس اتصال مع القاعدة الموجودة في مجلد البرنامج و لدي دالتان واحدة تقوم بفتح الاتصال و الثانية تقوم بغلق الاتصال



الدوال
PHP كود :
   Public Function SelectWithString(ByVal TblNmae As StringByVal Fileds() As StringByVal CondFiled As StringByVal Match As String) As DataTable

        If Fileds
.Length 0 Then
            MessageBox
.Show("تاكد من ملئ مصفوفة الحقول")
 
           Return Nothing
        End 
If

 
       Dim SelectStatement As String "Select "
 
       Dim SetFileds As String ""
 
       For Each str As String In Fileds
            SetFileds 
+= str ","
 
       Next

        If SetFileds
.EndsWith(","Then SetFileds SetFileds.Remove(SetFileds.Count 11)

 
       SelectStatement += SetFileds " From " TblNmae " Where " CondFiled " Like '" Match "' "
 
       If Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString
        Dim Cmd 
As New OleDbCommand(SelectStatementCon)
 
       Dim Dt As New DataTable
        Dt
.Clear()
 
       Dim Da As New OleDbDataAdapter(Cmd)
 
       If Con.State ConnectionState.Closed Then Con.Open()
 
       Da.Fill(Dt)
 
       Cmd.Dispose()
 
       Return Dt
    End 
Function 

عمل هذه الدالة ان تقوم بجلب البيانات (الحقول) من جدول ما وفق شرط ما و تعود لي بكائن جدول (DataTable)
الوسائط المطلوبة (اسم الجدول و مصفوفة الحقول و الحقل الشرطي و قيمة الحقل الشرطي) لا عليك سترى مدى سهولتها عند استعمالها
سافرض انك تريد جلب الحقول (ID,Name) من الجدول TBL1 وفق شرط ان يكون الحقل (Name="العلوم")
فانت ستستخدم الدالة وفق الطريقة التالية
PHP كود :
   Dim Fileds() As String Nothing
        Fileds 
= New String() {"ID""Name"}

Dim TBL1 As New DataTable
TBL1
=SelectWithString("TBL1"Fileds"Name""العلوم"
كما ترى صديقي العملية بسيطة و مختصرة بنفس الوقت تغنيني عن اعادة كتابة الاكواد
الدالة الثانية و الثالثة لهما نفس العمل مع اختلاف في الوسائط فمرة نحن نجلب وفق حقل نصي و مرة نجلب وفق حقل رقمي ومرة بدون شروط
و اما الدالة الاخيرة فهي تجلب بيانات حقل واحد بالاعتماد على شرط محدد
اتمنى ان يكون الشرح بسيط وسهل

الان ننتقل الى واجهة النموذج و نضيف اثنين كومبو بوكس(ComboBox) واحد للمواد و واحد للمجلدات 
المواد=Cmb_M
المجلدات=Cmb_F
و نضيف (ListBox) نسميها (ListContent) سنستخدمها لعرض عناوين المواضيع من جدول المحتويات
اما محتويات الموضوع نستخدم لها (RichTextBox)
كما في الصورة التالية


الان الى كود النموذج 

PHP كود :
Public Class TForm

    Dim TB_M
TB_FTB_Content As New DataTable
    Dim Fileds
() As String Nothing

    Private Sub M_Cmb_SelectedIndexChanged
(sender As ObjectAs EventArgsHandles Cmb_M.SelectedIndexChanged
        Fileds 
= New String() {"MF_ID""F_Nmae"}
 
       TB_F SelectWithString("TB_MF"Fileds"M_Nmae"Cmb_M.Text)
 
       Cmb_F.DataSource TB_F
        Cmb_F
.DisplayMember "F_Nmae"
 
       Cmb_F.ValueMember "MF_ID"
 
   End Sub


    Private Sub F_Cmb_SelectedIndexChanged
(sender As ObjectAs EventArgsHandles Cmb_F.SelectedIndexChanged

        Fileds 
= New String() {"Cont_ID""Cont_Title"}
 
       TB_Content SelectWithInteger("TB_Content"Fileds"MF_ID"Cmb_F.SelectedValue)
 
       ListContent.DataSource TB_Content
        ListContent
.DisplayMember "Cont_Title"
 
       ListContent.ValueMember "Cont_ID"

 
   End Sub

    Private Sub ListContent_SelectedIndexChanged
(sender As ObjectAs EventArgsHandles ListContent.SelectedIndexChanged
        If Not TypeOf 
(ListContent.SelectedValueIs DataRowView Then
            RichTextBox1
.Text GetFiled("Content""TB_Content""Cont_ID"ListContent.SelectedValue)
 
       End If
 
   End Sub


    Private Sub TForm_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        Fileds 
= New String() {"M_ID""M_Name"}
 
       TB_M SelectFTableNormal("TB_M"Fileds)
 
       Cmb_M.DataSource TB_M
        Cmb_M
.DisplayMember "M_Name"
 
       '
    End Sub

End Class 

كما ترى العملية جدا بسيطة حاول تدرس الكود و شوف النتائج
بالنسبة لضبط الادخالات سيكون كالتالي
ادخال المواد في نموذج منفصل
و ادخال المجلدات في نموذج منفصل ايضاً
اما عملية اضافة المواضيع ستتم في صيغة (مجلد لكل مادة بدون تكرار في الجدول الرابط) و تحتها تندرج المواضيع


الملفات المرفقة
.rar   TestDb.rar (الحجم : 20.04 ك ب / التحميلات : 42)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: أبو عمر , Adrees , Adrees
#12
السلام عليكم ورحمة الله وبركاته
جزاك الله خيرا ووفقك لما يحبه ويرضاه


شكرا لك

ساحاول ادرس الكود واطبق الشرح

الى ان افهمه واتقنه
زادك الله علما و نفع بك
الرد }}}
تم الشكر بواسطة: ابو ليلى
#13
السلام عليكم  

عندي خطأ    لما افتح البرنامج  



كذالك ارى ان الكود ليس
سي شارب
الرد }}}
تم الشكر بواسطة:
#14
اعذرني لم اراعي انك تستخدم #C 
على كل حال هذا الكود بـ #C
سنغير المديول الى Static Class حيث في #C لا يوجد Module 
اضف كلاس للمشروع و سميه Connect و هذا كوده

PHP كود :
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Data.OleDb;
using System Windows.Forms;

static class 
Connect
{
 
   public static string ConnectionString "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\TestDb.accdb";

 
   public static OleDbConnection Con = new OleDbConnection(ConnectionString);

 
   public static void CloseConnect()
 
   {
 
       if (Con.State == ConnectionState.Open)
 
       {
 
           Con.Close();
 
       }
 
   }


 
   public static void OpenConnect()
 
   {
 
       if (Con.State == ConnectionState.Closed)
 
       {
 
           if (Con.ConnectionString == null)
 
               Con.ConnectionString ConnectionString;
 
           Con.Open();
 
       }
 
   }


 
   public static DataTable SelectWithString(string TblNmaestring[] Filedsstring CondFiledstring Match)
 
   {

 
       if (Fileds.Length == 0)
 
       {
 
           MessageBox.Show("تاكد من ملئ مصفوفة الحقول");
 
           return null;
 
       }

 
       string SelectStatement "Select ";
 
       string SetFileds "";
 
       foreach (string str in Fileds)
 
       {
 
           SetFileds += str ",";
 
       }

 
       if (SetFileds.EndsWith(","))
 
           SetFileds SetFileds.Remove(SetFileds.Length 11);

 
       SelectStatement += SetFileds " From " TblNmae " Where " CondFiled " Like '" Match "' ";
 
       if (Con.ConnectionString == null)
 
           Con.ConnectionString ConnectionString;
 
       OleDbCommand Cmd = new OleDbCommand(SelectStatementCon);
 
       DataTable Dt = new DataTable();
 
       Dt.Clear();
 
       OleDbDataAdapter Da = new OleDbDataAdapter(Cmd);
 
       if (Con.State == ConnectionState.Closed)
 
           Con.Open();
 
       Da.Fill(Dt);
 
       Cmd.Dispose();
 
       return Dt;
 
   }

 
   public static DataTable SelectWithInteger(string TblNmaestring[] Filedsstring CondFiledint ID)
 
   {

 
       if (Fileds.Length == 0)
 
       {
 
           MessageBox.Show("تاكد من ملئ مصفوفة الحقول");
 
           return null;
 
       }

 
       string SelectStatement "Select ";
 
       string SetFileds "";
 
       foreach (string str in Fileds)
 
       {
 
           SetFileds += str ",";
 
       }

 
       if (SetFileds.EndsWith(","))
 
           SetFileds SetFileds.Remove(SetFileds.Length  11);

 
       SelectStatement += SetFileds " From " TblNmae " Where " CondFiled " Like '" ID "' ";
 
       if (Con.ConnectionString == null)
 
           Con.ConnectionString ConnectionString;
 
       OleDbCommand Cmd = new OleDbCommand(SelectStatementCon);
 
       DataTable Dt = new DataTable();
 
       Dt.Clear();
 
       OleDbDataAdapter Da = new OleDbDataAdapter(Cmd);
 
       if (Con.State == ConnectionState.Closed)
 
           Con.Open();
 
       Da.Fill(Dt);
 
       Cmd.Dispose();
 
       return Dt;
 
   }


 
   public static DataTable SelectFTableNormal(string TblNmaestring[] Fileds)
 
   {
 
       if (Fileds.Length == 0)
 
       {
 
           MessageBox.Show("تاكد من ملئ مصفوفة الحقول");
 
           return null;
 
       }

 
       string SelectStatement "Select ";
 
       string SetFileds "";
 
       foreach (string str in Fileds)
 
       {
 
           SetFileds += str ",";
 
       }

 
       if (SetFileds.EndsWith(","))
 
           SetFileds SetFileds.Remove(SetFileds.Length 11);

 
       SelectStatement += SetFileds " From " TblNmae;
 
       if (Con.ConnectionString == null)
 
           Con.ConnectionString ConnectionString;
 
       OleDbCommand Cmd = new OleDbCommand(SelectStatementCon);
 
       DataTable Dt = new DataTable();
 
       Dt.Clear();
 
       OleDbDataAdapter Da = new OleDbDataAdapter(Cmd);
 
       if (Con.State == ConnectionState.Closed)
 
           Con.Open();
 
       Da.Fill(Dt);
 
       Cmd.Dispose();
 
       return Dt;
 
   }

 
   public static string GetFiled(string ReturnFiledstring Tblstring CondFiledstring Id)
 
   {
 
       string serch "";
 
       serch "Select " ReturnFiled " From " Tbl " Where " CondFiled " Like '" Id "' ";

 
       OleDbCommand Cmd = new OleDbCommand(serchCon);
 
       string ReturnResult "";
 
       OpenConnect();
 
       OleDbDataReader red Cmd.ExecuteReader();
 
       while (red.Read())
 
       {
 
           if (red.HasRows)
 
           {
 
               if ((red[ReturnFiled] != null) | red[ReturnFiled].ToString().Length 0)
 
               {
 
                   ReturnResult red[ReturnFiled].ToString();
 
               }
 
               else
                
{
 
                   ReturnResult null;
 
               }
 
           }
 
       }
 
       red.Close();
 
       Cmd.Dispose();
 
       CloseConnect();
 
       return ReturnResult;
 
   }


و هذا كود النموذج
PHP كود :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
 
   public partial class TForm Form
    
{
 
       public TForm()
 
       {
 
           InitializeComponent();
 
       }


 
   DataTable TB_Content,TB_F ,TB_M = new DataTable();
 
   string[] Fileds null;

 
       private void Cmb_F_SelectedIndexChanged(object senderEventArgs e)
 
       {
 
           Fileds = new string[] {"Cont_ID","Cont_Title"};
 
           TB_Content Connect.SelectWithInteger("TB_Content"Fileds"MF_ID"int.Parse(Cmb_F.SelectedValue.ToString() ));
 
           ListContent.DataSource TB_Content;
 
           ListContent.DisplayMember "Cont_Title";
 
           ListContent.ValueMember "Cont_ID";
 
       }


 
       private void ListContent_SelectedIndexChanged(object senderEventArgs e)
 
       {
 
           if (!(ListContent.SelectedValue is DataRowView))
 
           {
 
               richTextBox1.Text =Connect GetFiled("Content""TB_Content""Cont_ID"ListContent.SelectedValue.ToString());
 
           }

 
       }

 
       

        private void TForm_Load
(object senderEventArgs e)
 
       {
 
           Fileds = new string[] {"M_ID","M_Name"};
 
           TB_M Connect.SelectFTableNormal("TB_M"Fileds);
 
           Cmb_M.DataSource TB_M;
 
           Cmb_M.DisplayMember "M_Name";
 
       }

 
       private void Cmb_M_SelectedIndexChanged(object senderEventArgs e)
 
       {
 
           Fileds = new string[] {"MF_ID""F_Nmae"};
 
           TB_F Connect.SelectWithString("TB_MF"Fileds"M_Nmae"Cmb_M.Text);
 
           Cmb_F.DataSource TB_F;
 
           Cmb_F.DisplayMember "F_Nmae";
 
           Cmb_F.ValueMember "MF_ID";
 
       }

 
       
    
}

و بالنسبة لرسالة الخطأ لو تكون بالانكليزي يكون احسن كوني لا افقه الفرنسية
بكل الاحوال جرب هذا و بعدها شوف اذا استمرت رسالة الخطأ بالظهور اخبرني (انا لم تظهر معي الرسالة)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:
#15
الاخ عامل SetFileds.Count على شكل نص ويريد يطرح منه 1، كيف تصير!!!!

اخي استفد من الاكواد بتعديلها بما يحقق مطلبك
الرد }}}
تم الشكر بواسطة: ابو ليلى
#16
شكرا لك اخي ابو   ليالي  

اسف على تعبك معي  

using System.Linq;


using System.Threading.Tasks;

يضهرلي خطأ  بهد الكودين
الرد }}}
تم الشكر بواسطة:
#17
ازلهم اخي انت لن تستخدم هذه المكتبات حاليا
و بالنسبة لرسالة الخطأ كما اشار الاخ السرور انتبه لما تكتبه و راجعه و اكتشف الخطأ بنفسك
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:
#18
شكرا لكم وفقكم الله وزادكم علما

ياتابع الكود جيداا

بارك الله فيكك اخي الو ليالي
واسف على تعبك معي
جواك الله خيرا
الرد }}}
تم الشكر بواسطة:
#19
السلام عليكم  

هذا المثال   مرفق  لم اتوصل   لعرض القاعدة في البرنامج

تم   العرض    عند تغير  مكان   القاعدة    ووضعخا بالدايفر c

public static string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\TestDb.accdb";



ادا كان  عندي كتاب   pdf  على الشيكة  اي على الانترنت  
ووضعت الرابط الخاص به في الفاعدة  كيف  يمكن عرضه في البرنامج  دون ان اقوم بتنزيله  على الجخاز 


الملفات المرفقة
.zip   dt1.zip (الحجم : 143.19 ك ب / التحميلات : 43)
الرد }}}
تم الشكر بواسطة:
#20
لا تتوقع ان تجد لدي جواب لكل سؤال , انا ان احتجت لشيئ ابحث عنه و اتعلمه

حاول ان تبحث في الشبكة , و ستجد الكثير قبلك قد سأل هذا السؤال و ستجد الاجابة ان شاء الله
--------------------------
جرب المكتبة iTextSharp فيها ما يفيدك في التعامل مع ملفات Pdf
http://jadn.co.uk/w/ReadPdfUsingCsharp.htm
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: