Перенос VB6 на наборы записей VB.net и таблицы данных - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть часть кода в VB6, которую я пытаюсь преобразовать в VB.net.Конкретно наборы записей.

Это часть кода VB6:

Data19.RecordSource = "select id from headers where type=12"
Data19.Refresh
If Data19.Recordset.RecordCount > 0 Then
Data6.RecordSource = "select sum(left * right) from footers where type=12"
Data6.Refresh
ss = Format(Data6.Recordset.Fields(0), "0.00")
Data19.Recordset.MoveLast
a = Data19.Recordset.RecordCount - 1
Data19.Recordset.MoveFirst
For i = 0 To a
If i > 0 Then Data19.Recordset.MoveNext
   Data22.RecordSource = "select * from documents where type=12"
   Data19.Recordset.Fields(0)
   Data22.Refresh
   With Data22.Recordset
      If .RecordCount > 0 Then
      .MoveLast
      b = .RecordCount - 1
      .MoveFirst
        For j = 0 To b
          If j > 0 Then .MoveNext
              If .Fields("link1") < ra And .Fields("code") <> "00" Then
              .Edit
              .Fields("link1") = ra
              .Fields("pc") = Format(.Fields("dpc") * (100 - ra) / 100, "0.00")
              .Fields("total") = Format(.Fields("amount") * .Fields("dpc") * (100 - ra) / 100, "0.00")
              .Update
              End If
        Next
      End If
   End With
  Next
 End If 

Я немного запутался по поводу .MoveLast, .MoveFirst, .Recordset.

В моем VB.net код Я использовал эту функцию, чтобы получить нужную таблицу из базы данных:

  Public Function returnTable(ByVal queryString As String)
    Dim query1 As String = queryString
    'Console.WriteLine(query1)
    Dim table As New DataTable
    Using connection As New MySqlConnection(connection)
        Using adapter As New MySqlDataAdapter(query1, connection)
            Dim cmb As New MySqlCommandBuilder(adapter)
            table.Clear()
            adapter.Fill(table)
            Return table
        End Using
    End Using
End Function

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

Dim data19 as new datatable
Data19 = returnTable("select id from headers where type=12")

Но позже в коде я не могу понять, как записать эквиваленты в .MoveLast, .MoveFirst, .Recordset, .MoveNext и т. Д. *

1 Ответ

0 голосов
/ 14 февраля 2019

Похоже, вы пытаетесь записать VB.Net-эквиваленты в VB6 .MoveLast, .MoveFirst, .Recordset, .MoveNext и т. Д.

.Recordset

Вы очень близкик вашему решению с помощью функции returnTable, которую вы создали.Datatables - это просто коллекции объектов DataRow, которые немного отличаются от объектов набора записей в VB6.Вы создали DataTable с помощью функции .Net:

Dim data19 as new datatable
Data19 = returnTable("select id from headers where type=12")

В этом случае Data19 - это DataTable, который заменяет набор записей в примере VB6.

.MoveLast

В вашем примере VB6 причина использования .MoveLast состоит в том, чтобы выставить количество записей в наборе записей.Количество записей неизвестно, пока вы не перейдете к последней записи.После перехода к последней записи вы можете загрузить счетчик в переменную.

С ADO.Net вам не нужно использовать .MoveLast, чтобы получить счет.Вы можете просто получить количество строк следующим образом:

Dim row_count As Integer = Data19.Rows.Count

Ниже вы увидите, что эта переменная не нужна при преобразовании в .Net.Вы используете его в VB6, чтобы узнать, сколько записей нужно пройти (и когда остановить).В .Net вы будете использовать For Each.. Next для достижения той же цели.

.MoveFirst

Для вашего примера, .MoveFirst используется только потому, что вы использовали .MoveLast чтобы получить количество записей.Для того, чтобы пройти набор записей, вы должны вернуться к первой записи.Поскольку вам больше не нужно использовать .MoveLast в .Net, вам также не нужно использовать .MoveFirst.

.MoveNext

В вашем примере VB6.MoveNext используется для просмотра набора записей и выполнения некоторых действий в каждой строке.Чтобы просмотреть созданную вами таблицу данных, вы можете сделать что-то вроде этого:

Dim my_row as DataRow
For Each my_row in Data19.Rows
    If my_row("link1") < ra And my_row("code") <> "00" Then
        .. do some actions
    End If
Next

Это будет проходить через набор записей аналогичным образом.Следует учитывать, что при работе с DataTable вы работаете с отключенным набором записей.Когда вы доберетесь до частей .Edit и .Update вашей процедуры VB6, вам может потребоваться использовать параметризованный запрос для выполнения фактического обновления любых записей.Это будет использовать объект команды и метод .ExecuteNonQuery() для выполнения оператора обновления SQL.

...