powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Непонятная ситуация с update.
16 сообщений из 16, страница 1 из 1
Непонятная ситуация с update.
    #37072015
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация простая. есть главная форма из нее вызывается форма подчиненная. В подчиненой форме производится update определенной записи, после чего подчиненая форма закрывается. Главная должан перечитать обновленную запись и на ее основе построить фильтр данных. Вот тут то и начинается загадочное для меня.

Запускаю проект захожу в подчиненную форму делаю update записи. Идет возврат в главную фому, а там запрос достает из таблицы старую запись до UPDATE. Хотя в таблице все данные правильные, т.е. новые. Я так понимаю что где то кешируется. Но к сожалению пока не нашел как обновить кеш.

Но дальше вот, что меня смущает: дальше сколько бы я не изгалялся начиная со второго входа в подчиненую форму , сколько бы я не делал UPDATE записи. Все работает как часики(т.е. и в главной форме идет нормальный отбор данных и простроенияе фильтра на их основе).

Подскажите может я чего не доделываю?

пока нашел решение close.connectionи тут же open.connection перед считываением данных в гдавной форме. Но знающие люди говорят что это не есть гуд.
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072027
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Подскажите может я чего не доделываю?

Нужно делать Refresh своему источнику данных

> пока нашел решение

Переоткрывать соединения действительно не совсем правильный подход.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072034
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Вы получаете данные для форм?
рекорсетом?
покажите код
попробуйте requery обоих источников данных

в vb нет понятия подчиненная форма
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072076
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос

Нужно делать Refresh своему источнику данных



Если можно подсказочку, это мой первый проект на ВБ, еще не все освоил
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072087
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TpaBkaКак Вы получаете данные для форм?
рекорсетом?
покажите код
попробуйте requery обоих источников данных

в vb нет понятия подчиненная форма

Подчиненная форма это я просто чтобы более понятно объяснить.

Код пожалуйсто, примерно вот такой код получается для получения данных

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
Private Sub Form_Load()
    Dim Cn As ADODB.Connection
    Dim rst_1 As New ADODB.Recordset
    Dim work_path As String
    Dim i As Long
            
        Call btn_f_clear_Click
        
        work_path = CurDir("")
        i =  0 
        ft =  0 
        
        Set Cn = CreateObject("ADODB.Connection")
        Set rst_1 = CreateObject("ADODB.Recordset")

        Cn.Provider = "Microsoft.Jet.OLEDB.4.0"

        Cn.Open ("File Name=" & work_path & "\Data\str.udl")

        rst_1.CursorType =  3 

        rst_1.LockType =  3 

        rst_1.Open "SELECT id_mt,full_mtype  FROM message_type ORDER BY id_mt ", Cn
                
        If Not rst_1.EOF And Not rst_1.BOF Then
            rst_1.MoveFirst
            While Not rst_1.EOF
                i = rst_1!id_mt
                Me.f_mt.AddItem rst_1!full_mtype, (i -  1 )
                rst_1.MoveNext
            Wend
        End If
                
        rst_1.Close
        
        rst_1.Open "SELECT pokstat.id_stat, pokstat.stat_comment FROM pokstat ", Cn, adOpenStatic, adLockReadOnly
                
        If Not rst_1.EOF And Not rst_1.BOF Then
            rst_1.MoveFirst
            While Not rst_1.EOF
                i = rst_1!id_stat
                Me.f_stat.AddItem rst_1!stat_comment, (i -  1 )
                rst_1.MoveNext
            Wend
        End If
                
        rst_1.Close
        
        ft = Form1.filtr_type.Text
        
        rst_1.Open "SELECT id_mt, id_stat, dat_b, dat_e FROM filtr_tmp WHERE id_filtr=1 ", Cn, adOpenStatic, adLockReadOnly
           
        If Not rst_1.EOF And Not rst_1.BOF Then
            If Not IsNull(rst_1!dat_b) Or rst_1!dat_b <> "" Then
                    Me.dat_begin.Text = rst_1!dat_b
                Else
                    Me.dat_begin.Text = ""
            End If
            If Not IsNull(rst_1!dat_e) Or rst_1!dat_e <> "" Then
                    Me.dat_end.Text = rst_1!dat_e
                Else
                    Me.dat_end.Text = ""
            End If
            If Not IsNull(rst_1!id_mt) Or rst_1!id_mt <> "" Then
                    Me.f_mt.Text = rst_1!id_mt
                Else
                    Me.f_mt.Text = ""
            End If
            If Not IsNull(rst_1!id_stat) Or rst_1!id_stat <> "" Then
                    Me.f_stat.Text = rst_1!id_stat
                Else
                    Me.f_stat.Text = ""
            End If
        End If
        
        rst_1.Close
        Set rst_1 = Nothing
        
End Sub

