powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid несколько вопросов по ее ошибке и др.
21 сообщений из 21, страница 1 из 1
TDBGrid несколько вопросов по ее ошибке и др.
    #33469605
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужна помощь.
на форме есть грида с чекбоксами (TDBGrid), она подвязана к рекордсету
Код: plaintext
1.
2.
3.
Call conect
    Set rs = New ADODB.Recordset
    rs.Open "select * from users", conn, adOpenDynamic, adLockOptimistic
    Set dg.DataSource = rs
все работает, отоброжается, но возникают след. проблемы.
я добавил из другой формы в этот (rs) рекордсет строку. Ставлю галку в только что добавленную строку (в соответсв. поле), она ставится, пытаюсь поставить галку в соседнее поле (одной строкой выше, и которая ко всему прочему уже была создана) то вываливается ошибка у гриды:
Код: plaintext
Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения
что посоветуете?
еще вопрос такой. Например надобавлял я записей... теперь хочу их распечатать (это у меня реализовано так, ставлю галку напротив того что хочу печатать, и соответственно эти записи у меня попадают в отчет). Но т.к. вылазит ошибка из вопроса №1, то приходится программу выгрузить и снова загрузить, теперь галки можно ставить.
НО (!!!) например добавил я 2 новых записи, ставлю галку на 4х записях (две уже бывшие и 2 только что добавленные) в отчет попадают только 2 (!) записи которые уже были, а те 2 вновь добавленные не попадают. После выгрузки/загрузки уже 4 записи можно печатать (они попали в отчет).
подскажите пожалуйста какие методы я забыл использовать, или возможно еще в чем другом моя ошибка.
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33469890
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. После добавления записи в рекордсет к которому привязан грид из кода, надо сделать TDBGrid1.Refresh.
2. Вы открываете рекордсет adOpenDynamic. А коннекшн на стороне сервера?
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33469895
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, на стороне клиента. Вот код модуля в котором есть функция подключения.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Option Explicit
Public conn As ADODB.Connection

Public Sub conect()
    Set conn = New ADODB.Connection
    conn.CursorLocation = adUseClient
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\basenp.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
End Sub
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33469901
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Refresh сделал, но ошибка все-равно осталась
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470166
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если коннекшн на стороне клиента, то и рекордсет надо открывать adOpenStatic
Вообще Refresh должно срабатывать, но можно и TDBGrid.Requery
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470340
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но если статик, то ничего не обновляется (т.е. галки нельзя ни убрать, не поставить). что делать?
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470379
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с первым вопросом решено так:
Код: plaintext
1.
2.
Private Sub Form_Unload(Cancel As Integer)
    rs.Requery
End Sub
но вот со вторым все-равно что-то не понятное. Да и вопрос немного изменяется. После добавления записи, теперь можно галки ставить везде, ошибки нет, но...
последняя (только что созданная) запись, поставил галку (больше ни где галок не стоит), жму печать ... чистый лист (!). Закрываю отчет, ставлю еще одну галку на предыдущей записи. В отчет попадает последняя (!!) запись. Ставлю еще одну (третью) галку, жму печать, в отчете последняя запись, хоть ты тресни! В гриде потыкал по записям (не по чекбоксам), жму печать. Все! в отчете 3 (!!) записи. Что думаете??
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470418
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот работающий пример:
Редактируется и "там" и "тут" без ошибок
Форма1:
Код: 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.
Option Explicit

Dim Conn1 As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub btnNew_Click()
   If Form2.ShowNew(rs) Then
      TDBGrid1.Refresh
   End If
End Sub

Private Sub Form_Initialize()
   Set Conn1 = New ADODB.Connection
   Set rs = New ADODB.Recordset
End Sub

Private Sub Form_Load()
   Conn1.CursorLocation = adUseClient
   Conn1.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=(local)"
   rs.Open "select * from Customers", Conn1, adOpenStatic, adLockOptimistic, adCmdText
   Set TDBGrid1.DataSource = rs
End Sub

Private Sub Form_Resize()
   TDBGrid1.Width = Me.ScaleWidth
End Sub

Форма2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Dim OK_Exit As Boolean

