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

نسخة كاملة : رسالة خطأ ومشكلة Attempted to read or write protected memory. This is often an indica
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
الاخوة الاعضاء عندي مشكلة في برنامج عملته بالفيجوال ستوديو 2010 مع قاعدة بيانات اكسس 2010
في واحد من الفورمات يتطلب مني وضع صورة لليتيم اضافة الى تكست بوكسات للبيانات ، فعند اضافة رقم العائلة في التكست بوكس المخصص لذلك يقوم الفورم بتحميل البيانات في الداتا كرد فيو والتي تتضمن جميع الايتام بناء على رقم العائلة ، الى هنا لا مشكلة ولكن المشكلة تحدث عندما اقوم بتحميل الصورة تظهر لي رسالة الخطأ Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

اما اذا قمت بتحميل الصورة اولا قبل البدء بوضع البيانات فلا لا يحدث هذا الخطأ

وكذلك يحدث الخطأ نفسه عندما اختار اي يتيم في الداتا كرد فيو ومحاولة تحميل الصورة مرة اخرى لغرض التعديل او استبدال الصورة ..
حاولت ان اعالج الموضوع من خلال 
tools/options/debugging//general/
ثم الغاء علامة الصح من المربع suppress JIT optimization on module load
ولم تنفع المحاولة

اما في حالة تغيير ال CPU Target الى النظام 64 فلا يتم تحميل البيانات اصلا في الداتا كرد فيو

وفي ادناه الكود كاملا

لكم كل الود والاحترام

ملاحظة : الخطأ يظهر في العبارة 
 If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.Cancel Then

يرجى ممن لديه حل ان يراسلني على ايميلي اضافة الى وضع الجواب هنا ليستفاد منه الجميع riya_falcon@hotmail.com


PHP كود :
Imports System.Data.OleDb
Imports System
.IO

Public Class fam3
    Dim dt 
As New DataTable
    Dim da 
As New OleDbDataAdapter
    Dim pathcopy 
As String
    Dim picname 
As String
    Dim pathpast 
As String
    Dim save 
As OleDbCommandBuilder
    Public Sub cleardata
()

 
       TextBox2.Text ""
 
       TextBox3.Text ""
 
       TextBox4.Text ""
 
       TextBox5.Text ""
 
       ComboBox1.Text ""
 
       ComboBox2.Text ""
 
       PictureBox1.Image Nothing

        TextBox2
.Enabled False
        TextBox3
.Enabled False
        ComboBox1
.Enabled False
        ComboBox2
.Enabled False
        TextBox4
.Enabled False
        DateTimePicker1
.Enabled False
        Button3
.Enabled False
        shart
()
 
   End Sub
    Public Sub changedt
()
 
       DateTimePicker2.Value DateTimePicker1.Value.AddYears(15)
 
       If DateTimePicker2.Value Date.Today Then
            MsgBox
("عمر اليتيم تجاوز سن الخامسة عشر سنة", , "تنبيه اداري")
 
           Return
        End 
If
 
   End Sub
    Public Sub load_faml
()
 
       Try

            Dim dt3 
As New DataTable
            Dim da3 
As New OleDbDataAdapter
            dt3
.Clear()
 
           da3 = New OleDbDataAdapter("SELECT na , birth , gender , id_num , graduate , notes , ageend , img , famid FROM family "con)
 
           da3.Fill(dt3)

 
           DataGridView2.DataSource dt3

            
