Символ " ' " (апостроф) вызывает ошибку...

Alex_Piter
Дата: 06.09.2005 10:26:50
Доброго времени суток всем. Столкнулся с такой вот нетривиальной ситуацией, когда текстовая переменная, принимая значение слова с апострофом, вываливает ошибку синтаксиса (Run-time error '3075') - пропущен оператор в выражении запроса. Даже понятно, почему вылазит эта ошибка - потому что Access'у не разрулить три апострофа одновременно, но это ничего не дает. Мне важно знать другое - есть ли какой-нибудь способ это побороть, не изменяя содержание самой текстовой переменной (т.к. это название фирмы-производителя, по которому производится отбор ее продукции в запросе)? Или только удалением "лишнего" (что крайне нежелательно) апострофа из текстовой строки?

Заранее благодарен за ответы.
Proga
Дата: 06.09.2005 10:37:57
Код покажи.
Allll
Дата: 06.09.2005 10:51:45
Видимо вы столкнулись с проблемой Д\'Артаньна :)

Похожий случай

Удвойте апостроф и проблема разрешится. FAQ п.2
Владимир Саныч
Дата: 06.09.2005 10:54:19
Апострофы надо удваивать.
http://www.sql.ru/faq/faq_topic.aspx?fid=157
Владимир Саныч
Дата: 06.09.2005 10:54:39
Опоздал.
Alex_Piter
Дата: 06.09.2005 12:42:52
Proga, вот код:

Private Sub Proizvoditeli_tob_AfterUpdate()

Dim Proizvodtob As Variant

Proizvodtob = Proizvoditeli_tob.Value
If IsNull(Proizvodtob) Then Proizvodtob = ""
If Proizvodtob <> "" Then Proizvodtob_Where = " AND (Nom_oborud.Firma ='" & Proizvodtob & "')" Else Proizvodtob_Where = ""

CurrentDb.Execute ("DELETE * FROM Obor_naideno")
DoEvents

CurrentDb.Execute ("INSERT INTO Obor_naideno ( [Code_nom], [Gruppa_oborud], [Podgruppa_oborud], [Naimenovanie], [Marka], [Temp_rezh], [Power], [Komplekt], [Firma], [Measures], [Volume], [Konst_osob], [Price_post], [Price_otp]) " _
& "SELECT Nom_oborud.Code_nom, Nom_oborud.Gruppa_oborud, Nom_oborud.Podgruppa_oborud, Nom_oborud.Naimenovanie, Nom_oborud.Marka, Nom_oborud.Temp_rezh, Nom_oborud.Power, Nom_oborud.Komplekt, Nom_oborud.Firma, Nom_oborud.Measures, Nom_oborud.Volume, Nom_oborud.Konst_osob, Nom_oborud.Price_post, Nom_oborud.Price_otp " _
& "FROM Nom_oborud " & Proizvodtob_Where & ";")
DoEvents

Me!Obor_podch_2S_addnew.Requery

End Sub

Элементарная выборка из таблицы при помощи поля со списком.

Владимир Саныч, спасибо за совет, вот только где ж эту самую функцию DoubleApostrophe() искать? Я так понимаю, что это какая-то пользовательская приблуда, поскольку Access ее не опознает... :-( И в FAQ на эту тему ничего нет... :-(
AndrewNico
Дата: 06.09.2005 12:48:46
Я бы сделал так:

Proizvodtob = Replace(Proizvodtob,"'","''")

Но, это простейший выход из положения...
Allll
Дата: 06.09.2005 12:52:45
Хоть вы у меня не спрашивали, но я отвечу :)

Например, так:
Public Function DoubleApostrophe(ValueString As String) As String
' найти в исходном стринге ValueString все апострофыs
' и добавить к каждому апострофу ещё один ' -> ''
Dim PosStart As Integer, PosFind As Integer
    PosStart = 1
    Do
        PosFind = InStr(PosStart, ValueString, "'")
        If PosFind > 0 Then
            DoubleApostrophe = DoubleApostrophe & _
                                Mid$(ValueString, PosStart, PosFind - PosStart + 1) & "'"
            PosStart = PosFind + 1
        End If
    Loop While PosFind <> 0
    DoubleApostrophe = DoubleApostrophe & Mid$(ValueString, PosStart)
End Function

Этот вариант сделан под Access 97, а чемпионы по Access'у 2000 и выше, видимо могут упростить его.
Alex_Piter
Дата: 06.09.2005 13:05:31
AndrewNico, спасибо, все получилось! :-)

Allll, за код функции отдельное спасибо. Перекопировал в надежное место, попробую как с ней работает. :-)