Update записи

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Private Sub btn_f_e_Click()
    Dim rst As New ADODB.Recordset
    Dim work_path As String
    
        ...
            Form1.filtr_type.Text = ft
            
            work_path = CurDir("")
        
            Set rst = CreateObject("ADODB.Recordset")
    
            rst.Open "SELECT * FROM filtr_tmp Where id_filtr=1 ", _
                        Cn, adOpenDynamic, adLockOptimistic
            
            rst("filtr") = ft
            If Me.dat_begin <> "" Then
                    rst("dat_b") = Me.dat_begin
                Else
                    rst("dat_b") = Null
            End If
            If Me.dat_end <> "" Then
                    rst("dat_e") = Me.dat_end
                Else
                    rst("dat_e") = Null
            End If
            
            If Me.f_stat <> "" Then
                    rst("id_stat") = Trim(Me.f_stat)
                Else
                    rst("id_stat") = Null
            End If
            If Me.f_mt <> "" Then
                    rst("id_mt") = Trim(Me.f_mt)
                Else
                    rst("id_mt") = Null
            End If
            
            rst.Update
            rst.Requery
            rst.Close           
            Set rst = Nothing
    .....
   
End Sub
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072088
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Если можно подсказочку

автор TpaBkaКак Вы получаете данные для форм?
рекорсетом?
покажите код
попробуйте requery обоих источников данных

Ну или приложи архив с проектом, у кого есть VB посмотрят

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072096
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men


Это другое дело :)
При обновлении записи Refresh делать не нужно, потому что у тебя рекордсет который обновляет данные никак не связан с
рекордсетом который загружал данные. И данные показываемые на главной форме никак не связаны с данными из базы. После
обновления нежно вызвать Form_Load снова, чтобы загрузить из базы обновленные данные. Или найти их в элементе, который
отображает данные и отредатировать, если обновление прошло успешно

:)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072102
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

Прошу прощения а чем лучше повторное FormLoad переоткрытия коннекшена? там получается все равно идет повторный проход по

connection.open
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072107
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men


И кстати,
Код: plaintext
1.
2.
Private Sub Form_Load()
    Dim Cn As ADODB.Connection
А в btn_f_e_Click() используется непонятно откуда взявшийся конекшин, непорядок :)
Дальше
Код: plaintext
1.
Dim rst_1 As New ADODB.Recordset
        Set rst_1 = CreateObject("ADODB.Recordset")
Ты или рясу одень или крестик сними. В смысле New создает объект и CreateObject уже не нужен. И в btn_f_e_Click() то-же
самое :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072109
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос> Автор: Alex_men

Или найти их в элементе, который
отображает данные и отредатировать, если обновление прошло успешно

:)



Я может опять что не так скажу. Но у меня эти данные не отображаются. а просто вызываются Select -ом и подставляются в другой запрос в качестве параметра.
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072115
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> Прошу прощения а чем лучше повторное FormLoad переоткрытия коннекшена? там получается все равно идет повторный
> проход по connection.open


Конечно. Я думал у тебя DataAware элементы отображения данных, а ты делаешь простой запрос и перекачиваеш данные в
локальные компоненты и все. Дальше твой код от БД отвязан. Поэтому подход переоткрытия соединения в данном случае -
нормальный.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072125
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос> Автор: Alex_men

А в btn_f_e_Click() используется непонятно откуда взявшийся конекшин, непорядок :)


Тут все просто я его просто удалил когда код выкладывал :) А кстати вопрос а не проще объявить коннекшен для всего класса формы, а не дергать его в каждой процедуре?

Игорь Горбонос> Автор: Alex_men

Дальше
Код: plaintext
1.
Dim rst_1 As New ADODB.Recordset
        Set rst_1 = CreateObject("ADODB.Recordset")
Ты или рясу одень или крестик сними. В смысле New создает объект и CreateObject уже не нужен. И в btn_f_e_Click() то-же
самое :)


хмм, это дельно, учту. Спасибо.
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072132
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> А кстати вопрос а не проще объявить коннекшен для всего класса формы, а не дергать его в каждой процедуре?


Проще. И правильней. В Load формы его инициализировать, а дальше работать с подготовленным

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072159
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

DataAware - это элементы которые непосредственно с базой связаны и таблицей?? если да у меня с ними возникли трения :) прога с этими элементами требует установки MDAC, а на ХР SP3 mdac не хочет вставать.
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072176
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Alex_men
> DataAware - это элементы которые непосредственно с базой связаны и таблицей??

Да

> если да у меня с ними возникли трения :) прога с этими элементами требует установки MDAC, а на ХР SP3 mdac не
> хочет вставать.

Ы?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Непонятная ситуация с update.
    #37072188
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так:
Объявил бы рекордсеты и коннекшен в модуле (сделал общедоступными) либо на уровне формы, но public
И написал бы функцию типа:

Код: plaintext
1.
2.
3.
4.
Function SetForm1Recordset()

If rst.State =  1  Then
rst.Close
End If
Ну дальше Ваш код…….

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


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