Public Function ShowNew(ByRef rs As ADODB.Recordset) As Boolean
   Dim c As Control
   rs.AddNew Array("CustomerID", "CompanyName"), Array("?" & rs.RecordCount, "?") 'NotNull-поля обязательно определить
   rs.MoveLast
   DoEvents
   For Each c In Me.Controls
      If TypeOf c Is TextBox Then
         Set c.DataSource = rs
      End If
   Next
   
   Me.Show vbModal
   
   If OK_Exit Then rs.Update
   ShowNew = OK_Exit
End Function

Private Sub btnOK_Click()
   Me.Hide
End Sub
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470475
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это я уже сделал, работает, меня интересует авторно вот со вторым все-равно что-то не понятное. Да и вопрос немного изменяется. После добавления записи, теперь можно галки ставить везде, ошибки нет, но...
последняя (только что созданная) запись, поставил галку (больше ни где галок не стоит), жму печать ... чистый лист (!). Закрываю отчет, ставлю еще одну галку на предыдущей записи. В отчет попадает последняя (!!) запись. Ставлю еще одну (третью) галку, жму печать, в отчете последняя запись, хоть ты тресни! В гриде потыкал по записям (не по чекбоксам), жму печать. Все! в отчете 3 (!!) записи. Что думаете??
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470515
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как в отчет выводите?
Приведите код.
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470516
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описанная проблема похожа на то что вы используете тот же рекорсдет к которому привязан грид.
А надо через клон.
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470525
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, я вообще открываю новый рекордсет. вот код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Call conect
Dim rs_report As ADODB.Recordset
Set rs_report = New ADODB.Recordset
    rs_report.Open "SELECT * FROM users WHERE check = -1", conn
Set ActiveReport1.ado1.Recordset = rs_report
    With ActiveReport1
        .Field1.DataField = "barcode"
        .Barcode1.DataField = "barcode"
        .Field3.DataField = "summa"
        ......
        .Show vbModal
    End With
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470529
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но наверное действительно нужно использовать клон (про клонирование я забыл что-то :()
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470533
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стоп, стоп, че-го то я туплю... нельзя здесь просто взять и клонировать... здусь же используется выборка с условием...
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470546
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все правильно:
Код: plaintext
1.
2.
3.
Set rs_report = rs.Clone
'Можно применить фильтр (и сортировку):
rs_report.Filter = "check = -1"
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33470579
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо! наверное на сегодня хватит кодить... :) неправильные какие-то мысли лезут в голову...
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33475694
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посоветуйте пожалуста, как мне можно сделать... если бы я применял
Код: plaintext
1.
2.
3.
Dim rs_report As ADODB.Recordset
Set rs_report = New ADODB.Recordset
    rs_report.Open "SELECT users.поле1 и т.д. из этой же таблицы, rekv.поле и т.д. из таблицы rekv WHERE users.check = -1", conn
Set ActiveReport1.ado1.Recordset = rs_report
а вот как мне сделать если я клонировал рекордсет?
если бы можно было запросом, то я бы и не спрашивал, но к сожалению запрос не работает, точнее работает, но не правильно. А не работает из-за того что грида не сразу обновляет данные в таблице... :(
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33476200
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так не сработает?
Код: plaintext
ActiveReport1.ado1.Recordset.Filter = "....

(не использую репорты, по этому могу лишь предполагать)
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33476310
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно и так поступить:
Перед вызовом отчета сделать это:
Код: plaintext
1.
TDBGrid1.Update
' и rsGrid.UpdateButch 'если используете BatchOptimistic
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33476948
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА так не сработает?
ActiveReport1.ado1.Recordset.Filter = "....
(не использую репорты, по этому могу лишь предполагать)
здесь, думаю, не важно на чей рекордсет поставить фильтр. Можно конечно и на адошку репорта, но... сдесь проблему я представляю вот в чем (как я думаю). Когда я ставлю галку в гриде, и жму кнопку печать, в рекордсете к которому подвязана грида, поле chek успевает обновиться, а вот поле самой таблицы, к сожалению, не успевает. :(
...
Рейтинг: 0 / 0
TDBGrid несколько вопросов по ее ошибке и др.
    #33477082
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не "не успевает", а грид не возвращает записи рекордсету до перехода на другую строчку.
Чтобы вернуть записии без перехода надо выполнить Grid.Update
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid несколько вопросов по ее ошибке и др.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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