'=====================================

            For i As Integer = 0 To Me.DataGridView2.RowCount - 1
                If Me.DataGridView2(7, i).Value < Date.Now Then
                    Me.DataGridView2.Rows(i).DefaultCellStyle.BackColor = Color.Red
               
                End If
            Next
            DataGridView2.Columns(0).HeaderText = "اليتيم"
            DataGridView2.Columns(1).HeaderText = "التولد"
            DataGridView2.Columns(2).HeaderText = "الجنس"
            DataGridView2.Columns(3).HeaderText = "رقم الجنسية"
            DataGridView2.Columns(4).HeaderText = "الدراسة"
            DataGridView2.Columns(5).HeaderText = "الملاحظات"
            DataGridView2.Columns(6).HeaderText = "تاريخ البلوغ"
            DataGridView2.Columns(7).HeaderText = "مسار الصورة"
            DataGridView2.Columns(8).HeaderText = "رقم العائلة"


        Catch ex As Exception

        End Try
    End Sub
    Public Sub load_faml2()
        Try

            Dim dt3 As New DataTable
            Dim da3 As New OleDbDataAdapter
            dt3.Clear()
            da3 = New OleDbDataAdapter("SELECT na , birth , gender , id_num , graduate , notes , ageend , img , famid FROM family where famid = " & TextBox5.Text & " ", con)
            da3.Fill(dt3)

            DataGridView2.DataSource = dt3

            '
=====================================

 
           For i As Integer 0 To Me.DataGridView2.RowCount 1
                If Me
.DataGridView2(7i).Value Date.Now Then
                    Me
.DataGridView2.Rows(i).DefaultCellStyle.BackColor Color.Red

                End 
If
 
           Next
            DataGridView2
.Columns(0).HeaderText "اليتيم"
 
           DataGridView2.Columns(1).HeaderText "التولد"
 
           DataGridView2.Columns(2).HeaderText "الجنس"
 
           DataGridView2.Columns(3).HeaderText "رقم الجنسية"
 
           DataGridView2.Columns(4).HeaderText "الدراسة"
 
           DataGridView2.Columns(5).HeaderText "الملاحظات"
 
           DataGridView2.Columns(6).HeaderText "تاريخ البلوغ"
 
           DataGridView2.Columns(7).HeaderText "مسار الصورة"
 
           DataGridView2.Columns(8).HeaderText "رقم العائلة"


 
       Catch ex As Exception

        End 
Try
 
   End Sub
    Public Sub shart
()
 
       If TextBox5.Text Nothing Or TextBox2.Text Nothing Or ComboBox1.Text Nothing Or ComboBox2.Text Nothing Or TextBox3.Text Nothing Then
            Button3
.Enabled False
        Else
            Button3
.Enabled True



        End 
If

 
   End Sub
    Private Sub fam3_Load
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        load_faml
()
 
   End Sub
   
    Private Sub Button1_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Try
            OpenFileDialog1
.Filter "jpg|*.jpg|bmp|*.bmp"
 
           If OpenFileDialog1.ShowDialog Windows.Forms.DialogResult.Cancel Then
                MsgBox
("لم يتم اختيار صورة")
 
           Else
                PictureBox1
.Image Image.FromFile(OpenFileDialog1.FileName)

 
           End If
 
       Catch ex As Exception

        End 
Try
 
   End Sub


    Private Sub Button3_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button3.Click
        Dim dt2 
As New DataTable
        Dim da2 
As New OleDbDataAdapter
        dt2
.Clear()
 
       da2 = New OleDbDataAdapter("select * from family where id_num = '" TextBox3.Text "' and famid = " TextBox5.Text " and na = '" TextBox2.Text "' "con)
 
       da2.Fill(dt2)
 
       If dt2.Rows.Count 0 Then
            MsgBox
("الاسم موجود مسبقا "MsgBoxStyle.Critical"بيانات مكررة")
 
           Return

        ElseIf DateTimePicker2
.Value Date.Today Then
            MsgBox
("عمر اليتيم تجاوز سن الخامسة عشرة سنة", , "تنبيه اداري")
 
           Return
        End 
If
 
       If TextBox5.Text Nothing Then

            MsgBox
("يرجى اختيار رقم العائلة", , "تنبيه اداري")
 
           Return
        ElseIf TextBox2
.Text Nothing Then
            MsgBox
("يرجى ادخال اسم اليتيم", , "تنبيه اداري")
 
           Return
        ElseIf TextBox3
.Text Nothing Then
            MsgBox
("يرجى ادخال رقم الجنسية", , "تنبيه اداري")
 
           Return
        ElseIf ComboBox1
