تقييم الموضوع :
  • 1 أصوات - بمعدل 2
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] الاتصال بقاعدة البيانات على الشبكة مشكل أتعبني حقا
#1
Bug 
الاتصال بقاعدة البيانات على الشبكة مشكل أتعبني حقا

كنت أستخدم الوضع المنفصل فضهر لي عدة أخطاء فنصحني الإخوة بالمنتدى باستخدام الوضع المتصل

قمت بتحويل جميع الأكواد إلى الوضع المتصل

فأحصل على خطأ آخر في تضارب البيانات إذا ما تم نفس العميلين تعديل كمية نفس المنتوج




أرجوا من أحد الإخوة له خبرة في الإتصال في الشبكة أن ينصحني بالطريق الصحيح 
لأني إستسلمت

( أستخدم أكسس )
الرد }}}
تم الشكر بواسطة: asemshahen5
#2
ما رأيكم إخواني
الرد }}}
تم الشكر بواسطة: asemshahen5
#3
السلام عليكم و رحمة الله هذه أكواد جربتها في جهازين في نفس الوقت إضافة 10000 سجل الى قاعدة البيانات MS SQL Server و تمت عملية الاضافة دون مشاكل مع سكربت عمل الجدول و اعدت الكرة مرة ثانية زيادة بالتاكيد :

PHP كود :
Module ConnactionStingXT
    Public 
Function Cnn() As SqlClient.SqlConnection
        If My
.Settings.UserNameXT.Length 0 Then
            Dim cn 
As New SqlConnection("Data Source=" My.Settings.ServerName ";Initial Catalog=TestUpdate;Persist Security Info=True;User ID=" 

My.Settings.UserNameXT ";Password=" My.Settings.PasswordXT "")
 
           Return cn
        Else
            Dim cn 
As New SqlConnection("Data Source=" My.Settings.ServerName ";Initial Catalog=TestUpdate;integrated security=true")
 
           Return cn
        End 
If
 
   End Function
End Module

