Member 13187018 Ответов: 1

Как исправить этот код, чтобы привести все свойства в базу данных access ?


 Public Sub ShowFieldsAccess(dgv As DataGridView, table As DevExpress.XtraEditors.CheckedListBoxControl, txtmasar As DevExpress.XtraEditors.TextEdit, txtpk As TextBox)
 

            dgv.DataSource = Nothing
        dgv.Rows.Clear()
        Dim NameTable As String = table.Text
        For Each Dr In mytb.Rows
            Dim cmd As OleDbCommand = cn.CreateCommand
            cmd.CommandText = String.Format("Select * From [{0}]", NameTable)
                Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.KeyInfo)
                x = reader.GetSchemaTable
        Next
            For Each item As DataRow In x.Rows
                                Dim n As Integer = dgv.Rows.Add(item)
                              dgv.Rows(n).Cells(1).Value = item(0).ToString
                dgv.Rows(n).Cells(2).Value = GetTypeAccessGET(item(5).ToString.Replace("System.", ""))

                If item(8).ToString() = "True" Then : dgv.Rows(n).Cells(0).Value = "False"
                Else : dgv.Rows(n).Cells(0).Value = "True" : End If
                n += 1
                '-----------------
                Dim con As New ADODB.Connection
                con.Open(cn.ConnectionString)
                Dim MyDB As New ADOX.Catalog
                MyDB.ActiveConnection = con
                Dim MyTable As ADOX.Table = MyDB.Tables(NameTable)
                Dim Desc As String = item(0).ToString
                dgv.Rows(n - 1).Cells(3).Value = MyTable.Columns(Desc).Properties("Description").Value
            Next item
            '--------------------------------------------------------------------------------------------------------------------S
            Dim dt As New DataTable With {.TableName = String.Concat("Schema_", NameTable)}
            Dim db As AccessDao.Database
            Dim TheTableDef As AccessDao.TableDef
            Dim Engine As New AccessDao.DBEngine()
            db = Engine.OpenDatabase(txtmasar.Text.ToString)
            TheTableDef = db.TableDefs(NameTable)
            With TheTableDef
                For Each f As AccessDao.Field In .Fields
                    Dim d As AccessDao.DataTypeEnum
                    Dim FieldType = CType(
                        System.ComponentModel.TypeDescriptor _
                            .GetConverter(d) _
                            .ConvertFromString(f.Type.ToString), 
                            AccessDao.DataTypeEnum)

                           For Each item1 As DataRow In x.Rows

                        Dim v As Integer = dgv.Rows.Count - 1
                        dgv.Rows(v).Cells(4).Value = f.Required
                        dgv.Rows(v).Cells(5).Value = f.Size
                        dgv.Rows(v).Cells(6).Value = f.AllowZeroLength
                        '  v += 1
                    Next item1
                Next f


            End With
            Return
end sub


Что я уже пробовал:

Я устал от этого кода и пытаюсь перенести все свойства полей таблицы в базу данных Access в DataGridView
Пожалуйста, помогите мне обнаружить ошибку в коде

Огромное спасибо

https://image.ibb.co/byDdVQ/Capture.png[^]

Member 13187018

Мне нужно получить эти свойства: первичный ключ , обязательный, тип данных, размер, описание, неудачное имя, разрешить нулевую длину datagridview .

ZurdoDev

Почему вы думаете, что это ошибка?

Member 13187018

потому что результат неправильный

ZurdoDev

И что вы хотите, чтобы мы сделали? Мы не можем запустить ваш код. Мы не знаем, почему это неправильно. Ты должен все объяснить.

Member 13187018

Я хочу получить поле nam, первичный ключ, required, тип данных, размер, описание, разрешить нулевую длину datagridview в базе данных access .

смотрите изображения :
https://image.ibb.co/byDdVQ/Capture.png

ZurdoDev

Вы повторяете то, что уже сказали.

1 Ответов

Рейтинг:
11

PIEBALDconsult

Чтобы получить определение таблицы (или любого результирующего набора), я использую метод GetSchemaTable DataReader.
И oledbdatareader.Метод Getschematable (Системы.Данных.Для oledb)[^]

System.Data.DataTable result = null ;

using
(
    System.Data.IDataReader dr
=
    this.ExecuteReader 
    ( 
        System.Data.CommandBehavior.SchemaOnly 
        |
        System.Data.CommandBehavior.KeyInfo 
    , 
        cmd 
    )
)
{
    schema = dr.GetSchemaTable() ;

    dr.Close() ;
}


Каждая строка описывает один возвращенный объект DataTable столбец результирующего SQL-запроса.
Для поставщика OleDb ProviderType - это значение из System.Data.Oledb для.OleDbType
Перечисление OleDbType (Системы.Данных.Для oledb)[^]

Мне придется разобраться, почему у него нет этих расширенных свойств для столбцов в Access.
Может быть, вам это нужно
Метод oledbconnection.Метода GetOleDbSchemaTable (Идентификатор GUID Объекта[]) (Система.Данных.Для oledb)[^]
но я еще не исследовал его.


Member 13187018

Здесь :
И oledbdatareader.Метод Getschematable (Системы.Данных.Для oledb)

https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getschematable(v=vs. 110).aspx


Большое вам спасибо PIEBALDconsult