Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid несколько вопросов по ее ошибке и др. / 21 сообщений из 21, страница 1 из 1
05.01.2006, 20:04:45
    #33469605
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
нужна помощь.
на форме есть грида с чекбоксами (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
06.01.2006, 09:09:34
    #33469890
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
1. После добавления записи в рекордсет к которому привязан грид из кода, надо сделать TDBGrid1.Refresh.
2. Вы открываете рекордсет adOpenDynamic. А коннекшн на стороне сервера?
...
Рейтинг: 0 / 0
06.01.2006, 09:29:26
    #33469895
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
нет, на стороне клиента. Вот код модуля в котором есть функция подключения.
Код: 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
06.01.2006, 09:39:24
    #33469901
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
Refresh сделал, но ошибка все-равно осталась
...
Рейтинг: 0 / 0
06.01.2006, 12:51:46
    #33470166
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
Если коннекшн на стороне клиента, то и рекордсет надо открывать adOpenStatic
Вообще Refresh должно срабатывать, но можно и TDBGrid.Requery
...
Рейтинг: 0 / 0
06.01.2006, 14:13:49
    #33470340
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
но если статик, то ничего не обновляется (т.е. галки нельзя ни убрать, не поставить). что делать?
...
Рейтинг: 0 / 0
06.01.2006, 14:35:08
    #33470379
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
с первым вопросом решено так:
Код: plaintext
1.
2.
Private Sub Form_Unload(Cancel As Integer)
    rs.Requery
End Sub
но вот со вторым все-равно что-то не понятное. Да и вопрос немного изменяется. После добавления записи, теперь можно галки ставить везде, ошибки нет, но...
последняя (только что созданная) запись, поставил галку (больше ни где галок не стоит), жму печать ... чистый лист (!). Закрываю отчет, ставлю еще одну галку на предыдущей записи. В отчет попадает последняя (!!) запись. Ставлю еще одну (третью) галку, жму печать, в отчете последняя запись, хоть ты тресни! В гриде потыкал по записям (не по чекбоксам), жму печать. Все! в отчете 3 (!!) записи. Что думаете??
...
Рейтинг: 0 / 0
06.01.2006, 14:48:44
    #33470418
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
Вот работающий пример:
Редактируется и "там" и "тут" без ошибок
Форма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
06.01.2006, 15:19:07
    #33470475
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
да это я уже сделал, работает, меня интересует авторно вот со вторым все-равно что-то не понятное. Да и вопрос немного изменяется. После добавления записи, теперь можно галки ставить везде, ошибки нет, но...
последняя (только что созданная) запись, поставил галку (больше ни где галок не стоит), жму печать ... чистый лист (!). Закрываю отчет, ставлю еще одну галку на предыдущей записи. В отчет попадает последняя (!!) запись. Ставлю еще одну (третью) галку, жму печать, в отчете последняя запись, хоть ты тресни! В гриде потыкал по записям (не по чекбоксам), жму печать. Все! в отчете 3 (!!) записи. Что думаете??
...
Рейтинг: 0 / 0
06.01.2006, 15:41:43
    #33470515
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
А как в отчет выводите?
Приведите код.
...
Рейтинг: 0 / 0
06.01.2006, 15:42:55
    #33470516
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
Описанная проблема похожа на то что вы используете тот же рекорсдет к которому привязан грид.
А надо через клон.
...
Рейтинг: 0 / 0
06.01.2006, 15:46:40
    #33470525
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
нет, я вообще открываю новый рекордсет. вот код.
Код: 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
06.01.2006, 15:47:46
    #33470529
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
но наверное действительно нужно использовать клон (про клонирование я забыл что-то :()
...
Рейтинг: 0 / 0
06.01.2006, 15:50:41
    #33470533
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
стоп, стоп, че-го то я туплю... нельзя здесь просто взять и клонировать... здусь же используется выборка с условием...
...
Рейтинг: 0 / 0
06.01.2006, 16:03:25
    #33470546
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
Все правильно:
Код: plaintext
1.
2.
3.
Set rs_report = rs.Clone
'Можно применить фильтр (и сортировку):
rs_report.Filter = "check = -1"
...
Рейтинг: 0 / 0
06.01.2006, 16:28:15
    #33470579
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
спасибо! наверное на сегодня хватит кодить... :) неправильные какие-то мысли лезут в голову...
...
Рейтинг: 0 / 0
11.01.2006, 10:16:00
    #33475694
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
посоветуйте пожалуста, как мне можно сделать... если бы я применял
Код: 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
11.01.2006, 12:27:21
    #33476200
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid несколько вопросов по ее ошибке и др.
А так не сработает?
Код: plaintext
ActiveReport1.ado1.Recordset.Filter = "....

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


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