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

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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  محتاج تشفير فيديو وتشغلية عن طريق البرنامج فقط new_programer 1 112 22-02-24, 12:09 PM
آخر رد: AHMED213
  التحقق من خلال محتوى خلية عن طريق textbox صالح عبدالله 2 222 24-01-24, 12:54 PM
آخر رد: صالح عبدالله
  تشغيل الماكرو عن طريق اكواد الفجوال نيمو 0 271 03-11-23, 11:14 AM
آخر رد: نيمو
  اريد ارسال pdf عبر واتساب عن طريق ال API محتاج تعديل على الكود moh61 0 518 03-08-23, 03:41 PM
آخر رد: moh61
  [سؤال] تشغيل راديو عن طريق الانترنت أبوسعود 5 716 01-07-23, 10:34 PM
آخر رد: asmarsou
  [VB.NET] اريد كود البحث او الفلترة عن طريق تيكست بوكس و عرض النتيجة في داتا جريد فيو الحسين احمد 6 10,621 10-06-23, 01:01 PM
آخر رد: mahmoud mostafa 2023
  ربط جهازين عن طريق الانترنت (public ip) mom22jo 5 1,968 15-05-23, 12:25 AM
آخر رد: ابو محمد محمد محمد
  فتح قاعدة البيانات المحمية بكلمة مرور عن طريق الفيجوال بيسك Tajaldeen 1 658 07-03-23, 08:59 AM
آخر رد: Taha Okla
  كيفية تحديد طابعه معينه للطباعه عن طريق PrintDocument حسين ادريس 2 595 14-02-23, 11:16 PM
آخر رد: estefsar
  اختيار عنصر معين من قائمة تتولد فيها ازار عددها متغير atefkhalf2004 16 1,167 22-01-23, 12:56 AM
آخر رد: atefkhalf2004

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


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