Набор записей в VB6.0 - PullRequest
1 голос
/ 25 мая 2009

Я извлекаю данные из базы данных в наборе записей , используя VB6 ... поэтому, извлекая данные с помощью Select в SQL, я добавил столбец с именем Комментарии вместе с ним, так что что в наборе записей будут присутствовать все столбцы таблицы + столбец «Комментарии» ... Я не хочу (а также Я не могу ) обновить любое содержимое в базе данных, поскольку я только «извлечение» данных из базы данных сейчас ...

Теперь, когда я передаю выбранные данные для проверки, я хочу заполнить столбец «Комментарии» соответствующими ошибками, если конкретная строка в наборе записей ошибочна) .... Когда я это делаю, я получаю сообщение об ошибке " Я не уполномочен это делать !! (чтобы обновить столбец "Комментарии" ....

Теперь мой вопрос: «Как я могу решить эту проблему ???» .. Я попытался воспроизвести этот набор записей и заполнил его, заполнив столбец 'comments' (в реплицированном), который, в свою очередь, показал то же самое. ошибка ... Кажется, это может быть потому, что дубликат (recordSet) просто сохраняет свойства исходного ...

Можете ли вы что-нибудь помочь, как решить эту проблему? Есть ли способы репликации набора записей (без наследования каких-либо его свойств) ??????

Ответы [ 3 ]

2 голосов
/ 27 мая 2009

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

Dim rstTest as ADODB.RecordSet
Set rstTest = New ADODB.RecordSet
With rstTest
   .CursorLocation = adUseClient
   .Open "your sql here", your_connection_object, adOpenStatic, adLockBatchOptimistic, adCmdText
   ' now disconnect it and force the local copy
   .ActiveConnection = Nothing
End With
1 голос
/ 25 мая 2009

Не совсем то, что вы ищете, но вот как я это делаю:

  1. Создать класс для инкапсуляции набора записей (класс «Клиент» для таблицы «Клиент»)
  2. Добавьте свой комментарий в класс, а не в набор записей
  3. Добавьте метод Validate в ваш класс. Пишите в свой комментарий (я использую коллекцию ошибок)
  4. Чтение набора записей
  5. Разобрать его в "нового клиента"
  6. Validate
  7. Проверьте свойство Comment (или коллекцию ошибок)
0 голосов
/ 26 мая 2009

Вы можете использовать MSDataShape с синтаксисом SHAPE..APPEND для добавления нового поля в набор записей ADO. Вот краткий пример использования Jet (например, MS Access):

Sub ShapeAppendField()

  On Error Resume Next
  Kill Environ$("temp") & "\DropMe.mdb"
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")
  With cat
    .Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"

    Dim jeng
    Set jeng = CreateObject("JRO.JetEngine")
    jeng.RefreshCache .ActiveConnection

    Set .ActiveConnection = Nothing
  End With

  Dim con
  Set con = CreateObject("ADODB.Connection")
  With con
    .ConnectionString = _
        "Provider=MSDataShape;" & _
        "Data Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"
    .CursorLocation = 3
    .Open

    .Execute _
    "CREATE TABLE Test (" & _
    "existing_col INTEGER NOT NULL);"
    .Execute _
    "INSERT INTO Test (existing_col)" & _
    " VALUES (1);"

    Dim rs
    Set rs = CreateObject("ADODB.Recordset")
    With rs
      .CursorType = 2
      .LockType = 4
      .Source = _
          "SHAPE {" & _
          " SELECT existing_col" & _
          " FROM Test" & _
          "} APPEND NEW adInteger AS new_col"

      Set .ActiveConnection = con
      .Open
      Set .ActiveConnection = Nothing

      .Fields("new_col").value = 55
      MsgBox .GetString
      .Close

    End With
  End With
End Sub
...