منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : التفريق بين الإتصال المباشر والغير مباشر ( المتصل و المنفصل)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

أصدقائي كتب الكود التالي ووضعته في الكلاس
Imports System.Data.OleDb
Public Class DBConnect
    ' Public Con As New OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data source = |DataDirectory|\stordb.accdb")
    Public ds As DataSet
    Public da As OleDbDataAdapter
    Public dv As DataView
    Public Cmd As OleDbCommand
    Public sql As String

    Sub FillDataSet(sql As String, TableName As String)
        ds = New DataSet
        da = New OleDbDataAdapter(sql, Con)
        da.Fill(ds, TableName)
        dv = New DataView(ds.Tables(TableName))
    End Sub
End Class
والكود التالي في الفورم

Public Class Form1
    Dim MyConnect As DBConnect
   
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MyConnect.FillDataSet("SELECT * FROM Store", "Store")

        DataGridView1.DataSource = MyConnect.dv
    End Sub
End Class
الكود في الأصل كان يتعامل مع قواعد البيانات من نوع سكول ولاكن عدلته ليتعامل مع قواعد البيانات أكسس ولاكن يظهر لي خطأ لم أعرف سببه وهذا محتواه

An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication19.exe

Additional information: Object reference not set to an instance of an object.
أرجو المساعدة لو سمحتم
معنى الرساله انه ينقص كلمه new ضع  new فى التعريفات 



dim ds as new sataset و هكذا
ألف شكر أخي vb2010 لقد أصبت في إجابتك 

أخي كيف لك أن تفهم فحوى الخطأ

أخي لو سمحت مانوع هذا الإتصال ( أليس هوا من النوع المباشر ) أم أنا مخطئ
(28-11-18, 06:42 PM)+yassen+ كتب : [ -> ]
ألف شكر أخي vb2010 لقد أصبت في إجابتك 

أخي كيف لك أن تفهم فحوى الخطأ

أخي لو سمحت مانوع هذا الإتصال ( أليس هوا من النوع المباشر ) أم أنا مخطئ

لا اخي هذا اتصال غير
مباشر فالاتصال المباشر
هو الاتصال بوسطة
الفيجول دون اي اكود.
وهذا الرابط يوضح كيفية
الاتصال المباشر.
https://youtu.be/NndueeFojwg
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------refrence يعنى نسخه يعنى نيو
أخي اسامه الهرماوي الذي أعرفه أن كلا النوعين من  الإتصال سواء مباشر أم غير مباشر يمكن كتبتهم بالكود ولاكن الإختلاف في كتابة الكود 
حسب ما أنا فاهم إن عند إستخدام DataTable يكون الإتصال غير مباشر أي أنك تستدعي الجدول كامل في الذاكرة تم تقوم بالتعديل عليه وحفظه أي إستيراد كامل سجلات الجدول دفعة واحدة

فهل من تعليق للإخوة لتوضيح أكثر
الفرق بين الاتصالين هو ان الاتصال المنفصل يستعمل الداتا ادابتر اما المتصل المباشر يستعمل الكوماند و فتح وغلق الاتصال كل شويه و هو ممل ارجو تقييمى
(28-11-18, 07:16 PM)vb2010 كتب : [ -> ]الفرق بين الاتصالين هو ان الاتصال المنفصل يستعمل الداتا ادابتر اما المنفصل المباشر يستعمل الكوماند و فتح وغلق الاتصال كل شويه و هو ممل ارجو تقييمى

أعتقد والله أعلم أن كلامك صحيح وهذا الذي انا أعرفة  ... إذاً إتصالي كان من النوع الغير مباشر او المنفصل 


في إنتظار التوضيح أكثر من الإخوة
الوضع المتصل يستخدم Command ويقرأ البيانات بواسطة DataReader
ويضل الإتصال مفتوح طوال فترة قراءة البيانات
كود :
' Connected mode الوضع المتصل

' Command يستخدم
' DataReader يبقى الإتصال مفتوح لحين الإنتهاء من قراءة البيانات بواسطة

Dim cmd As New OleDbCommand("SELECT * FROM [tb1]", cnn)

cnn.Open()

Dim reader As OleDbDataReader = cmd.ExecuteReader
While reader.Read
   MsgBox(reader.Item("Name"))
End While

cnn.Close()



الوضع المنفصل يستخدم DataAdapter ويقرأ البيانات كاملة ويضعها في جدول مؤقت DataTable
ويغلق الإتصال مباشرة بعد تعبئة الجدول المؤقت
كود :
' Disconnected mode الوضع المنفصل

' DataAdapter يستخدم
' DataTable يغلق الإتصال بعد شحن البيانات في الجدول المؤقت

Dim da As New OleDbDataAdapter("SELECT * FROM [tb1]", cnn)

Dim dt As New DataTable

da.Fill(dt)

For i = 0 To dt.Rows.Count - 1
   MsgBox(dt.Rows(i).Item("Name"))
Next

منقول من أحد الدروس القديمة
(28-11-18, 08:17 PM)rmnr كتب : [ -> ]الوضع المتصل يستخدم Command ويقرأ البيانات بواسطة DataReader
ويضل الإتصال مفتوح طوال فترة قراءة البيانات
كود :
' Connected mode الوضع المتصل

' Command يستخدم
' DataReader يبقى الإتصال مفتوح لحين الإنتهاء من قراءة البيانات بواسطة

Dim cmd As New OleDbCommand("SELECT * FROM [tb1]", cnn)

cnn.Open()

Dim reader As OleDbDataReader = cmd.ExecuteReader
While reader.Read
   MsgBox(reader.Item("Name"))
End While

cnn.Close()



الوضع المنفصل يستخدم DataAdapter ويقرأ البيانات كاملة ويضعها في جدول مؤقت DataTable
ويغلق الإتصال مباشرة بعد تعبئة الجدول المؤقت
كود :
' Disconnected mode الوضع المنفصل

' DataAdapter يستخدم
' DataTable يغلق الإتصال بعد شحن البيانات في الجدول المؤقت

Dim da As New OleDbDataAdapter("SELECT * FROM [tb1]", cnn)

Dim dt As New DataTable

da.Fill(dt)

For i = 0 To dt.Rows.Count - 1
   MsgBox(dt.Rows(i).Item("Name"))
Next

منقول من أحد الدروس القديمة

إذا ما نوع  الإتصال المستخدم لدي
الصفحات : 1 2