Oracle8: Не могу изменять данные

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Oracle8: Не могу изменять данные

Сообщение alibek » 22.03.2003 (Сб) 12:01

Народ, тут я с такой проблемой столкнулся.
Много времени для работы с Oracle использовал провайдера "MSDAORA" и все было отлично. Но вот вчера понадобилось внести (импортировать) в таблицу данные из файла. И вышел облом :)
Перепробовал разные рекордсеты, курсоры -- ничего не выходит, на rs.AddNew сообщает, что невозможно выполнить метод, т.к. курсор или провайдер его не поддерживает.
Почитал MSDN (старый, за 99 год) и нашел фразу
If a join query with a keyset or dynamic cursor is executed in an Oracle database, an error occurs. Oracle only supports a static read-only cursor.

Как я понял, мне предложили погулять.

Пробовал использовать другого провайдера -- не вышло, все примеры даны для MS SQL, а эксперименты ничего дельного не дали.

Кто знает как заставить MSDAORA изменять данные или другого провайдера, подскажите ConnectionString
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.03.2003 (Вт) 10:46

Конечно топик-ап это нехорошо :) но надо. Никто не подскажет?
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.03.2003 (Ср) 10:29

Сам нашел.
Провайдер Microsoft действительно не поддерживает создание Recordset'а с возможностью изменения (во всяком случае, мне это сделать не удалось), но можно использовать других провайдеров (например, Oracle)
Если кому еще пригодится, публикую код:
Код: Выделить всё
'Модуль modConnect
Option Explicit

Public cnnOra As ADODB.Connection
Public dbOpen As Boolean

Public Enum ConnectionMethodEnum
  cmODBC
  cmMicrosoftOLEDB
  cmOracleOLEDB
  cmOLEDBforODBC
End Enum

Public Sub oraConnect(ByVal UserName As String, ByVal UserPassword As String, ByVal DBName As String, Optional ByVal Method As ConnectionMethodEnum = cmMicrosoftOLEDB, Optional ByVal ConnectionLogin As Boolean = False)
Dim str As String
str = ""
Select Case Method
  Case ConnectionMethodEnum.cmODBC
    str = str & "Driver={Microsoft ODBC for Oracle};"
    str = str & "Server=" & DBName & ";"
    If ConnectionLogin Then
      str = str & "Uid=" & UserName & ";"
      str = str & "Pwd=" & UserPassword & ";"
    End If
  Case ConnectionMethodEnum.cmMicrosoftOLEDB
    str = str & "Provider=MSDAORA;"
    str = str & "Data Source=" & DBName & ";"
    If ConnectionLogin Then
      str = str & "User Id=" & UserName & ";"
      str = str & "Password=" & UserPassword & ";"
    End If
  Case ConnectionMethodEnum.cmOracleOLEDB
    str = str & "Provider=OraOLEDB.Oracle;"
    str = str & "Data Source=" & DBName & ";"
    If ConnectionLogin Then
      str = str & "User Id=" & UserName & ";"
      str = str & "Password=" & UserPassword & ";"
    End If
  Case ConnectionMethodEnum.cmOLEDBforODBC
    str = str & "Provider=MSDASQL;"
    str = str & "Driver={Microsoft ODBC for Oracle};"
    str = str & "Server=" & DBName & ";"
    If ConnectionLogin Then
      str = str & "Uid=" & UserName & ";"
      str = str & "Pwd=" & UserPassword & ";"
    End If
End Select
Set cnnOra = New ADODB.Connection
On Error Resume Next
If ConnectionLogin Then
  cnnOra.Open ConnectionString:=str
Else
  cnnOra.Open ConnectionString:=str, UserID:=UserName, Password:=UserPassword
End If
dbOpen = (Err = 0)
On Error GoTo 0
End Sub

Public Sub oraDisconnect()
If Not dbOpen Then Exit Sub
If cnnOra.State = ADODB.adStateOpen Then
  cnnOra.Close
  Set cnnOra = Nothing
  dbOpen = False
End If
End Sub


Использование:
Код: Выделить всё
...
oraConnect "user", "pwd", "db"
If dbOpen Then
  ...
Else
  MsgBox "Error on connectiong to db"
End If
oraDisconnect
...
Lasciate ogni speranza, voi ch'entrate.

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 26.03.2003 (Ср) 10:33

Удивил :D
У MS так всегда. У них полноценные драйвера тока под их базы.
Остальные всегда через ж..у работают..
Так что лучше искать у производителя...
Moderator VBStreets
---------------------------


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 108

    TopList