powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO Recordset
30 сообщений из 30, показаны все 2 страниц
DAO Recordset
    #32495817
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача, -
Есть обьект DAO Recordset. Дальше, в цикле просматриваются все записи. К первому полю применяется определенный критерий, достаточно сложный, что-бы его использовать в запросе, определяющем этот набор записей.
Как можно, если значение поля не удовлетворяет этому критерию, удалить строку из набора, не удаляя строку из таблицы ?
...
Рейтинг: 0 / 0
DAO Recordset
    #32495818
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Никак. Только заранее правильно написать WHERE.

Компромиссный вариант - завести вспомогательное поле и отмечать в нем.
...
Рейтинг: 0 / 0
DAO Recordset
    #32495830
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо,
у меня функция от поля(строки) и другой строки, возвращающая true/false,
в WHERE, как понимаю, такое ведь не всунуть?
...
Рейтинг: 0 / 0
DAO Recordset
    #32495835
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что значит другой строки? Другой записи? Можно при желании. Или другая строка - это просто другое поле? Тогда вообще никаких проблем.
...
Рейтинг: 0 / 0
DAO Recordset
    #32495839
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не связанной с записями строки.
...
Рейтинг: 0 / 0
DAO Recordset
    #32495841
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А откуда она берется? Это константа? Или она возвращается какой-то функцией?
...
Рейтинг: 0 / 0
DAO Recordset
    #32495846
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица клиентов. Одно из полей - название. Пользователь вводит в поле название, жмет кнопочку - делается поиск соотв. записей.

Проблема в том, что пользователь может ошибится в буквах, ввести не совсем правильное название. Поэтому задача ставится - вывести все записи с названием фирм, набор букв в названии которых на 70% совпадает с набором букв, введенных в поле.

Отсюда функция от строковой константы и текстового поля, возвращающая true/false.
...
Рейтинг: 0 / 0
DAO Recordset
    #32495850
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И что мешает поместить вызов этой функции в WHERE?
...
Рейтинг: 0 / 0
DAO Recordset
    #32495852
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное, моя тормознутость :)
спасибо.
...
Рейтинг: 0 / 0
DAO Recordset
    #32496195
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда еще вопросик, по поводу вставки функции в WHERE

если функция без параметров, все работает, если есть параметры, то ошибка - "неопределенная вункция в выражении"

есть какие-то особенности в этом случае?
...
Рейтинг: 0 / 0
DAO Recordset
    #32497029
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если программа выдает ошибку, значит в ней где-то есть ошибка. Не видя программу, точнее сказать не могу.

(Каков вопрос, таков ответ...)
...
Рейтинг: 0 / 0
DAO Recordset
    #32497065
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если убрать вещи, не относящиеся к вопросу, то код -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function StrCmp(strString As String) As Boolean
    StrCmp = True
End Function
                                                    
Private Sub cmdSelectByName_Click()
    Dim strQuery, strString As String
    strString =  "test" 
    strQuery =  "SELECT * FROM tblClients WHERE StrCmp(strString) = true" 
    RecordSourceSetting (strQuery)
End Sub


Выдает ошибку ошибку "Неопределенная функция StrCmp в выражении", я так понимаю с синтаксисом что-то не то.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497080
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не то.

Код: plaintext
1.
strQuery =  "SELECT * FROM tblClients WHERE StrCmp("  & strString &  ") = true" 
...
Рейтинг: 0 / 0
DAO Recordset
    #32497084
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс...
Код: plaintext
1.
strQuery =  "SELECT * FROM tblClients WHERE StrCmp('" & strString & "') = true" 
...
Рейтинг: 0 / 0
DAO Recordset
    #32497093
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 zz
спасибо, но все равно, не работает.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497100
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а что говорит-то? То же самое?
...
Рейтинг: 0 / 0
DAO Recordset
    #32497107
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub cmdSelectByName_Click()
    Dim strQuery, strString As String
    strString =  "test" 
    
    strQuery =  "SELECT * FROM  tblClients WHERE  StrCmp12('" & strString & "') = true" 
    RecordSourceSetting (strQuery)
End Sub


