تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة في نقل البرنامج الى جهاز اخر
#1
السلام عليكم 


عملت برنامج وربطته بقاعدة بيانات اكسس 
تحديث قاعدة البيانات ياخذها من اكسس من خلال اختيار القاعدة ثم تحديث ويفرغ البياات في الاكسس

كل شي ماشي كويس على جهازي 
لكن لما انقله على جهاز من خلال السيت اب لايعمل 
كذلك نقلت ملف BIN على جهاز ثاني ولا يعمل

حدث خطا اثناء تشغيل البرنامج ويغلق


ماهي الملفات اللي احتاج ارفاقها مع البرنامج نفسه ويتم تشغيله على اي جهاز
الرد }}}
تم الشكر بواسطة: ابو انس
#2
السلام عليكم ورحمة الله وبركاته
اخي الكريم سؤالك ينقصه المزيد من المعلومات ليتم معرفة المشكلة
1- تأكد من ان جهاز العميل على نسخة اكسس اصدار مثل الاصدار الذي في جهازك او اعلى
2- تأكد من جملة الاتصال وعنوان قاعدة البيانات على جهاز العميل بحيث يكون المسار مطابق لما هو في جملة الاتصال
3 - ماهي الملفات التي نقلتها وطريقة انشاء الست اب 
4 - ماهي رسالة الخطأ التي ظهرت
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: waw , dalas , ابو انس , سيف الشمال
#3
1- تأكد من ان جهاز العميل على نسخة اكسس اصدار مثل الاصدار الذي في جهازك او اعلى
تم التاكد من جهاز والجهاز الاخر لا 
هل يمكن اضافة ملفات لتشغيل الاكسس بدون برنامج اكسس على الجهاز ؟



2- تأكد من جملة الاتصال وعنوان قاعدة البيانات على جهاز العميل بحيث يكون المسار مطابق لما هو في جملة الاتصال
جملة الاتصال مطابقة لانها عن طريق باث في اعدادات البرنامج وكذلك هي  في نفس مجلد البرنامج وتم التاكد عدة مرات من عملها 

3 - ماهي الملفات التي نقلتها وطريقة انشاء الست اب 
السيتب عن طريق setup project من نفس فيجوال ستوديو
المgفات المرفقه في الصورة في المرفقات وهي جميع ملفات مجلد BIN


4 - ماهي رسالة الخطأ التي ظهرت

لك رسالة على الخاص


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , ابو انس
#4
السلام عليكم ورحمة الله وبركاته
اخي الكريم 
قم بتجربة البرنامج وعند الضغط على زر تحديث البيانات بحيث يجلبها من ملف اكسل تظهر رسالة ان قاعدة البيانات مفتوحة ولايكمل البرنامج وانت تقول انه يعمل بشكل طبيعي ؟؟؟؟ 
كانت المشكلة في اغلاق قاعدة البيانات قمت بالتعديل على جزئيات الفتح والاغلاق كلها وتم عمل البرنامج بنجاح
اليك الكود كاملا انظر الى اماكن التعديل وقارنها مع كودك الاصلي 
كود :
Imports System.Data.OleDb
Imports Microsoft.Office.Interop



Public Class Form1

   Dim PROC
   Dim path As String

   Dim conn2 As New OleDbConnection("PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE=" & My.Settings.db & ";")
   Dim conn As New OleDbConnection("PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE=" & My.Settings.path & "; EXTENDED PROPERTIES=EXCEL 12.0;")

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       Try
           SkinCrafter1.LoadSkinFromFile("skins\Arcus.skf")
           SkinCrafter1.ApplySkin()
           If My.Settings.db = "" Then
               MsgBox(" لا يوجد قاعدة بيانات متصلة ", MsgBoxStyle.MsgBoxRight & MsgBoxStyle.Information, "مدراء المدارس")
               Exit Sub
           End If

           If IO.File.Exists(My.Settings.db) Then
               If conn2.State = ConnectionState.Open Then conn2.Close()
               conn2.Open()
               Dim cmd As New OleDbCommand("select * from Leaders where SchName is not null ", conn2)

               Dim dt As New DataTable
               dt.Clear()
               dt.Load(cmd.ExecuteReader)
               If dt.Rows.Count > 0 Then
                   DataGridView2.DataSource = dt
                   For s As Integer = 0 To dt.Rows.Count - 1
                       ComboBox1.Items.Add(dt.Rows(s).Item("SchName"))
                   Next
                   Label7.Text = My.Settings.mdarsCount
                   Label15.Text = My.Settings.edart
               Else
                   My.Settings.edart = ""
                   My.Settings.mdarsCount = ""
               End If
               conn2.Close()
           Else
               MsgBox(" مسار قاعدة البيانات خاطيء ")
               Button2_Click(Nothing, Nothing)

           End If
       Catch ex As Exception
           'MsgBox(ex.Message)
           Exit Sub
       End Try

   End Sub

   Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
       If conn2.State = ConnectionState.Open Then conn2.Close()
       conn2.Open()
       Dim cmd As New OleDbCommand("select * from Leaders  where SchName=@SchName", conn2)
       cmd.Parameters.Add("SchName", OleDbType.VarChar).Value = ComboBox1.Text
       
       Dim dt As New DataTable
       dt.Clear()
       dt.Load(cmd.ExecuteReader)

       Dim h As Integer = ComboBox1.SelectedIndex
       DataGridView2.Rows(h).Selected = True
       DataGridView2.FirstDisplayedScrollingRowIndex = DataGridView2.Rows(h).Index
       DataGridView2.Rows.IndexOf(DataGridView2.CurrentRow)

       Label1.Text = dt.Rows(0).Item("SchWz")
       Label2.Text = dt.Rows(0).Item("SchName")
       Label3.Text = dt.Rows(0).Item("leaderName")
       Label4.Text = dt.Rows(0).Item("mobile").ToString
       Label5.Text = dt.Rows(0).Item("tel").ToString
       Label14.Text = dt.Rows(0).Item("mktb")
       conn2.Close()
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       conn.Close()
       conn2.Close()
       'conn3.Close()
       Me.Close()

   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
       Try
           ofd.Filter = "Excel Files(*.xlsx)|*.xlsx|All files (*.*)|*.*"
           If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
               'My.Settings.url = ofd.FileName

               If ofd.SafeFileName = "LI_HierarchySchoolAdmins.xlsx" Then
                   Dim conn3 As New OleDbConnection("PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE=" & ofd.FileName & "; EXTENDED PROPERTIES=EXCEL 12.0;")

                   If conn3.State = ConnectionState.Open Then conn3.Close()
                   conn3.Open()
                   Label16.Text = "فضلا انتظر  .."

                   Dim cmd As New OleDbCommand("select * from [LI_HierarchySchoolAdmins$] where f14 is not null", conn3)
                   Dim dt As New DataTable
                   dt.Clear()
                   dt.Load(cmd.ExecuteReader)
                   conn3.Close()
                   For f As Integer = 1 To dt.Rows.Count - 1
                       If dt.Rows(f).Item("f15").ToString = "" Then
                           dt.Rows(f).Item("f15") = dt.Rows(f - 1).Item("f15").ToString
                       Else
                           Dim ms As String = dt.Rows(f).Item("f15").ToString
                       End If
                   Next
                   DataGridView1.DataSource = dt
                   DataGridView1.Update()

                   For s As Integer = 1 To dt.Rows.Count - 1
                       ComboBox1.Items.Add(dt.Rows(s).Item("f13"))
                   Next
                   '===========نسخ قاعدة البيانات الجديدة الى القاعدة في المسار الصحيح  ======

                   Dim cmd3 As New OleDbCommand("DELETE * from Leaders", conn2)
                   If conn2.State = ConnectionState.Open Then conn2.Close()
                   conn2.Open()
                   cmd3.ExecuteNonQuery()
                   conn2.Close()

                   Timer1.Enabled = True
                   Dim cont As Integer = dt.Rows.Count - 1
                   ProgressBar1.Maximum = cont
                   ProgressBar1.Minimum = 0
                   ProgressBar1.Value = 0

                   If conn2.State = ConnectionState.Open Then conn2.Close()
                   conn2.Open()
                   For i = 1 To dt.Rows.Count - 1
                       Dim cmd2 As New OleDbCommand("INSERT INTO Leaders(SchWz,SchName,leaderName,mobile,tel,mktb) values(@SchWz,@SchName,@leaderName,@mobile,@tel,@mktb)", conn2)
                       cmd2.Parameters.AddWithValue("@SchWz", DataGridView1.Rows(i).Cells("f14").Value)
                       cmd2.Parameters.AddWithValue("@SchName", DataGridView1.Rows(i).Cells("f13").Value)
                       cmd2.Parameters.AddWithValue("@leaderName", DataGridView1.Rows(i).Cells("f5").Value)
                       cmd2.Parameters.AddWithValue("@mobile", DataGridView1.Rows(i).Cells("f4").Value)
                       cmd2.Parameters.AddWithValue("@tel", DataGridView1.Rows(i).Cells("f3").Value)
                       cmd2.Parameters.AddWithValue("@mktb", DataGridView1.Rows(i).Cells("f15").Value)

                       cmd2.ExecuteNonQuery()
                       PROC = Int((i / cont) * 100)

                       ProgressBar1.Value = i
                       ProgressBar1.Value = i - 1
                       Label16.Text = PROC & "  %"

                   Next
                   conn2.Close()
                   My.Settings.edart = dt.Rows(1).Item("f18").ToString
                   My.Settings.mdarsCount = dt.Rows.Count - 1
                   Label15.Text = My.Settings.edart
                   Label7.Text = My.Settings.mdarsCount
                   '--------------------------------
                   Dim cmd5 As New OleDbCommand("select * from Leaders where SchName is not null ", conn2)
                   If conn2.State = ConnectionState.Open Then conn2.Close()
                   conn2.Open()
                   Dim dt5 As New DataTable
                   dt5.Clear()
                   dt5.Load(cmd5.ExecuteReader)
                   DataGridView2.DataSource = dt5
                   DataGridView2.Refresh()
                   For s As Integer = 0 To dt5.Rows.Count - 1
                       ComboBox1.Items.Add(dt5.Rows(s).Item("SchName"))
                   Next
                   Label7.Text = My.Settings.mdarsCount
                   Label15.Text = My.Settings.edart
                   conn2.Close()
                   '----------------------------------
                   MsgBox("تم تحديث البيانات بنجاح", MsgBoxStyle.OkOnly & MsgBoxStyle.Information, "تنبيه")
                   Label16.Text = ""
                   '=================
               Else
                   MsgBox(" قاعدة البيانات غير متطابقة  ", MsgBoxStyle.OkOnly & MsgBoxStyle.Information, "مدراء المدارس")
               End If
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
           'Exit Sub
       Finally
           conn2.Close()
       End Try
   End Sub

   Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
       conn.Close()
   End Sub

   Private Sub DataGridView2_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView2.CellMouseClick
       Dim i As Integer = DataGridView2.Rows.IndexOf(DataGridView2.CurrentRow)
       Label1.Text = DataGridView2.Rows(i).Cells("SchWz").Value.ToString
       Label2.Text = DataGridView2.Rows(i).Cells("SchName").Value.ToString
       Label3.Text = DataGridView2.Rows(i).Cells("leaderName").Value.ToString
       Label4.Text = DataGridView2.Rows(i).Cells("mobile").Value.ToString
       Label5.Text = DataGridView2.Rows(i).Cells("tel").Value.ToString
       Label14.Text = DataGridView2.Rows(i).Cells("mktb").Value.ToString
   End Sub
   Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       If ProgressBar1.Maximum Then
           Timer1.Enabled = False
           ProgressBar1.Value = 0
       End If
   End Sub

