تقييم الموضوع :
  • 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
لقد بحثت قليلا ووجدت بعض الاجابات بانه لا يقبل المتغيرات اصلا ولكن يقبل الثوابت والدوال والاجراءات
فكنت محتاج تأكيد من أساتذتى في المنتدى على هذة المعلومة
هل هي صحيحة أم خاطئة ؟
وإن كانت صحيحة الا توجد اي طريقة غير مباشرة لاستدعاء متغيرات عامة واعطائها قيمة باستخدام هذا الاسلوب
وإن كانت خاطئة فكيف هي الطريقة 

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] استفسار :- بخصوص نقل الداتا من DataGridView عن طريق CheckBoxColumn dubai.eig 3 31 أمس, 08:09 PM
آخر رد: عبدالله الدوسري
  سؤال عن تفعيل البرنامج عن طريق الفلاش ميمورى asemshahen5 7 199 07-10-18, 09:48 PM
آخر رد: %Eman%
  [سؤال] إستفسار عن البحث في حقول تم تشفيرها princelovelorn 7 92 03-10-18, 07:58 PM
آخر رد: princelovelorn
  [سؤال] ما هي طريقة انشاء قاعدة sql بواسطة script برمجيا عن طريق vb.net princelovelorn 12 433 01-09-18, 03:52 PM
آخر رد: elgokr
  تعبئة الداتا جريد فيو عن طريق اختيار الكومبو بوكس فراس الغزي 7 273 18-08-18, 05:49 PM
آخر رد: elgokr
  فتح فورم عن طريق ProgressBar كريم جودي 13 351 15-08-18, 07:04 AM
آخر رد: elgokr
  [VB.NET] تعبية داتا قريدفيو في شاشة البيع عن طريق كود المنتج عبدالرحمن بشري عمر 2 171 13-08-18, 08:23 PM
آخر رد: elgokr
  [VB.NET] ادخال عدة سطور للداتا جرد فيو عن طريق عمل لوب هاني المومني 5 164 26-07-18, 11:43 PM
آخر رد: elgokr
Sad [VB.NET] اريد تشغيل شرط if لو متغير رقم" 0" خلال دقيقتين انو ينفذ امر كذا kalshsami 7 212 22-07-18, 10:18 AM
آخر رد: mrnooo2000
Wink التعامل مع الـBluetooth عن طريق برنامجك YousefOkasha 4 886 16-07-18, 04:18 PM
آخر رد: YousefOkasha

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


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