منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم أسئلة قواعد البيانات تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=41)
+--- الموضوع : [سؤال] حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل (/showthread.php?tid=48268)



حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - justforit - 20-04-24

السلام عليكم ورحمة الله وبركاته
PHP كود :
       Dim arr(dgv1.SelectedRows.Count 1)
 
       Dim n As Integer 0
        For Each row 
As DataGridViewRow In dgv1.SelectedRows
            ReDim Preserve arr
(n)
 
           arr(n) = row.Cells(0).Value
            n 
+= 1
        Next
        Dim ids 
As String String.Join(","arr)
 
       cm.Parameters.Clear()
 
        cm.CommandText "update [tb1$] set tid=null, tname=null,tphone=null,temail=null where tid in (" ids ")"
        cm.Parameters.AddWithValue("@tid"x
PHP كود :
        If con.State ConnectionState.Closed Then con.Open() 
PHP كود :
        cm.ExecuteNonQuery() 
في حال اضفت الارقام بكود اضافة واستخدم الكود اعلاه تظهر رسالة مشكلة اختلاف البيانات اما لو اضفت ارقام بالاكسل يدويا لا تظهر المشكلة
وحتى لو اضفتها بالكود اذا فتحت الاكسل وحولت ما اضفت بالكود الى ارقام تزول المشكلة..
كود الاضافة
        cm.Parameters.AddWithValue("@tid", rowscount())
والدالة rowscount تعيد عدد صفوف السجلات
و المثال موجود بالموضوع.
المثال اللذي استخدم فيه الـoledb provider  وهو الملف باسم Phone_Book_Using_Excel_vbnet
زر حذف المحدد
ميزة التعامل مع مزودة قاعدة البيانات السرعة لكن تحويل النص الى int   لا يجدي نفعا 

انا متاكد اني لم ادخل نص ابدا فلابد ان هناك كود معين يحفظ الرقم بشكل صحيح.


RE: حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - justforit - 28-04-24

هذي محلولة من نفس الاكسل و جدت كثير من الناس نفس المشكلة


السؤال الان هو كيف نصيغ كود من الصفوف المحددة من الـ DataGridView  بحيث تكون بالنهاية شي هكذا:
PHP كود :
xlC1Sheet.Rows("10:19").delete() 
هذا سيحذف الصفوف من 10 الى 19 هل بالامكان التعديل عليه بحيث يحذف المحدد فقط؟
قد جربت الكود التالي فهو يقفز صف او صفين:
PHP كود :
       'Dim i As Integer
        '
For 0 To dgv1.Rows.Count 1
        
'    If dgv1.Rows(i).Selected = True Then
        ' 
       xlws.Rows(2).delete()
 
       '    End If
        '
Next 



RE: حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - justforit - 28-04-24

والكود التالي لا يحذف كل المحدد !!!
لم افهم مشكلته بعد
PHP كود :
For Each row As DataGridViewRow In dgv1.Rows
     Dim id 
As String row.Cells(0).Value
     
If row.IsNewRow False Then
         
If row.Selected Then
             xlws
.Rows(id).delete()
 
        End If
 
    End If
 
Next 
متغير الاي دي id هذا يحمل مفس رقم الصف في الاكسل لاني وضعت له قيمة =row() في العمود الاول عند كل اضافة بالكود
PHP كود :
xlws.Range("A" rowscount).Value "=row()" 



RE: حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - غزة العزة - 19-05-24

المشكلة التي تواجهها تتعلق بتفسير Excel لأنواع البيانات عند إدخال الأرقام عن طريق الكود باستخدام OLEDB. عند إدخال البيانات يدوياً في Excel، يتم حفظها عادةً بالنوع الصحيح مباشرةً. ولكن عند إدخال البيانات برمجياً باستخدام OLEDB، قد يُحفظ النوع كـ "نص" بدلاً من "رقم" إذا لم يتم التعامل معه بشكل صحيح.

لحل هذه المشكلة، يمكنك التأكد من أن القيم المدخلة يتم تحويلها إلى النوع الصحيح عند الإضافة. يمكنك محاولة استخدام الدالة CInt أو CLng لتحويل القيم إلى أرقام قبل إدخالها في Excel.

إليك مثال على كيفية تعديل كود الإضافة للتحقق من نوع البيانات الصحيح:



PHP كود :
' افترض أن لديك الاتصال مفتوح بالفعل وأن cmd هو كائن OleDbCommand
For Each row As DataGridViewRow In dgv1.SelectedRows
    Dim id As Integer = CInt(row.Cells(0).Value) ' 
تحويل القيمة إلى عدد صحيح
    cm
.CommandText "INSERT INTO [tb1$] (tid, tname, tphone, temail) VALUES (@tid, @tname, @tphone, @temail)"
 
   cm.Parameters.Clear()
 
   cm.Parameters.AddWithValue("@tid"id)
 
   cm.Parameters.AddWithValue("@tname"row.Cells(1).Value.ToString())
 
   cm.Parameters.AddWithValue("@tphone"row.Cells(2).Value.ToString())
 
   cm.Parameters.AddWithValue("@temail"row.Cells(3).Value.ToString())
 
   cm.ExecuteNonQuery()
Next 



أما بالنسبة لكود التحديث، تأكد من أن القيم المستخدمة في الشرط هي من النوع الصحيح أيضًا:


PHP كود :
Dim arr(dgv1.SelectedRows.Count 1) As Integer ' تأكد من تعريف المصفوفة كأعداد صحيحة
Dim n As Integer = 0
For Each row As DataGridViewRow In dgv1.SelectedRows
    arr(n) = CInt(row.Cells(0).Value) ' 
تحويل القيمة إلى عدد صحيح
    n 
+= 1
Next

Dim ids 
As String String.Join(","arr)
cm.Parameters.Clear()
cm.CommandText "UPDATE [tb1$] SET tid=null, tname=null, tphone=null, temail=null WHERE tid IN (" ids ")"

If con.State ConnectionState.Closed Then con.Open()
cm.ExecuteNonQuery() 

يجب أن تضمن أن كل قيمة تُضاف أو تُستخدم في الشروط يتم تحويلها إلى النوع الصحيح قبل استخدامها في SQL. هذا يحل مشكلة التوافق بين أنواع البيانات عند التعامل مع Excel باستخدام OLEDB.


RE: حول مشكلة توافق نوع البيانات عند الاستعلام في اكسل - justforit - 23-05-24

حاولت فيها بكل الطرق لكن لابد من التصحيح من نفس الاكسل