تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة عند ربط اكسس به دوال اجرائية بالفيجوال بيسك
#1
Photo 
قاعدة بيانات اكسس به جدول واستعلام 
الاستعلام به دوال نمطية أنشئت vba
لاستخراج بيانات من الجدول
عند ربط الاستعلام بالفيجوال بيسك تظهر رسالة خطأ كما بالصورة
وهي ان الداله  غير معرفة
مع العلم اني مبتدأ بالفيجوال بيسك

   
الرد }}}
تم الشكر بواسطة:
#2
اعطنا تفاصيل عن قاعدة البيانات وارسل الجزء الذي لايعمل ببيانات وهمية كمثال ان امكن لنساعدك
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#3
(16-11-20, 02:18 PM)Anas Mahmoud كتب : اعطنا تفاصيل عن قاعدة البيانات وارسل الجزء الذي لايعمل ببيانات وهمية كمثال ان امكن لنساعدك

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


الملفات المرفقة
.rar   student.rar (الحجم : 166.45 ك ب / التحميلات : 20)
الرد }}}
تم الشكر بواسطة: Anas Mahmoud , ابراهيم ايبو
#4
اولا اسف على التأخير في الرد انشغلت في بعض الامور ولكني وجدت وقت اخيرا لانظر في الامر ، وبعد بحث على الانترنت وجدت ان المشكلة تكمن في ان الكود المكتوب ب vba او الموديول في الاكسل لا يعمل الا داخل الاكسس فقط ، ولا يتعرف عليه محرك قاعدة البيانات oledb الذي نستخدمه للتعامل مع قاعدة البيانات خارج برنامج الاكسس وداخل بيئة الدوت نت تحديدا ،
ولا توجد طريقة للاسف لجعله مقروء بالنسبة للدوت نت 

وبالتالي اي query يستخدم اي من الكود المكتوب داخل موديول لن يتمكن الدوت نت من التعرف على الدوال الموجودة فيه

ولكن هذه ليست نهاية الموضوع

توصلت الى فكرة اظنها مناسبة وتوفر عناء كتابة الامر من جديد على VB.Net 

ما قمت به هو اني اخدت كامل الكود المكتوب في مودويل الاكسس وقمت بعمل موديول في VB.net ووضعت الكود به

التشابه بين vba و vb.net كبير الى حد ما ، الامر بحاجة فقط لبعض التعديلات مثلا 

vba.Date اصبحت Date.Now و وهكذا 


بعد ذلك اخدت كود الاستعلام من Access على هيئة SQL واستبدلت الاجزاء التي تنادي على الدوال بنص فارغ ، هكذا ينفذ الاستعلام بنجاح ويوفر لنا مكان في ال DataTable نعدل عليه 

بعد ذلك قمت بالجري على صفوف الداتا تابل واستخدمت الدوال التي في الموديول :

كود :
       Dim con As New OleDbConnection("provider = microsoft.ace.oledb.12.0 ; data source= " & Application.StartupPath & "\fullbyan.accdb")

       Dim cmdString As String = "SELECT
student.mslsl,
student.s_name,
student.s_nameenglish,
'' AS fathername,
student.s_code,
student.s_rqmqomy,
CDate(Mid([s_rqmqomy],6,2) & '/' & Mid([s_rqmqomy],4,2) & '/' & Left([s_rqmqomy],1)*100+1700+Mid([s_rqmqomy],2,2)) AS dateofbirth,
'' AS agenow,
'' AS kind,
student.s_gloos,
student.s_class1,
student.s_class,
student.s_degree,
student.s_lastschool,
student.s_address,
student.s_telephone,
'' AS town,
student.s_fatherjob,
student.s_memo,
student.s_year
FROM student;"


       Dim cmd As New OleDbCommand(cmdString, con)
       Dim dt As New DataTable


       con.Open()
       dt.Load(cmd.ExecuteReader)
       con.Close()


       For Each col As DataColumn In dt.Columns
           col.ReadOnly = False
       Next

       For Each r As DataRow In dt.Rows
           r("fathername") = MokhtarFamily(r("s_name"), 2, True)
           r("agenow") = GetAgeMonthsDays(r("dateofbirth"), True)
           r("kind") = mas_n_id_info(r("s_rqmqomy"), 2)
           r("town") = mas_n_id_info(r("s_rqmqomy"), 1)
       Next



       DataGridView1.DataSource = dt

وعملت تماما ! 

   

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

إقتباس :Time To Load data from database : 272 ms

Time To Edit data from DataTable : 23 ms
اتمنى ان تكون وصلت الصورة


الملفات المرفقة
.zip   WindowsApplication2.zip (الحجم : 251.92 ك ب / التحميلات : 22)
الرد }}}
#5
السلام عليكم استاذ انس 
اشكرك شكرا لا يكفيك فقد يسرت علي امراً عسيرا
يسر الله عليك كل عسير اسف علي التأخير في شكرك
فقد ظننت أنك نسيت فلم أتابع الموضوع بارك الله في
كل أعمالك ورحم الله والدك
الرد }}}
تم الشكر بواسطة: asemshahen5 , Anas Mahmoud



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم