|
|
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
Вопросы такие: 1) При использование метода Find все работает отлично и находится нужная запись. Тут все ясно. Но далее мне например нужно переместиться по записям вперед или назад, для этого есть на форме кнопка, использующая метод MoveNext и тп. Так вот после использования метода Find, а затем MoveNext я перемещаюсь не на следующую запись, идущую после записи найденной по Find, а перемещается на след. запись, идущую за той на которой стоял указатель до использования метода Find. Поясню: Например я нахожусь на записи 1, далее через поиск нахожу например 15-ю запись, на форме отображаются именно данные 15-ой записи... Далее жму следующую запись, но вопреки моим ожиданиям перехожу не на 16-ю, а на 2-ю :( Чую что вопрос легко решается, но чета туплю... 2) Если в код загрузки формы поместить код открытия соединения с БД, а также создание рекордсета, то после выгрузки данной формы соединение автоматически закрывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 09:44:53 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
1. Через что проводим навигацию, и через что ищем запись? Это один и тот-же рекордсет или разные вещи? 2. Коннекшн остается открытым даже если форма выгрузилась и даже если на него не ссылались. Видимо это особенность объектов ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 10:33:39 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
Worobjoff1. Через что проводим навигацию, и через что ищем запись? Это один и тот-же рекордсет или разные вещи? Навигация с помощью кнопок. Код примерно такой: Private Sub cmdMoveNext_Click() rstMain.MoveNext If rstMain.EOF = True Then rstMain.MoveLast MsgBox "Äîñòèãíóòà ïîñëåäíÿÿ çàïèñü", vbInformation End If With frmLodgerInfo .lblFlat.Caption = rstMain.Fields("FlatNumber").Value .txtSurname.Text = RTrim(rstMain.Fields("Owner").Value) .txtSquare.Text = rstMain.Fields("Square").Value .txtMenNumber.Text = rstMain.Fields("MenNumber").Value .txtOwnerNumber.Text = rstMain.Fields("OwnerNumber").Value .txtCount.Text = (20 * 1000 + CSng(rstMain.Fields("FlatNumber").Value)) End With End Sub Рекордсет один и тот же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 10:42:01 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
Приведите весь код. На всякий случай - пример, на котором убедился, что Find не сбивает букмарк рекордсета. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 11:06:44 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
WorobjoffПриведите весь код. Весь код... хм... По порядку: На форме есть кнопки навигации по записям и кнопка поиска. Код кнопки навигации я привел выше. Кнопка поиск загружает еще одну форму-форму поиска... и уже там указав параметры поиска я перехожу непосредственно к поиску следующим кодом: Private Sub cmdOk_Click() Select Case Me.cmbKey.ListIndex Case "0" rstMain.Find "FlatNumber = '" & Me.txtValue.Text & "'", 0, adSearchForward, adBookmarkFirst If rstMain.EOF Then MsgBox "Çàïèñü íå íàéäåíà (êîíåö)" Else With frmLodgerInfo .lblFlat.Caption = rstMain.Fields("FlatNumber").Value .txtSurname.Text = RTrim(rstMain.Fields("Owner").Value) End With Me.Hide End If Case "1" rstMain.Find "Owner LIKE '" & Me.txtValue.Text & "*'", 0, adSearchForward, adBookmarkFirst varBookmark = rstMain.Bookmark If rstMain.EOF Then MsgBox "Çàïèñü íå íàéäåíà (êîíåö)" Else With frmLodgerInfo .lblFlat.Caption = rstMain.Fields("FlatNumber").Value .txtSurname.Text = RTrim(rstMain.Fields("Owner").Value) End With Me.Hide End If End Select Теперь же используя кнопки навигации получается трабл описанный выше... Код загрузки формы поиска: Dim cnnMain As New ADODB.Connection Dim strConnect As String Dim strSQL1 As String strConnect = App.Path & "\work.mdb" cnnMain.Provider = "Microsoft.Jet.OLEDB.4.0" cnnMain.Open strConnect, "Admin" strSQL1 = "SELECT Main.FlatNumber, Main.Square, Main.MenNumber, Main.OwnerNumber, Owners.OwnerID, Owners.Owner FROM Months INNER JOIN ([Year] INNER JOIN (Owners INNER JOIN Main ON Owners.OwnerID=Main.OwnerID) ON Year.YearID=Main.YearID) ON Months.MonthID=Year.MonthID WHERE (((Months.Month)= " & strVarMonth1 & " ) AND ((Year.Year)= " & strVarYear & "))" rstMain.Open strSQL1, cnnMain, adOpenKeyset, adLockBatchOptimistic, adCmdText ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 11:23:51 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
ElektriKЭто - не весь код. объявление рекордсета где? И еще: в случае неудачного поиска корректировку позиции рекордсета кто делать будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 11:49:23 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
WorobjoffЭто - не весь код. объявление рекордсета где? вот: объявляю при загрузке основной формы (НЕ форма поиска) Dim rstMain As New ADODB.Recordset-в general declaration формы... Private Sub Form_Load() Me.Left = 10 Me.Top = 20 + frmMain.Height Dim cnnMain As New ADODB.Connection Dim strConnect As String Dim strSQL1 As String Dim strVarMonth1 As String Dim strVarMonth2 As String Dim strVarYear As String strVarMonth1 = "'Àïðåëü'" strVarYear = 2004 strConnect = App.Path & "\work.mdb" cnnMain.Provider = "Microsoft.Jet.OLEDB.4.0" cnnMain.Open strConnect, "Admin" strSQL1 = "SELECT Main.FlatNumber, Main.Square, Main.MenNumber, Main.OwnerNumber, Owners.OwnerID, Owners.Owner FROM Months INNER JOIN ([Year] INNER JOIN (Owners INNER JOIN Main ON Owners.OwnerID=Main.OwnerID) ON Year.YearID=Main.YearID) ON Months.MonthID=Year.MonthID WHERE (((Months.Month)= " & strVarMonth1 & " ) AND ((Year.Year)= " & strVarYear & "))" With frmLodgerInfo .lblFlat.Caption = rstMain.Fields("FlatNumber").Value .txtSurname.Text = RTrim(rstMain.Fields("Owner").Value) End With Exit Sub WorobjoffИ еще: в случае неудачного поиска корректировку позиции рекордсета кто делать будет? Как ее делают? Ежели у меня пробегает все записи и не находит, то попросту: If rstMain.EOF Then MsgBox "Запись не найдена" Else ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 12:06:54 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
1. Ссылку на рекодсет как передаете другой форме: через параметр процедуры или через свойство? 2. В случае неудачного поиска позиция рекодсета EOF и значит все поля должны обнулиться и невозможно редактирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 12:30:13 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
Worobjoff1. Ссылку на рекодсет как передаете другой форме: через параметр процедуры или через свойство? Упс... Собственно видимо никак :( Ежели есть пример какой нибудь по этому поводу, буду весьма признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 12:41:02 |
|
||
|
Пару вопросов по ADODB (Find+Move и Open+Close)
|
|||
|---|---|---|---|
|
#18+
Например так: Код: plaintext 1. 2. 3. 4. 5. 6. и в другой форме: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 13:28:32 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33356647&tid=2166924]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
198ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 491ms |

| 0 / 0 |
