diablo22 Ответов: 1

Vb.net вызов функции


Здравствуйте, может ли кто-нибудь помочь мне, как сделать это правильно.
Я хочу сделать функцию для select в файле ms access

Сначала у меня есть Func.vb
Public Sub ReadTables(ColumNamer As String, Datatable As String)
Try
            With cmd
                .Connection = conn
                .CommandText = "Select * From @ColumnName"
                .Parameters.AddWithValue("@ColumnName", ColumNamer)

                ds.Tables.Add(dt)
                Adapter.SelectCommand = cmd
                Dim cb = New OleDbCommandBuilder(Adapter)
                cb.QuotePrefix = "["
                cb.QuoteSuffix = "]"
                Adapter.Fill(dt)
                Datatable.DataSource = dt.DefaultView
                .Parameters.Clear()
            End With
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            Adapter.Dispose()
            dt.Dispose()
            cmd.Dispose()
            If conn IsNot Nothing Then
                conn.Close()
            End If
        End Try
    End Sub


Затем в моей форме 2 я добавил Datagridview1
и в загрузке формы я хочу, чтобы отправить информацию/получите для загрузки в поисковой форме Form2

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ReadTables("Accounts",Datagridview1)


Как это сделать?
- Потому что я хочу использовать эту функцию для большего количества вызовов в разных таблицах в ms access.
- Первый вызов должен быть "имя таблицы", чтобы позвонить , вторая - "практическое руководство" называть

В моей форме 2 datagridview называется "datagridview1", так что если бы я переименовал его в
ReadTables("счета","переименовать элемент") и отображения результатов, когда форма загружается

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

Когда я пытаюсь использовать код внутри Form2, работает правильно, но при попытке использовать функцию ничего не показывает Datagridview1 в Form2 не активен вообще никаких результатов не показывает.
Никаких сообщений об ошибках не отображается.

Edit: я забыл поставить Datagridview1 - от "друга" до "публики", но все равно не работает правильно

Richard MacCutchan

Ты звонишь ReadTables с двумя параметрами, строкой и ссылкой DataGridView. Но для объявления функции требуется две строки.

diablo22

да вот почему я пишу тему, для поддержки как должно быть где есть проблемы советы по ее решению.

Richard MacCutchan

Вы хотите сказать, что не понимаете, как писать и вызывать функцию?

F-ES Sitecore

Вы уверены, что не имеете в виду что-то вроде

ReadTables Публичных Суб(ColumNamer Как Строки DataTable В Datagridview В)

diablo22

если я использую как DataTable в datagridview в
он не может выполнить функцию Datatable = dt.DefaultView

F-ES Sitecore

Сделайте его любым типом "Datagridview1".

diablo22

если я сделаю его (Datatable As DataGridView1), то он будет подчеркивать это имя как опцию

Richard MacCutchan

Вы не можете сделать так, чтобы DataGridView1 был объектом, а не типом; используйте DataGridView, который является фактическим типом. Однако вам все равно нужно проверить эту подпрограмму, чтобы ссылаться на правильные имена переменных.

1 Ответов

Рейтинг:
1

OriginalGriff

.CommandText = "Select * From @ColumnName"
.Parameters.AddWithValue("@ColumnName", ColumNamer)
Вы не можете этого сделать - это не сработает. Имя таблицы вычисляется и проверяется перед фазой подстановки параметров выполнения комментария в SQL.

Вы можете объединить строку, но вам придется сделать некоторую дополнительную работу, чтобы убедиться, что она безопасна, или вы оставите себя открытым для SQL-инъекции.

Чтобы добавить к этому, он даже не будет компилироваться: Datatable-это строка:
Public Sub ReadTables(ColumNamer As String, Datatable As String)

А строки не имеют свойства DataSource:
Datatable.DataSource = dt.DefaultView


diablo22

спасибо за информацию полезно знать, что нельзя вызвать имя столбца в запросе.
но есть идеи, как затем вызвать только имя datagridview для отображения результатов, даже если я удалю имя таблицы

OriginalGriff

Прочтите, что я сказал ... ваш параметр-это строка, а не DataTable.

diablo22

да я посеял это и изменил его на -
DatatableName Как DataTable
DatatableName = ДТ
но в form2 не отображаются столбцы при загрузке