.Text Nothing Then
            MsgBox
("يرجى اختيار الجنس", , "تنبيه اداري")

 
           Return
        Else
            pathcopy 
OpenFileDialog1.FileName
            picname 
System.IO.Path.GetFileName(OpenFileDialog1.FileName)
 
           pathpast Application.StartupPath "\pics\" & picname
            Try
                My.Computer.FileSystem.CopyFile(pathcopy, pathpast)

            Catch ex As Exception
                MsgBox("
اسم الصورة موجود مسبقا ... يرجى تغيير اسم الصورة قبل الحفظ")
                Return
            End Try

            Dim cmd As New OleDbCommand
            cmd = New OleDbCommand("
insert into family na img birth gender id_num graduate notes ageend famidvalues ('" & TextBox2.Text & "' '" & pathpast & "' #" & DateTimePicker1.Value.ToString("yyyy/MM/dd") & "# , '" & ComboBox1.Text & "' , '" & TextBox3.Text & "' , '" & ComboBox2.Text & "' , '" & TextBox4.Text & "' , #" & DateTimePicker2.Value.ToString("yyyy/MM/dd") & "# , " & TextBox5.Text & " )", con)
 
           con.Open()
 
           cmd.ExecuteNonQuery()
 
           con.Close()

 
           MsgBox("")
 
           cleardata()
 
           load_faml()
 
       End If
 
   End Sub

    Private Sub TextBox1_TextChanged
(ByVal sender As System.ObjectByVal e As System.EventArgs)


 
   End Sub

    Private Sub DateTimePicker1_ValueChanged
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles DateTimePicker1.ValueChanged
        changedt
()
 
   End Sub

    Private Sub ComboBox1_SelectedIndexChanged
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ComboBox1.SelectedIndexChanged
        shart
()
 
   End Sub

    Private Sub ComboBox2_SelectedIndexChanged
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ComboBox2.SelectedIndexChanged
        shart
()
 
   End Sub

    Private Sub TextBox2_TextChanged
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles TextBox2.TextChanged
        shart
()
 
   End Sub

    Private Sub TextBox3_TextChanged
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles TextBox3.TextChanged
        shart
()
 
   End Sub

    Private Sub DataGridView2_CellClick
(ByVal sender As ObjectByVal e As System.Windows.Forms.DataGridViewCellEventArgsHandles DataGridView2.CellClick
        Dim value 
As Object DataGridView2.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
        If IsDBNull
(valueThen
            TextBox2
.Text ""
 
           DateTimePicker1.Value ""
 
           ComboBox1.Text ""
 
           ComboBox2.Text ""
 
           TextBox3.Text ""
 
           TextBox5.Text ""
 
           DateTimePicker1.Value ""
 
       Else
            Try
                
'na, birth, gender, id_num, graduate, notes, ageend, img, famid
                TextBox2.Text = DataGridView2.Item(0, DataGridView2.CurrentRow.Index).Value
                DateTimePicker1.Value = DataGridView2.Item(1, DataGridView2.CurrentRow.Index).Value
                ComboBox1.Text = DataGridView2.Item(2, DataGridView2.CurrentRow.Index).Value
                TextBox3.Text = DataGridView2.Item(3, DataGridView2.CurrentRow.Index).Value
                ComboBox2.Text = DataGridView2.Item(4, DataGridView2.CurrentRow.Index).Value
                TextBox4.Text = DataGridView2.Item(5, DataGridView2.CurrentRow.Index).Value
                DateTimePicker2.Value = DataGridView2.Item(6, DataGridView2.CurrentRow.Index).Value
                If DataGridView2.CurrentRow.Cells(7).Value = Nothing Then
                    PictureBox1.Image = Nothing
                Else
                    PictureBox1.Image = Image.FromFile(DataGridView2.CurrentRow.Cells(7).Value)
                End If

                TextBox5.Text = DataGridView2.Item(8, DataGridView2.CurrentRow.Index).Value

            Catch ex As Exception

            End Try


        End If
    End Sub

    Public cmd As New OleDbCommand
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        pathcopy = OpenFileDialog1.FileName
        picname = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
        pathpast = Application.StartupPath & "\pics\" & picname
        Try
            My.Computer.FileSystem.CopyFile(pathcopy, pathpast)

        Catch ex As Exception
            MsgBox("اسم الصورة موجود مسبقا ... يرجى تغيير اسم الصورة قبل الحفظ")
            Return
        End Try
        cmd = New OleDbCommand("update family set id_num = '" & TextBox3.Text & "' , gender = '" & ComboBox1.Text & "' , graduate = '" & ComboBox2.Text & "' , notes = '" & TextBox4.Text & "' , ageend =  #" & DateTimePicker2.Value.ToString("yyyy/MM/dd") & "# , img = '" & pathpast & "' where na = '" & TextBox2.Text & "' and famid = " & TextBox5.Text & "  ", con)
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()
        MsgBox("تم تعديل البيانات", , "تعديل البيانات")
        load_faml()
        TextBox2.Text = ""
        DateTimePicker1.Value = Now.Date
        ComboBox1.Text = Nothing
        ComboBox2.Text = Nothing
        TextBox3.Text = ""
        TextBox5.Text = ""





    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If MsgBox("هل بالفعل تريد الحذف ؟", MsgBoxStyle.OkCancel, "تأكيد الحذف") = MsgBoxResult.Ok Then

            Dim cmd As New OleDbCommand("delete from family where na = '" & TextBox2.Text & "' and famid = " & TextBox5.Text & "", con)
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
            MsgBox("تم الحذف", , "حذف بيانات  ")
            load_faml()
            TextBox2.Text = ""
            TextBox3.Text = ""
            TextBox5.Text = ""
            ComboBox1.Text = Nothing
            ComboBox2.Text = Nothing
        Else
        End If
    End Sub

   
    Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged
        '
Try
 
       Dim dt2 As New DataTable
        Dim da2 
As New OleDbDataAdapter
        dt2
.Clear()
 
       da2 = New OleDbDataAdapter("SELECT yatim_ID FROM itams where yatim_ID like '%" TextBox5.Text "%' "con)
 
       da2.Fill(dt2)

 
       If dt2.Rows.Count 0 Then
            load_faml2
()
 
       Else

            load_faml
()
 
           TextBox5.Text Nothing
            MsgBox
("لا يوجد عائلة تحمل هذا الرقم")
 
       End If

 
       shart()
 
   End Sub
End 
Class 
وعليكم السلام ورحمة الله وبركاته

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

تحياتى لك
وتمنياتى لك التوفيق
اخي العزيز الجوكر elgokr



تم ارفاق المشروع بالكامل .... شكرا لتفاعلك ودمت طيبا
تفضل المثال بعد التعديل :
ما زالت نفس المشكلة تواجهني Huh Huh Huh Huh Huh 
على العموم ربما تكون المشكلة ان نظام التشغيل الذي اعمل عليه يعمل ينظام 64 و المشروع مصمم لنظام 32
سوف استخدم كومبيوتر يعمل بال 32

جزاك الله خير ما قصرت
عمل عندي دون مشاكل بالنسبة لنظام التشغيل عندي أيضا 64 بت .
ضع لي صورة الخطأ .
حسنا يا صديقي ...
سأرفق صورة الخطأ
إستبدله بهاذا الكود :

كود :
OpenFileDialog1.Filter = "All Picture|*.jpg;*.bmp;*.png"
       If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
           PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
       Else
           MsgBox("لم يتم اختيار صورة")
       End If

عدلت لك في النسخة المعدلة على الكثير من الأمور حملها و جربها المشاركة رقم 4
يبدوا انني سوف اجن في اخر المشوار !!!!!!!!!!!!!!!!!!!!!!1
لماذا
إقتباس :يبدوا انني سوف اجن في اخر المشوار !!!!!!!!!!!!!!!!!!!!!!1
الصفحات : 1 2