End Class

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







الرد }}}
تم الشكر بواسطة: waw , aftfm , aftfm , dalas , ابو انس , سيف الشمال
#5
للاسف نفس المشكلة 


البرنامج توقف عن العمل 

المشكلة في نقص الملفات على الاجهزة الاخرى 
ملفات تشغيل برامج فيجوال او اكسل او اكسس


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , ابو انس
#6
السلام عليكم ورحمة الله وبركاته
اخي الكريم 
اعتقد والله اعلم ان ملفات تجميل الفورم والادوات هي السبب (Skincrafter)
او ربما ان مشروعك بنظام x64 بت والجهاز الذي تريد تشغيل البرنامج عليه 32 بت (تأكد من ذلك) ام كان كذلك اذهب الى خصائص المشروع واختر Compile  ومن نفس النافذة Target CPU اختر AnyCPU ليعمل البرنامج على كلا المنصتين 64 و32
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: dalas , ابو انس , سيف الشمال
#7
اخي الكريم ابراهيم
الف شكر على اهتمامك اولا واخيرا

بالنسبة للخصائص محطوط فيه AnyCPU هذي بديهيه


خليني اسأل السؤال بطريقة ثانية يمكن تكون هي السبب او جزء من الحل لبعض الاجهزة


اذا عملت برنامج في الفيجوال فيه قاعدة بيانات اكسس ويستخدم ملف اكسل ونقلته على جهاز اخر مافيه فيجوال ستوديو او اكسل او اكسس
ماهي الملفات التي احتاج نقلها معه حتى يتم تشغيله على الجهاز الاخر دون مشاكل
الرد }}}
#8
مش شرط يكون على جهاز العميل اكسيس ممكن تعمل تنصيب ل Access Database Engine تجيبه من مايكرو سوفت
اما بالنسبة ل الاكسيل فاعتقد انه لازم يكون موجود على جهاز العميل

بس انا ملاحظ ان فيه ملفين مفقودين من مكتبات البرنامج .  راجع انهم موجودين ضمن ملفات البرنامج
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#9
اي ملفين تقصد ؟
الرد }}}
تم الشكر بواسطة:



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


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