Отвязный recordset

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Отвязный recordset

Сообщение Алексей К. » 02.08.2005 (Вт) 11:56

Открываю рекордсет, делаю ему addnew, заполняю новую запись. Апдейт не далаю, и при movelast я стою на последней записи которая была до добавления. Как сделать что бы можно было обращаться к новым записям без апдейта рекордсета, надо чтобы исходная таблица не менялась. подскажите пожалуйста

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2005 (Вт) 11:59

курсор клиента
блокировка статик
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 02.08.2005 (Вт) 12:15

В DAO это можно реализовать, как?

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 02.08.2005 (Вт) 13:50

Код: Выделить всё

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = App.Path & "\db2.mdb"
        .Open
End With
With rs
        .ActiveConnection = cn
        .CursorType = adOpenStatic
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
        .Source = "SELECT * FROM таблица1"
        .Open
End With
rs.AddNew
rs.Fields(1) = "новая запись"
.....вывожу в грид
rs.Close

На строке закрытия рекордсета кричит "Операция не допускается в данном контексте".
А если делаю апдейт рекордсета до его закрытия - то рекордсет закрывается нормально, но исходная таблица меняется (добавляется запись). Реально ли закрыть рекордсет без апдейта через rs.close? или остается только убивать через set rs=nothing и заново его обьявлять, указывать блокировки и курсор.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2005 (Вт) 14:05

очисти и всё... или сделай Nothing
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 02.08.2005 (Вт) 14:28

1) Очистить это как?
2) Странная фигня у меня творится: если не загружаю listview через свою функцию load_lvw - данные в исх. таблицу не добавляются, а если загружаю то добавляются. Хотя load_lvw рекордсет не апдейтит.
В чем дело может быть?

Код: Выделить всё

Private Sub Command1_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = App.Path & "\db2.mdb"
        .Open
End With
With rs
        .ActiveConnection = cn
        .CursorType = adOpenStatic
        '.CursorType = adOpenDynamic
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
        .Source = "SELECT * FROM таблица1"
        .Open
End With
rs.AddNew
rs.Fields(1) = "новая запись"
my_table = load_lvw(Form1.ListView1, rs)
Set rs = Nothing
Set cn = Nothing
End Sub


Код: Выделить всё

Public Function load_lvw(lvw As ListView, rs As Recordset)
lvw.ListItems.Clear
rs.MoveFirst
Do Until rs.EOF
        Set dd = lvw.ListItems.Add(, , CStr(rs.Fields(1)))
        For i = 2 To rs.Fields.Count - 1
            If IsNull(rs.Fields(i)) = False Then
                    dd.SubItems(i - 1) = CStr(rs.Fields(i))
                Else
                    dd.SubItems(i - 1) = ""
            End If
        Next i
        rs.MoveNext
Loop
rs.Close
End Function


Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.08.2005 (Вт) 15:23

...
rs.AddNew
rs.Fields(1) = "новая запись"

rs.Update

my_table = load_lvw(Form1.ListView1, rs)
...

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 02.08.2005 (Вт) 16:54

Может я непонятно выразился, проблема: если я не заполняю данные в form1.listview1 используя функцию load_lvw - то запись "новая запись" в исходную таблицу (db2.mdb, таблица1) в первый столбец не добавляется (т.е. если закоментирую строку my_table=load_lvw...). А если заполняю то новая запись появляется в исходной таблице базы данных db2.mdb - этого мне не надо. У listview же нет такого свойства как allowupdate и работы напрямую с рекордсетом (datasource=rs) , в коде у меня нет апдейта рекордсета. Мне нужен отвязный рекордсет, изменение записей (удаление, добавление) которого никак не влияет на "таблица1" из db2.mdb. Почему так происходит, может проперти рекордсета не так поставил?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.08.2005 (Вт) 17:36

трудно понять, что тебе надо, но попробуй вот это:

...
End With
set rs.ActiveConnection=nothing
rs.AddNew
...

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 03.08.2005 (Ср) 6:12

set rs.ActiveConnection=nothing помогло.
Всем спасибо!


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

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

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

    TopList  
cron