Сохранение записи при запросе из 2х таблиц.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Сохранение записи при запросе из 2х таблиц.

Сообщение Юля Крюкова » 09.02.2009 (Пн) 11:00

Всем доброго времени суток!
В общем застряла на сохранении данных. Работаю в VB 6.0 с базой Access.
Делаю запрос из 2х таблиц, в обоих таблицах есть поле Kvitanciya_ID. Выдает ошибку при сохранении в это поле видимо из за того, что поля одинаково называются. Умею добавлять данные только как показано в коде. Как создать ссылку на поле в конкретной таблице способа что то не нашла - мне кажется в этом вся проблема. Подскажите плиз как сделать чтобы в обе таблицы добавлялись одинаковые данне.
Код: Выделить всё

    With adodcPolis
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Agent_DB_2000.mdb;Persist Security Info=False"
        .CommandType = adCmdText

        .RecordSource = "SELECT tab_Polis.Polis_ID, tab_Polis.Risk_ID, tab_Polis.Polis_Start_Date, tab_Polis.Polis_End_Date, tab_Polis.Kvitanciya_ID, tab_Kvitancii.Kvitanciya_ID, tab_Kvitancii.Kvitanciya_Data, tab_Kvitancii.Kvitanciya_Sum, tab_Kvitancii.Kvitanciya_Komissiya, tab_Kvitancii.Kvitanciya_VOfis, tab_Kvitancii.Kvitanciya_Kod, tab_Polis.Klient_ID, tab_Polis.Agent_ID FROM tab_Kvitancii INNER JOIN tab_Polis ON tab_Kvitancii.Kvitanciya_ID = tab_Polis.Kvitanciya_ID "
        .Refresh
        Set rst = .Recordset
    End With

    With rst
        .AddNew
        !Polis_ID = lbl_ID(0)
        !Risk_ID = lbl_ID(1)
        !Polis_Start_Date = dtPolis(0)
        !Polis_End_Date = dtPolis(1)
        Вот здесь начинаются проблемы:
!!!!!!!!!!!
'        !tab_Polis.Kvitanciya_ID = lbl_ID(2).Caption
        !tab_Kvitancii.Kvitanciya_ID = lbl_ID(2)
!!!!!!!!!!!!
        !Kvitanciya_Data = dtPolis(2)
        !Kvitanciya_Sum = nbrPolis(0)
        !Kvitanciya_Komissiya = nbrPolis(1)
        !Kvitanciya_VOfis = nbrPolis(2)
        !Kvitanciya_Kod = mskPolis(0)
        !Klient_ID = lbl_ID(3)
        !Agent_ID = lbl_ID(4)
        .Update
    End With

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

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение alibek » 09.02.2009 (Пн) 11:17

Во-первых, надо использовать альясы, чтобы имена полей были уникальными.
Во-вторых, скорее всего еще потребуется задать свойство underlying table.
Lasciate ogni speranza, voi ch'entrate.

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение Юля Крюкова » 09.02.2009 (Пн) 11:58

alibek,
Я не против использовать альясы. Скажи только что это такое, оч. прошу!
И задать свойство underlying table - я тоже очень даже за, только не знаю где его задать - подскажи пожалуйста. :?
Я поняла, что 2 одинаковых поля в разных таблицах мне никак не заполнить в одном запросе, да? Или просто с синтаксисом проблема?

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

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение alibek » 09.02.2009 (Пн) 14:10

select tbl1.field_id as field_id_1, tbl2.field_id as field_id_2
А насчет свойства примерно так:
rst.Properties("Underlying Table") = "tab_Kvitancii"
(это если главной является таблица tab_Kvitancii).
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение iGrok » 09.02.2009 (Пн) 14:15

Alias - это будет так:
.RecordSource = "SELECT ... tab_Polis.Kvitanciya_ID AS p_Kv_ID, tab_Kvitancii.Kvitanciya_ID..."
Вот это самое AS p_Kv_ID и есть задание алиаса для поля. Обращаться к полю теперь можно (и нужно) по этому(p_Kv_ID) имени.

Что есть underlying table я, каюсь, не знаю.

Но вообще у меня есть сомнения насчёт того, что получится добавлять записи в выборку из двух таблиц. По крайней мере у меня этого никогда не получалось.=)
Собственно решал просто - держал открытыми ещё два рекордсета, для каждой таблицы. И при добавлении записи - добавлял в те два по отдельности, после чего обновлял общий - для просмотра изменений.
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение Юля Крюкова » 09.02.2009 (Пн) 17:02

В моем случае видимо проще всего последовательно добавить запись в одну таблицу, а потом в другую. Примерно так:
Код: Выделить всё
    With adodcPolis
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Agent_DB_2000.mdb;Persist Security Info=False"
        .CommandType = adCmdText
        .RecordSource = "SELECT tab_Kvitancii.Kvitanciya_ID, tab_Kvitancii.Kvitanciya_Data, tab_Kvitancii.Kvitanciya_Sum, tab_Kvitancii.Kvitanciya_Komissiya, tab_Kvitancii.Kvitanciya_VOfis, tab_Kvitancii.Kvitanciya_Kod FROM tab_Kvitancii"
        .Refresh
        Set rst = .Recordset
       
        With rst
            .AddNew
            .Fields("Kvitanciya_ID") = lbl_ID(2).Caption
            .Fields("Kvitanciya_Data") = dtPolis(2).Value
            .Fields("Kvitanciya_Sum") = nbrPolis(0).Value
            .Fields("Kvitanciya_Komissiya") = nbrPolis(1).Value
            .Fields("Kvitanciya_VOfis") = nbrPolis(2).Value
            .Fields("Kvitanciya_Kod") = IIf(mskPolis(0).Text = "___-___-___", 0, mskPolis(0).Value)
            .Update
        End With
       
        .RecordSource = "SELECT tab_Polis.Polis_ID, tab_Polis.Risk_ID, tab_Polis.Polis_Start_Date, tab_Polis.Polis_End_Date, tab_Polis.Kvitanciya_ID, tab_Polis.Klient_ID, tab_Polis.Agent_ID FROM tab_Polis"
        .Refresh
        Set rst = .Recordset

        With rst
            .AddNew
            .Fields("Polis_ID") = lbl_ID(0).Caption
            .Fields("Risk_ID") = lbl_ID(1).Caption
            .Fields("Polis_Start_Date") = dtPolis(0).Value
            .Fields("Polis_End_Date") = dtPolis(1).Value
            .Fields("Kvitanciya_ID") = lbl_ID(2).Caption
            .Fields("Klient_ID") = lbl_ID(3).Caption
            .Fields("Agent_ID") = lbl_ID(4).Caption
            .Update
        End With

По-моему, это оптимально с точки зрения простоты написания кода и простоты понимания. И на скорость мне кажется это не сильно повлияет :). И как мне последнее время кажется, что чем проще код, тем меньше ошибок он в себе может таить...
Alibek, iGrock, огромное спасибо за советы! Я обязательно учту, если столкнусь еще раз!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Сохранение записи при запросе из 2х таблиц.

Сообщение Andrey Fedorov » 10.02.2009 (Вт) 9:24

iGrok писал(а):Что есть underlying table я, каюсь, не знаю.


Трудно знать то чего не существует.

Однако у ADO-шного Recordset-a может задаваться свойство Unique Table - вот оно в отдельных случаях может пригодиться.

These dynamic properties are all appended to the Recordset object Properties collection when the CursorLocation property is set to adUseClient.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


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

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

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

    TopList