تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] إستفسار عن إستدعاء متغير عام عن طريق الواجهات Interface
#1
السلام عليكم ورحمة الله وبركاته
أقوم حاليا بدراسة الموضوع التالي

إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll

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

الرابط

السؤال هو كيف أستدعي متغير عام موجود في كلاس في مشروع ال dll الثاني
الى المشروع الأول interface

sqlstr__
هو المتغير في هذة الحالة
كود :
public sqlstr__ as string
   Dim sqlcon As New OleDb.OleDbConnection

   Public Sub New()
       Dim Path_ = "C:\Users\asd\Documents\Visual Studio 2012\Projects\wininter\wininter\bin\Debug"
       sqlcon = New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" & Path_ & "\Myasd.DLL ;user id=admin;jet oledb:database password=1234567890")
   End Sub
   Public Sub open_con() Implements asd.Cls_Con_ACES.open_con
       If sqlcon.State = ConnectionState.Closed Then
           sqlcon.Open()
       End If
   End Sub
   Public Sub close_con() Implements asd.Cls_Con_ACES.close_con
       If sqlcon.State = ConnectionState.Open Then
           sqlcon.Close()
       End If
   End Sub



نص الأتصال دائما مع قواعد الأكسس نستخدم معه  Application.StartupPath &  لتحديد مسار البرنامج
إلا انه لا تنجح معي في هذة الحالة ولا اعلم لماذا 
فحاولت إنشاء متغير عام لجملة الأتصال حتى أستطيع وضع Application.StartupPath & 
فلم أستطع ان أصل لطريقة الاستخدام

وجزاكم الله خيرا
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:
#2
ضع المكتبة مع ملفات المشروع عند التجريب و استدعها من هناك .
الرد
تم الشكر بواسطة: rnmr , princelovelorn
#3
(06-10-18, 11:20 PM)asemshahen5 كتب : ضع المكتبة مع ملفات المشروع عند التجريب و استدعها من هناك .

مثل ما تقول حضرتك إذا وضعتها مع ملفات المشروع اي اضفتها في الرفرانس  سيتم ظهورها بجانب ملفات المشروع وسيتم الاستدعاء بدون اي مشكلة 
ولكن المكتبة مرفقة بالفعل مع المشروع ولكن من الريسورس وبخاصية Embedded Resource
وذلك الغرض الاساسي من الفكرة انها لا تظهر كملف مع ملفات المشروع
الفكرة مذكورة في هذا الموضوع للافادة ولكى أوضح لك ماأقصده أخي الفاضل
تشفير الملفات التنفيذية
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:
#4
جرب هذا بالكلاس :

كود :
Public Class ConnectionXT
   Dim sqlcon As New OleDb.OleDbConnection
   Public Sub ConnString(Path As String)
       sqlcon = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";Jet OLEDB:Database Password=;")
       If sqlcon.State = ConnectionState.Closed Then
           sqlcon.Open()
       End If
   End Sub
End Class
و عند استدعائها بالكود التالي :
كود :
Dim StrConn As New ConnectionXT
StrConn.ConnString(Application.StartupPath & "\Database1.accdb")
الرد
تم الشكر بواسطة: rnmr
#5
(07-10-18, 12:07 AM)asemshahen5 كتب : جرب هذا بالكلاس :

كود :
Public Class ConnectionXT
   Dim sqlcon As New OleDb.OleDbConnection
   Public Sub ConnString(Path As String)
       sqlcon = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";Jet OLEDB:Database Password=;")
       If sqlcon.State = ConnectionState.Closed Then
           sqlcon.Open()
       End If
   End Sub
End Class
و عند استدعائها بالكود التالي :
كود :
Dim StrConn As New ConnectionXT
StrConn.ConnString(Application.StartupPath & "\Database1.accdb")

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

وايضا اسلوب استدعاء الكلاسات من المكتبة باسلوب ال interface مختلف ولا تنفع معه هذا الاستدعاء
انظر لكود استددعاء كلاس كامل 

