powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
13 сообщений из 13, страница 1 из 1
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887398
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли в ADO вызове для MsSQL передать ' - единичную кавычку так, чтобы она не дублировалась?
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887469
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yunikiМожно ли в ADO вызове для MsSQL передать ' - единичную кавычку так, чтобы она не дублировалась?
А где она дублируется?
Можно передавать через ASC / CHR
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887491
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она дублируется, если такое значение илет В параметрах ADODB.COMMAND.Parameters(i)="'"
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887510
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А более полный вариант можно?
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887622
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function tu2()
Dim Cmd As New ADODB.Command
Dim Rs As New ADODB.Recordset
Dim param As Parameter
Cmd.ActiveConnection = CurrentProject.Connection
Cmd.CommandText = "myproc"
Cmd.CommandType = adCmdStoredProc
' Set up parameters.
Set param = Cmd.CreateParameter("s", adChar, adParamInput,  1 , "'")
Cmd.Parameters.Append param
Set Rs = Cmd.Execute       ' Здесь в профайлере уже видно, что идет :    exec myproc '''' 
If Not Rs.EOF And Not Rs.BOF Then
Debug.Print Rs( 0 )
Rs.Close
End If
End Function
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887631
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADO все правильно сделал.

Вы передаете строку из одной кавычки. По правилам SQL строка заключается в кавычки, а для ковычки внутри строки нужно поставить подряд две. Итого - четыре.

А в чем проблема ? Следить за кавычками нужно в ситуациях типа:

О'Брайен = 'О''Брайен'

Какой смысл имеет одна изолированная кавычка ?
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887652
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще то профайле показывает в человекочитаемом и пригодном для повторного использования виде виде. В данном случае
Код: plaintext
 exec myproc '''' 
такая строка серверу не передаётся, посылается пакет RPC, включающий имя процедуры и параметры , причём не в текстовом виде
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887924
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вообще-то конечно одна кавычка приведена для примера.

Процедура, которой передается параметр
использует внутри себя
exec ( ' select * from t1 where ' +Par)

а Par на T-SQL это: Дата='1-1-2004'

Для верной работы в exec внутри процедуры надо, чтобы Par= ' Дата=''1-1-2004''' (две кавычки внутри)
но когда в vb в Parameters передаю " Дата=''1-1-2004'' " (здесь в двойных кавычках строки VB стоит вокруг 1-1-2004 по паре одиночных кавычек ) идет синтак ошибка,

когда " Дата='1-1-2004' " , все прокатывает при этом профайлер показывает
exec nyMutex 'Set', 'ut_qry7View', 'Дата=''1-1-2004''', @P1 output
- т.е. с двумя кавычками внутри на каждую одну.

при всем этом если эту ХП запускать из QA c параметром 'Дата=''13-11-2004'' ' (внутри две кавычки) - все OK.
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887942
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храните даты в поле типа datetime и предавайте их как yyyymmdd - проблем не будет.
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887959
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забей на профайлер, он показывает немного не в том виде, в котором параметры передаются
Код: plaintext
1.
когда " Дата='1-1-2004' " , все прокатывает при этом профайлер показывает 
exec nyMutex 'Set', 'ut_qry7View', 'Дата='' 1 - 1 - 2004 ''', @P1 output
Что не так? ты из VBA передавал ОДИНОЧНЫЙ апостроф, в VBA строка была заключена в кавычки. На сервер параметр поехал с одним апострофом.
бедному профайлеру нужно для визуализации собрать EXEC который сервер даже не получал(RPC использовался). Так как в TSQL строки заключаются в арострофы, профайлер при ПОКАЗЕ трассы удвоил апостроф
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32887989
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет профайлер ничего не удвоил !

В процедуру-то строка именно такая - с удвоенными кавычками и передается и верно процедура отрабатывает .
А удваивает это уже цепочка OLEDB - ADO при использовании провайдера для MsSQL .

Короче ответ на первый вопрос :
НЕТ. Нельзя.

Помощь он (OLEDB - ADO ) такую оказывает, т.к. не без оснований полагает , что внутри T-SQL строки не может быть одного апострофы.
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32888032
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю по буквам

процедура
Код: plaintext
1.
2.
3.
CREATE PROCEDURE TEST12( @p varchar( 20 ))
AS 
	SELECT LEN(@p)
	RETURN 
вызов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set cmd.ActiveConnection = cnn
With cmd
    .CommandText = "test12"
    .CommandType = adCmdStoredProc
End With
cmd.Parameters.Append cmd.CreateParameter("@a", adVarChar, adParamInput,  20 , "a'b")
rst.Open cmd
msgbox rst( 0 )

Профайлер RPC Staring exec test12 'a''b'
Где удвоение? Изображена строка с ОДНИМ апострофом.

P.S. надо же, msgbox показывает 3, а не 4
...
Рейтинг: 0 / 0
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
    #32888477
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 yuniki
Я на вас дивлюсь
Как профайлером работать вы знаете, а по синтаксису строк совсем у вас плохо :( (этому вроже еще в школе учат)

Какая вам разница, что профайлер показывает
Вам надо смотреть что реально с данными происходит

т.е. пишите в базу свой апостроф через ХП
затем вытаскиваете данные из базы на клиента и смотрите, сколько апострофов!!!

PS: повторю предшественников:
VBA - стринга заключается в кавычки ("), следовательно апостроф внутри строки задается одинарный
MSSQL - стринга заключается в апострофы ('), следовательно для представления апострофа в константе типа стринг следует его удвоить!!! (см. MSDN), но при этом если эту константу засунуть в переменную и посмотреть ее длину, то все будет ОК (т.е. правильно)

Верно и обратное:
В VBA для задания кавычек в стринге (константе) их надо удваивать, а MSSQL ставить один штука!!!

PPS: УЧИТЕ МАТ. ЧАСТЬ
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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