Private Sub BtnAdd_Click(sender As ObjectAs EventArgsHandles BtnAdd.Click
    For i 
dt.Rows.Count To dt.Rows.Count 10000
        Dim StrSQL 
As String "INSERT INTO TestUpdateTB (Full_Name,NoteX ) VALUES ('Test Name " "','Test Note " "')"
 
       Dim da As New SqlDataAdapter(StrSQLCnn)
 
       Dim dt1 As New DataTable
        da
.Fill(dt1)
 
       Label1.Text i
        Me
.Refresh()
 
   Next
    MsgBox
("Wen...")
End Sub

    
Private Sub BtnEdit_Click(sender As ObjectAs EventArgsHandles BtnEdit.Click
        
'عندي 40000 سجل في قاعدة البيانات للتجربة'
        For 1 To dt.Rows.Count 30000
            Dim StrSQL 
As String "UPDATE [dbo].[TestUpdateTB] SET [Full_Name] = 'Test Name " "',[NoteX] = 'Test Note " "' WHERE Id=" i
            Dim da 
As New SqlDataAdapter(StrSQLCnn)
            Dim dt1 As New DataTable
            da
.Fill(dt1)
            Label1.Text i
            Me
.Refresh()
        Next
        MsgBox
("Wen...")
    End Sub

/****** Object:  Table [dbo].[TestUpdateTB]    Script Date: 10/8/2019 7:09:41 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE 
[dbo].[TestUpdateTB](
    [
ID] [intIDENTITY(1,1NOT NULL,
    [
Full_Name] [nvarchar](255NOT NULL,
    [
NoteX] [nvarchar](255NOT NULL,
 
CONSTRAINT [IDTestUpdateTBPRIMARY KEY CLUSTERED 
(
    [
IDASC
)WITH (PAD_INDEX OFFSTATISTICS_NORECOMPUTE OFFIGNORE_DUP_KEY OFFALLOW_ROW_LOCKS ONALLOW_PAGE_LOCKS ONON [PRIMARY]
ON [PRIMARY]

GO 
و قد جربت هذا الكود على الجهازين لعمل ابديت لنفس السجل 10000 مرة في الجهازين في الوقت نفسه دون مشاكل :
PHP كود :
   Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click
        For i 
1 To dt.Rows.Count 30000
            Dim StrSQL 
As String "UPDATE [dbo].[TestUpdateTB] SET [Full_Name] = 'Test Name 1',[NoteX] = 'Test Note 1' WHERE Id=" 1
            Dim da 
As New SqlDataAdapter(StrSQLCnn)
 
           Dim dt1 As New DataTable
            da
.Fill(dt1)
 
           Label1.Text i
            Me
.Refresh()
 
       Next
        MsgBox
("Wen...")
 
   End Sub 
الرد }}}
تم الشكر بواسطة: sniperjawadino
#4
مرحباً اخى sniperjawadino
اري انك حتى هذا اليوم انك لم تحل مشكلة تعدد الاستخدام على قواعد بيانات الـ Access

فى البداية اخى الفاضل المشكلة تقع فى الصورة لديك
عند اتمام عملية الحذف بانه غير قادر لا اعلم ما هى الطريقة المستخدمة
فى الاتصال بقاعدة البيانات لكل جهاز هل قمت بتطبيق الدرس بالتوقيع الذى تحدثنا عليه مسبقاً
فاذا نهم فهنا يبقي الجزء الاخير فقط وهو التاكد من اتمام اغلاق قاعدة البيانات مع كل عملية

المشكلة التى تقع بها فى الكود لديك
انك اختصرت كود فتح واغلاق قاعدة البيانات
حيث قمت بضم الاضافة والتعديل والحذف بداخلهم
فهنا اصبح عملية اغلاق قاعدة البيانات وقت اكبر حتى يقوم بالمرور على الاكواد كلها
تعال نتخيل اذا كان كود فتح والاغلاق يتوى على كود الحذف فقط يستغرق 1.2 ثانية تقريباً
مع الطريقة التى تستخدمها اصبح الاستغراق من بين 1.8 ثانية الى 2.1 ثانية تقريباً كمثال.

ولحل هذه المشكلة 
قم بوضح كود 
كود :
if cn.state = connectionstate.closed then cn.open()

اعلى كلاً من Using
وفى نهاية End Using تقوم بوضع
كود :
cn.Close()

تذكر بان كود الفتح والاغلاق تتم فقط على التعديل والحذف فقط
وليس على الاستعلام والاضافة فاستخدم الكود بالصورة الصحيحة

ثانياً من الصح استخدام التعامل مع قواعد بيانات Access
مع المكاتب الادارية الصغيرة وليس مع الكاشير وما شبه
حيث المكاتب الادارية شركة / مؤسسة / محلات يكون بها اعداد بسيطة جداً من المواظفين أو لو كان باعداد كبيرة
فعملية الحركة على قاعدة البيانات تكون بنسبة 1% الى 32% بان يكون اكثر من شخص 
يقوم بالعمل فى وقت واحد فى عملية التعديل والحذف

اما الاستخدام مثل الكاشير وما شبه لتواجد اكثر من حركة على قاعدة بيانات
فيفضل هنا استخدام قاعدة بيانات Sql أو Mysql ليس لتجنب مشكلة قاعدة بيانات Access 
او انها الافضل والاسرع ولكن لتجنب مشكلة فقداً الداتا او حذفها 
وكذلك التلاعب بها فنسبة المخاطر بالـ Access كبيرة جداً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: asemshahen5 , sniperjawadino
#5
أخي asemshahen5 
شكرا جزيلا لك على المتابعة
بعد التمعن في الكود إتضح لي أنك إستخدمت الوضع المنفصل
لكن بعد تطبيقي للكود في 3 حواسيب فقط و بعد ثواني سقطت في خطأ للأسف 





--------------------------------------------------------------------------------



أخي elgokr  
والله إني محرج معك... لأنك ساعدتني كثيرا لحل هذه المشكلة لكن لم تحل

بالنسبة للطريقة المستخدمة فى الاتصال بقاعدة البيانات لكل جهاز فأنا واضع ملف الأكسس في حاسوب و عملت له مشاركة
ووضعت رابط قاعدة البيانات في الحواسيب الأخرى هكذا     192.168.1.100\\ 
يعني ليست الطريقة التي وضعتها لنا في التوقيع
(قمت بتتبع طريقتك لكن وقعت في بعض الأخطاء و تراجعت .. سأحاول مرة أخرى)


تفسيرك أخي الجوكر إستوعبته جيدا 

إقتباس :فهنا اصبح عملية اغلاق قاعدة البيانات وقت اكبر حتى يقوم بالمرور على الاكواد كلها


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

لكتي حتى بعد إتباع ذلك وقعت في الخطأ بعد ثواني 




بسبب هذه المشاكل أنا في صدد تعلم sql server لكن هذا يحتاج لبعض الوقت أخي

ما رأيك أخي
الرد }}}
تم الشكر بواسطة: asemshahen5 , رضوان الجماعي


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] أتمنى اجابة وافية:عمل برنامج بقاعدة بيانات SQL دون حاجة تثبيت SQLSERVER dr.programming 6 657 19-03-24, 08:56 AM
آخر رد: سلامه محمد11
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 171 25-02-24, 06:29 AM
آخر رد: loay775
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 264 11-02-24, 08:43 PM
آخر رد: assuhimi
  مشكلة عدم اكتمال تنفيذ بسبب فصل الشبكة او التيار الكهربائي اثناء النتفيذ تناسيم 3 1,846 05-02-24, 10:04 PM
آخر رد: 01AHMED
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 270 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 283 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 282 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  [كود] اريد كود إرسال البيانات من الفيجوال بيسك إلىPDF issamsaidd 10 5,866 25-12-23, 06:30 PM
آخر رد: الحزين اليماني
  جملة الاتصال بقاعدة البيانات اكسس محمد خيري 4 372 12-12-23, 03:14 AM
آخر رد: محمد خيري
  كود الاتصال بقاعدة البيانات sqlserver strongriseman 2 425 29-11-23, 09:25 PM
آخر رد: العتيق

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


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