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

نسخة كاملة : ما هو كود معرفة نوع البيانات من اكسس؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
PHP كود :
 Private Sub get_Cols(tb As String)
 
     dgvcols.Rows.Clear()
 
     If con.State ConnectionState.Closed Then con.Open()
 
     Dim dt As DataTable con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {NothingNothingtbNothing})
 
     If dt.Rows.Count 0 Then
          MsgBox
(" لا توجد حقول!"MsgBoxStyle.Exclamation"")
 
         Exit Sub
      End 
If
 
     For i As Integer 0 To dt.Rows.Count 1
          dgvcols
.Rows.Add(dt.Rows(i).Item("Column_Name"), dt.Rows(i).Item("Data_Type").ToString)
 
     Next
  End Sub 
السابق كما ترون يجلب اسماء الاعمدة من جدول محدد ونوع البيانات لكن الاخيرة تاتي ارقام فكيف الى حلها؟
شكر الله لكم
(09-05-24, 08:12 PM)justforit كتب : [ -> ]
PHP كود :
 Private Sub get_Cols(tb As String)
 
     dgvcols.Rows.Clear()
 
     If con.State ConnectionState.Closed Then con.Open()
 
     Dim dt As DataTable con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {NothingNothingtbNothing})
 
     If dt.Rows.Count 0 Then
          MsgBox
(" لا توجد حقول!"MsgBoxStyle.Exclamation"")
 
         Exit Sub
      End 
If
 
     For i As Integer 0 To dt.Rows.Count 1
          dgvcols
.Rows.Add(dt.Rows(i).Item("Column_Name"), dt.Rows(i).Item("Data_Type").ToString)
 
     Next
  End Sub 
السابق كما ترون يجلب اسماء الاعمدة من جدول محدد ونوع البيانات لكن الاخيرة تاتي ارقام فكيف الى حلها؟
شكر الله لكم

dgvcols.Rows.Add(dt.Rows(i).Item("Column_Name"), [Enum].GetName(GetType(OleDbType), dt.Rows(i).Item("Data_Type")))
3sem
[quote pid='197333' dateline='1715327697']
(09-05-24, 08:12 PM)justforit كتب : [ -> ]
PHP كود :
 Private Sub get_Cols(tb As String)
 
     dgvcols.Rows.Clear()
 
     If con.State ConnectionState.Closed Then con.Open()
 
     Dim dt As DataTable con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {NothingNothingtbNothing})
 
     If dt.Rows.Count 0 Then
          MsgBox
(" لا توجد حقول!"MsgBoxStyle.Exclamation"")
 
         Exit Sub
      End 
If
 
     For i As Integer 0 To dt.Rows.Count 1
          dgvcols
.Rows.Add(dt.Rows(i).Item("Column_Name"), dt.Rows(i).Item("Data_Type").ToString)
 
     Next
  End Sub 
السابق كما ترون يجلب اسماء الاعمدة من جدول محدد ونوع البيانات لكن الاخيرة تاتي ارقام فكيف الى حلها؟
شكر الله لكم

dgvcols.Rows.Add(dt.Rows(i).Item("Column_Name"), [Enum].GetName(GetType(OleDbType), dt.Rows(i).Item("Data_Type")))
[/quote]

جربت كود شبيه به و جربته ايضا لكنه لا يعطي نفس النتيجة اللتي تظهر بالصورة و لم استطع فتح المرفق.
توصلت الى قناعة وهي اني استخدم كود جلب اسماء الجداول من الاكواد التي تستخدم الـ GetOleDbSchema اما الاعمدة او الحقول فاكتفي باستخدام الكود المعتاد:
PHP كود :
Public Function getcols(cn As OleDbConnectiontb As String) As DataTable
     
If cn.State ConnectionState.Closed Then cn.Open()
 
    adb.Clear()
 
    adb.Columns.Clear()
 
    adb.Rows.Clear()
 
    Using cm As New OleDbCommand(""cn)
 
        cm.CommandText "select top 1 * from " tb
         adb
.Load(cm.ExecuteReader)
 
    End Using
     
Return adb
 End 
Function 
الجدول يحتوي فقط على صف واحد واللذي يهمنا الان اسماء الاعمدة ونوع بياناتها بالكود التالي:
PHP كود :
           Dim dt As New DataTable
            dt 
getcols(conListBox1.Text)
 
           ListBox2.Items.Clear()
 
           For Each dc As DataColumn In dt.Columns
                ListBox2
.Items.Add(dc.ColumnName)
 
               txtcode.AppendText(dc.ColumnName vbTab dc.DataType.Name vbNewLine)
 
           Next 
لتصحيح الكود الخاص بك والذي يستخدم ADO.NET للحصول على نوع البيانات من حقول جدول في قاعدة بيانات Access، يمكن استخدام الكود التالي. الكود يقوم بقراءة أسماء الحقول وأنواع البيانات من الجدول المحدد وعرضها في DataGridView.


PHP كود :
Private Sub get_Cols(tb As String)
 
   dgvcols.Rows.Clear()
 
   If con.State ConnectionState.Closed Then con.Open()

 
   Dim dt As DataTable con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {NothingNothingtbNothing})

 
   If dt.Rows.Count 0 Then
        MsgBox
("لا توجد حقول!"MsgBoxStyle.Exclamation"")
 
       Exit Sub
    End 
If

 
   For i As Integer 0 To dt.Rows.Count 1
        Dim columnName 
As String dt.Rows(i).Item("COLUMN_NAME").ToString()
 
       Dim dataType As Integer Convert.ToInt32(dt.Rows(i).Item("DATA_TYPE"))
 
       Dim dataTypeName As String GetDataTypeName(dataType)
 
       dgvcols.Rows.Add(columnNamedataTypeName)
 
   Next

    con
.Close()
End Sub

Private Function GetDataTypeName(dataType As Integer) As String
    Select 
Case dataType
        Case 3
            Return 
"Long Integer"
 
       Case 4
            Return 
"Single"
 
       Case 5
            Return 
"Double"
 
       Case 6
            Return 
"Currency"
 
       Case 7
            Return 
"Date/Time"
 
       Case 11
            Return 
"Boolean"
 
       Case 17
            Return 
"Byte"
 
       Case 72
            Return 
"GUID"
 
       Case 130
            Return 
"Text"
 
       Case 131
            Return 
"Decimal"
 
       Case Else
 
           Return "Other"
 
   End Select
End 
Function 


الكود أعلاه يقوم بالآتي:

يفتح الاتصال بقاعدة البيانات إذا كان مغلقًا.
يستخدم GetOleDbSchemaTable للحصول على بيانات الأعمدة من الجدول المحدد.
يتحقق مما إذا كان الجدول يحتوي على حقول أم لا.
يستعرض الحقول ويضيف اسم الحقل ونوع البيانات إلى DataGridView.
يغلق الاتصال بقاعدة البيانات.
GetDataTypeName هي وظيفة لتحويل نوع البيانات الرقمي إلى اسم نوع البيانات.
تأكد من أن dgvcols هي DataGridView موجودة في النموذج الخاص بك وأن الاتصال (con) مضبوط بشكل صحيح للاتصال بقاعدة بيانات Access.
ماشاء الله تبارك الله
هذا الفهم الجيد اللذي اتمنى ان يكون عنديSmile
لقد لجات قبل ان ارى مشاركتك هذه الى استعراض كافة محتويات الاسكيما بعد اسناد جدول اليها ورايت الخصائص اللتي كنت اتمنى ان اعرفها.
منْ قالَ أن العربَ ليسوا مبدعين فقد أخطأ