كود :
Module M_Con_SQL
   Dim buffer As Byte() = My.Resources.asdDll
   ' تحميل الملف
   Dim dll As System.Reflection.Assembly = System.Reflection.Assembly.Load(buffer)
   '--------------------------------------
   ' تعريف متغير يعبر عن اسم الكلاس في المشروع الثاني شاملا الاسم الخاص بفضاء الأسماء الموجود بها الكلاس
   Dim dllName As String = "asdDll.Cls_Con_SQL"
   Dim t As Type = dll.GetType(dllName)
   ' أخيرا نحصل علي الواجهة كالتالي
   Public mycls_SQL As Cls_Con_SQL = CType(Activator.CreateInstance(t), Cls_Con_SQL)
   ' اخيرا نستخدم الدالة الموجودة في الواجهة
   '-------------------------------------
End Module
كل كلاس يتم استدعائة من المكتبة عن طريق الكود السابق  ثم تجد كل الاجراءات والدوال تحت أمرك  بشرط ان تكون موجودة ومصرح عنها في مشروع ال interface
والحمد لله والفضل لله كل شئ يعمل تمام الا هذة المشكلة وهى نص الاتصال
فانا اريده كما اشرت سابقا عن طريق مسار البرنامج برمجيا 
وملحوظة لو وضعت المسار الفعلى نصيا يعمل الكود بدون اي مشكلة  ولكن لا يصلح ذلك عمليا  فنا اريد البرنامج حر التحرك وليس مقيد بمسار ثابت
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة: rnmr
#6
جرب هذا :

كود :
   Public Sub New()
       Dim Path_ = My.Application.Info.DirectoryPath.ToString
       sqlcon = New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" & Path_ & "\Myasd.DLL;user id=admin;jet oledb:database password=1234567890")
   End Sub


أو هذا :

كود :
   Public Sub New()
       sqlcon = New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\Myasd.DLL;user id=admin;jet oledb:database password=1234567890")
   End Sub
الرد
تم الشكر بواسطة: rnmr , rnmr , princelovelorn
#7
(07-10-18, 01:35 AM)asemshahen5 كتب : جرب هذا :

كود :
   Public Sub New()
       Dim Path_ = My.Application.Info.DirectoryPath.ToString
       sqlcon = New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" & Path_ & "\Myasd.DLL;user id=admin;jet oledb:database password=1234567890")
   End Sub


أو هذا :

كود :
   Public Sub New()
       sqlcon = New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\Myasd.DLL;user id=admin;jet oledb:database password=1234567890")
   End Sub

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

والحمد لله والشكر لله
وشكرا لكل أساتذتي وأخواني في المنتدى
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  وضع نظام سيريال لبرنامج عن طريق الاستضافه YousefOkasha 8 270 09-06-19, 08:59 PM
آخر رد: YousefOkasha
  أريد ان انفذ امر عن طريق SSH لجهاز اندرويد عن طريق VB.NET mohammadsaeed01 5 119 20-04-19, 02:07 PM
آخر رد: elgokr
  [سؤال] كيف اضافة صورة عن طريق الاسكانر وهج الصحراء 2 153 19-04-19, 12:42 PM
آخر رد: elgokr
  بحاول اعرف متغير بشكل ده dim rep as new crystal report hedra samir 10 335 21-03-19, 10:34 PM
آخر رد: hedra samir
  السلام عليكم محتاج كود صغير للبحث داخل الكمبو بوكس عن طريق الكمبو بوكس نفسه mohamedgadain61 2 181 19-03-19, 04:07 PM
آخر رد: mohamedgadain61
  [VB.NET] وضع إسم الفورم و إسم البانيل في متغير sniperjawadino 6 280 01-03-19, 10:04 PM
آخر رد: sniperjawadino
  مطلوب عرض تفاصيل بيانات داخل Texbox عن طريق ListView ... احتاج كود استعلام mohamedgadain61 9 433 30-01-19, 06:42 AM
آخر رد: حريف برمجة
Exclamation [كود] احتاج كود لحفظ التغيرات اللتي بالفورم عن طريق الريجستري YousefOkasha 3 592 01-01-19, 01:12 AM
آخر رد: YousefOkasha
  [VB.NET] سؤال عن حفظ ملف معد بـ FileStream عن طريق SaveFileDialog عماد البشبيشى 0 165 23-12-18, 01:17 AM
آخر رد: عماد البشبيشى
  سؤال بخصوص البحث باستخدام التاريخ عن طريق WebService masry4u 3 307 08-12-18, 08:36 PM
آخر رد: masry4u

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


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