powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO добавляет запись в две таблицы
10 сообщений из 10, страница 1 из 1
ADO добавляет запись в две таблицы
    #32716258
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim cnn As New Connection
cnn.Open "provider=sqloledb.1;data source=.;initial catalog=northwind;integrated security=sspi"

Dim rst As New ADODB.Recordset
rst.CursorLocation = adUseClient
Dim s As String
s = "SELECT     [Order Details].OrderID, [Order Details].ProductID, Products.ProductName" & _
" FROM         [Order Details] INNER JOIN" & _
" Products ON [Order Details].ProductID = Products.ProductID"
rst.Open s, cnn, adOpenKeyset, adLockBatchOptimistic
rst.Properties("Unique Table") = "Order Details"
Set rst.ActiveConnection = Nothing

rst.AddNew
rst!OrderID =  10248 
rst!ProductID =  1 
rst!ProductName = "Chai"
rst.Update

Set rst.ActiveConnection = cnn
cnn.BeginTrans
rst.UpdateBatch
cnn.CommitTrans

Хотелось бы видеть только одну запись добавленную в Order Details, а наблюдается ещё одна в Products.

Any ideas?
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716410
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шутник однако
Order Details не содержит поля ProductName, и куда прикажете бедному ADO деваться - сказали добавить ProductName - он его и добавляет в ту таблицу, в которой есть это поле - в Products. Не хочешь добавлять записи в Products не добавляй rst!ProductName = "Chai"
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716438
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в поле ProductName необходимо записать название?

Задача такая: офлайновое редактирование таблицы (в данном случае Order Details), в которой есть FK (в данном случае [Order Details].ProductID). Этот же рекордсет надо отображать пользователю, которому поле ProductName гораздо понятнее ProductID.

Так что шутки в сторону - надо что-то делать
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716544
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже я чего то не понимаю.А если в поле ProductName необходимо записать название?Хотелось бы видеть только одну запись добавленную в Order Details, а наблюдается ещё одна в Products. Так оно и записалось!
наблюдается ещё одна в Products - это и есть добвленный ProductNameХотелось бы видеть только одну запись добавленную в Order Detailsнельзя добавить ProductName не добавив ничего в Products
Бред! Как добавить значение в таблицу, не довавив значение в таблицу???
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716552
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При вызове метода AddNew рекордсет добавляет новую строку и происходит то, что написал marvan
Если вам надо редактировать название ProductName из таблицы Products , а детали ордера добавлять, попробуйте:
Код: plaintext
1.
2.
3.
4.
5.
rst!ProductName = "Chai"
rst.AddNew
rst!OrderID =  10248 
rst!ProductID =  1 
rst.Update
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716778
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нельзя добавить ProductName не добавив ничего в Products
Бред! Как добавить значение в таблицу, не довавив значение в таблицу???


Ещё раз объясняю: в Products ничего добавлять не надо. Поле ProductName я заполняю чтобы пользователь понимал что он добавил.

редактировать название ProductName из таблицы Products
Редактировать таблицу Products тоже не надо

И ещё пример. Когда я задаю rst.Properties("Unique Table") = "Order Details", то удаление происходит только из одной таблицы. Я хочу чтобы Unique Table работал точно также и для добавления.

Что не понятного?
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716823
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov
Ещё раз объясняю: в Products ничего добавлять не надо. Поле ProductName я заполняю чтобы пользователь понимал что он добавил.

редактировать название ProductName из таблицы Products
Редактировать таблицу Products тоже не надо

И ещё пример. Когда я задаю rst.Properties("Unique Table") = "Order Details", то удаление происходит только из одной таблицы. Я хочу чтобы Unique Table работал точно также и для добавления.

Что не понятного? Тогда зачем вы выполняете вот эту строку : rst!ProductName = "Chai" если вы не хотите ни добавлять не обновлять строки в Products ? Если вы хотите чтобы "пользователь понимал что он добавил" - покажите ProductName на экране, но обновлять то его зачем ?
Про UniqueTable читайте Using Resync in ADO with Joined Recordsets . Вам надо дополнительно выставить свойство "Resync Command "
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716884
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы хотите чтобы "пользователь понимал что он добавил" - покажите ProductName на экране, но обновлять то его зачем ?

Я и хочу его только показать. но поле ProductName после AddNew - пустое.
Я знаю как работает Unique Table. Но в данном случае меня это не спасает
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716898
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
    Dim Order_Details As ADODB.Recordset
    Set Order_Details = New ADODB.Recordset
    With Order_Details
    .ActiveConnection = cnn
    .Source = "Order Details"
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .Open , , , , adCmdTableDirect
    End With
    
    Dim Products As ADODB.Recordset
    Set Products = New ADODB.Recordset
    With Products
    .ActiveConnection = cnn
    .Source = "Products"
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .Open , , , , adCmdTableDirect
    End With
    
    
    Dim ProductID As Long
    Products.Index = "ProductName"  'в таблице д.б. такой индекс 
    Products.Seek "Chai", adSeekFirstEQ
    
    If Products.EOF = True Then
         '"Chai"не нашли - добавляем 
        Products.AddNew "ProductName", "Chai"
        ProductID = Products!ProductID  'это поле - счётчик 
    Else
        ProductID = Products!ProductID
    End If
    Order_Details.AddNew Array("OrderID", "ProductID"), Array( 10248 , ProductID)
...
Рейтинг: 0 / 0
ADO добавляет запись в две таблицы
    #32716966
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассказываю подробнее про ограничения:
1. есть два отсоединённых (ActiveConnection=Nothing, CursorLocation=adUseClient) рекордсета: продукты и заказы
продукты - только на чтение, заказы - add,edit,delete
2. Есть контрол, который занимается отображением и редактированием рекордсета
делаю grid.SourceRecordset = rstOrderDetails
3. После сеанса работы по команде пользователя делаю rstOrderDetails.UpdateBatch

Г-н marvan, в приведённом Вами коде поле ProductName будет пустым добавления записи

Хотя вариант с двумя рекордсетами я взял на заметку
1. поле ProductName не обновляем, зато UpdateBatch
2. поле ProductName обновляем, но UpdateBatch не вызываем
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO добавляет запись в две таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]