Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать текущую запись в ADODB / 13 сообщений из 13, страница 1 из 1
07.10.2011, 18:22
    #37473416
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Ищу конкретную запись как видно в коде
если не нашел, продолжаю дальше искать
Ищу по одном поле, а когда нахожу его уточняю еще и другие поля. Если есть там то что мне нужно выходим и функции (тоесть не добавляем новую запись), иначе ищем до тех пор пока ничего не найдем и добавим новую запись

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
If MDB_ArtistMojliviy.RecordCount >  0  Then
   MDB_ArtistMojliviy.MoveFirst
znovu2:
   MDB_ArtistMojliviy.Find "NameArtist = '" & VhArtis & "'", , adSearchForward
   
   If MDB_ArtistMojliviy.EOF = False Then
     If MDB_ArtistMojliviy.Fields("NameTrack").value = VhTrack Then
       If MDB_ArtistMojliviy.Fields("Path").value = VhPath Then
         Exit Sub
       End If
     End If
     GoTo znovu2
   End If
End If

  MDB_ArtistMojliviy.AddNew
  MDB_ArtistMojliviy.Fields("NameArtist") = VhArtis
  MDB_ArtistMojliviy.Fields("NameTrack") = VhTrack
  MDB_ArtistMojliviy.Fields("Path") = VhPath
  MDB_ArtistMojliviy.Fields("DateEditFile") = FileDateTime(VhPath)

  MDB_ArtistMojliviy.Save: MDB_ArtistMojliviy.Update

Проблема:
EOF не хочет быть TRUE. Если б записи там такой небыло, тогда EOF срабатывает, а если там одна, две и больше записей, тогда в цылке сидит себе. Как быть в такой ситуации ?

Я бы выкрутился если б знал как узнать поточную позицию записи. А я знаю как лишь перейти на конкретную запись, а как узнать на какой я сейчас ?

с уважением Андрей
...
Рейтинг: 0 / 0
07.10.2011, 18:27
    #37473421
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Код: plaintext
1.
2.
...
 MDB_ArtistMojliviy.Save
...

что это?
...
Рейтинг: 0 / 0
07.10.2011, 18:31
    #37473425
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
да фиг его знает. Можно и без этого. Позицию можно узнать ?
...
Рейтинг: 0 / 0
07.10.2011, 18:36
    #37473435
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
MDB_ArtistMojliviy.AbsolutePosition
...
Рейтинг: 0 / 0
07.10.2011, 18:46
    #37473448
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Андрей159Ищу конкретную запись как видно в коде
если не нашел, продолжаю дальше искать
Ищу по одном поле, а когда нахожу его уточняю еще и другие поля. Если есть там то что мне нужно выходим и функции (тоесть не добавляем новую запись), иначе ищем до тех пор пока ничего не найдем и добавим новую запись
Я так понимаю что использовать "select ... where" и "insert" религия запрещает?
...
Рейтинг: 0 / 0
07.10.2011, 18:47
    #37473450
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Пробовал. Например 15 записей. Выдает то -1 то -3. Когда начинаю MDB_ArtistMojliviy.MovePrevious MDB_ArtistMojliviy.MoveNext двигать, то числа меняются, а поиск дает одно и тоже -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.
26.
27.
28.
29.
30.
   Dim kod As Long
   VhArtis = Trim(VhArtis)
   If VhArtis = "" Then Exit Sub
  
'Пошук на дублікат
If MDB_ArtistMojliviy.RecordCount >  0  Then
   MDB_ArtistMojliviy.MoveFirst
znovu2:
   MDB_ArtistMojliviy.Find "NameArtist = '" & VhArtis & "'", , adSearchForward
   
   
   If MDB_ArtistMojliviy.EOF = False Then
    If kod = MDB_ArtistMojliviy.Fields("Kod").value Then GoTo Dali2
     If MDB_ArtistMojliviy.Fields("NameTrack").value = VhTrack Then
       If MDB_ArtistMojliviy.Fields("Path").value = VhPath Then
         Exit Sub
       End If
     End If
     kod = MDB_ArtistMojliviy.Fields("Kod").value
     GoTo znovu2
   End If
End If
Dali2:
  MDB_ArtistMojliviy.AddNew
  MDB_ArtistMojliviy.Fields("NameArtist") = VhArtis
  MDB_ArtistMojliviy.Fields("NameTrack") = VhTrack
  MDB_ArtistMojliviy.Fields("Path") = VhPath
  MDB_ArtistMojliviy.Fields("DateEditFile") = FileDateTime(VhPath)
  

    MDB_ArtistMojliviy.Update
Код у меня "счетчик", поэтому и работает

Не знаю. Может что-то упустил. Программа должна выглядеть по проще
...
Рейтинг: 0 / 0
07.10.2011, 19:00
    #37473472
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Ну ешкин кот
MDB_ArtistMojliviy.Find "NameArtist = '" & VhArtis & "'", 1

"1" добавил и заработало, а раньше нашло что-то и висит на нем
...
Рейтинг: 0 / 0
07.10.2011, 21:17
    #37473586
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
В DAO (Data Access Objects) вижу позиция работает отлично. Только вот не знаю какие там нюансы. Попробую покопаюсь
...
Рейтинг: 0 / 0
07.10.2011, 22:03
    #37473628
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
White OwlЯ так понимаю что использовать "select ... where" и "insert" религия запрещает?
Андрей159Пробовал. Например 15 записей. Выдает то -1 то -3.
...
что пробывал ?? запросом проверь есть такая запись или нет !
без этого дурноватого GoTo znovu2
...
Рейтинг: 0 / 0
09.10.2011, 02:15
    #37474344
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Андрей159Проблема:


Столько кода и рассуждений... Нет чтобы в Help-e прочитать про Filter и все решилось бы примитивно...
...
Рейтинг: 0 / 0
09.10.2011, 05:41
    #37474363
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Фильтр и запрос работает медленно
...
Рейтинг: 0 / 0
12.10.2011, 15:43
    #37478971
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
Андрей159,

Фильтр - надо тестировать...
Но чтобы правильно построенный запрос работал медленнее, чем цикл - это надо умудриться
Пробовали построить запрос?

Кроме того, не обязательно "шарашиться" по рекордсету - можно ведь его сначала слить в массив, а потом поиск проводить по нему...
...
Рейтинг: 0 / 0
13.10.2011, 00:48
    #37479770
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать текущую запись в ADODB
В большинстве случаев из всей базы будет одно или несколько значений. В даном случае мне подходить только Find, а сравнивать с запросом по скорости смысла нет. Както когдато может "умудрюсь" выложу для сравнения на ютуб, хотя это лишнее в DAO все что нужно уже решил
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать текущую запись в ADODB / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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