Как сопоставить специальный символ в запросе MS Access с БД MS SQL? - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь найти совпадение с забавной строкой в ​​базе данных MS SQL.

Смешная строка выглядит как "AA-9999", но я подозреваю, что '-' не является стандартным '-'.

Sub mySub()

Dim rsExample As Recordset
Dim rsExample2 As Recordset
Dim db As Database
Dim SearchCriteria As String

    Set db = CurrentDb

    Set rsExample2 = db.OpenRecordset( _
                                    "select * from exTable2 order by dumbID", _
                                    dbOpenDynaset, _
                                    dbSeeChanges)


    Set rsExample = db.OpenRecordset( _
                                    "select * from exTable order by dumbID", _
                                    dbOpenDynaset, _
                                    dbSeeChanges)


    rsExample.MoveFirst

    while not rsExample2.eof       

        SearchCriteria = rsExample2("dumbID")

''        SearchCriteria = "dumbID = ""AA-9999"""

        rsExample.FindNext (SearchCriteria)

        If rsExample.NoMatch Then
            MsgBox ("Missing Record")
            rsExample.MoveFirst
        Else
            '' do stuff to record
        End If
    wend
End Sub

Я обратился к нему со следующим SQL, и, похоже, это указывает на то, что это стандарт '-'

SELECT ASCII (substring ([dumbID ],3,1)) as dumbIDascii
FROM exTable
where goodID like '1234'

дает мне

dumbIDascii
-----------
45

Как я могу сказать, что это на самом деле '-', или я что-то пропустил?

Ответы [ 2 ]

1 голос
/ 06 января 2012

Если ваш "-" нестандартный, то он в UNICODE, а не в ASCII.Попробуйте использовать функцию UNICODE () в вашем операторе SELECT.

0 голосов
/ 06 января 2012

Дальнейшее воспроизведение показало, что это поиск записи без внешнего цикла.Когда внешний цикл добавлен, он снова прекращает поиск записи.

Изменение подпрограммы путем перемещения, где rsExample.MoveFirst вызывается следующим образом:

Sub mySub()

Dim rsExample As Recordset
Dim rsExample2 As Recordset
Dim db As Database
Dim SearchCriteria As String

    Set db = CurrentDb

    Set rsExample2 = db.OpenRecordset( _
                                    "select * from exTable2 order by dumbID", _
                                    dbOpenDynaset, _
                                    dbSeeChanges)


    Set rsExample = db.OpenRecordset( _
                                    "select * from exTable order by dumbID", _
                                    dbOpenDynaset, _
                                    dbSeeChanges)

''  <--- from here 

    while not rsExample2.eof       

        rsExample.MoveFirst   '' <--- to here

        SearchCriteria = rsExample2("dumbID")

''        SearchCriteria = "dumbID = ""AA-9999"""

        rsExample.FindNext (SearchCriteria)

        If rsExample.NoMatch Then
            MsgBox ("Missing Record")
            rsExample.MoveFirst
        Else
            '' do stuff to record
        End If
    wend
End Sub

решил проблему.

Я подозреваю, что или rsExample не сортируется так, как я ожидаю, или что более ранние вызовы rsExample.FindNext переходят к точке, находящейся дальше в RecordSet, чем значения, которые я ищу.Новое правило для добавления в мою коллекцию Always do a MoveFirst, before you do a FindNext (unless you are looking for that exact same thing that you just use FindNext to search for).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...