да, то-же самое.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497114
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А цифирь 12 в названии функции откуда вылезла? У тебя точно сама функция и ее вызов одинаково называются?
...
Рейтинг: 0 / 0
DAO Recordset
    #32497134
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, точно,
12 опечатка
...
Рейтинг: 0 / 0
DAO Recordset
    #32497151
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот это
Код: plaintext
1.
2.
3.
Public Function StrCmp(strString As String) As Boolean
    StrCmp = True
End Function


где находится?
...
Рейтинг: 0 / 0
DAO Recordset
    #32497154
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там-же, где и вызывающая ее функция.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497165
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть в модуле формы, судя по _Click вызывающей процедуры?
...
перенеси свою функцию в отдельный модуль.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497178
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати только что сделал поиск похожих названий клиентов при ошибочном вводе...

за основу взял библиотеку написанную на C++ одним умельцем

что мне в ней понравилось - быстро работает.
по сравнению с аналогичными VB шными - 10 и более быстрее
получился результат
Вычисление похожести, Обновление поля в рекордсете, пересортировка
около 3 секунд на 1000 строк данных при длине искомой фразы 50 символов


алгоритм использования следующий :

открывается рекордсет и в числовое поле "Похожесть" пишется результат функции от сравнения названия и искомой строки

Длл и пример кода могу кинуть если интересно
...
Рейтинг: 0 / 0
DAO Recordset
    #32497181
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, забыл сказать самое главное - находит самые невероятные варианты похожести
...
Рейтинг: 0 / 0
DAO Recordset
    #32497186
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей, а как это стыкуется с данным топиком? :)
...
Рейтинг: 0 / 0
DAO Recordset
    #32497192
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть таблица клиентов. Одно из полей - название. Пользователь вводит в поле название, жмет кнопочку - делается поиск соотв. записей.

Проблема в том, что пользователь может ошибится в буквах, ввести не совсем правильное название. Поэтому задача ставится - вывести все записи с названием фирм, набор букв в названии которых на 70% совпадает с набором букв, введенных в поле.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497194
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК
киньте, интересно

2 zz
спасибо, вроде пошло,
в чем могла быть проблема?
...
Рейтинг: 0 / 0
DAO Recordset
    #32497204
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АлексейК:
упс, извини, не заметил этого поста :)

2Guest:
Функция, объявленная в модуле формы, видна только из этого модуля, хоть как ее объявляй. Поэтому твой запрос ее не находил.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497212
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АлексейК:
Если не трудно, кинь мне тоже, мыло в профиле.
...
Рейтинг: 0 / 0
DAO Recordset
    #32497234
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
Option Compare Database
Option Explicit

' Длл должна быть скопирована в      :\WINDOWS\system32\  '

Private Declare Function StrCompare Lib  "stringcompare.dll"  Alias _
    "similarity"  (ByVal i As Long, ByVal a As String, ByVal b As String) As Double


Private Sub simple1()
 


If Len(Nz(Me.findstr,  "")) < 3  Then
MsgBox "Для поиска небходимо ввести более  3  букв "
Exit Sub
End If


Dim rst As New ADODB.Recordset
rst.Open " client ", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
Dim str


str = Left(Me.findstr, 50 )
str = Replace(str, " ОАО ", "  ", , , vbTextCompare)
str = Replace(str, "  OAO ", "  ", , , vbTextCompare)
str = Replace(str, "  ОАО ", "  ", , , vbTextCompare)

str = Replace(str, "  ООО ", "  ", , , vbTextCompare)
str = Replace(str, "  OOO ", "  ", , , vbTextCompare)

rst.PageSize = 10 
Me.PB.Max = rst.PageCount
'PB - Это прогресбар - не нужен отключи'
Me.PB.Visible = True


rst.MoveFirst
Do Until rst.EOF
    If Me.PB.value <> rst.AbsolutePage Then Me.PB.value = rst.AbsolutePage
    rst!simple = StrCompare( 50 , rst!name, str)
rst.MoveNext
Loop

Me.OrderBy = "simple DESC"

Me.PB.Visible = False
Me.OrderByOn = True
Me.Requery
rst.Close
Set rst = Nothing

End Sub


библиотека (25 кб) здесь
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO Recordset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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