Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась? / 13 сообщений из 13, страница 1 из 1
27.01.2005, 15:38:31
    #32887398
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
Можно ли в ADO вызове для MsSQL передать ' - единичную кавычку так, чтобы она не дублировалась?
...
Рейтинг: 0 / 0
27.01.2005, 15:57:35
    #32887469
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
yunikiМожно ли в ADO вызове для MsSQL передать ' - единичную кавычку так, чтобы она не дублировалась?
А где она дублируется?
Можно передавать через ASC / CHR
...
Рейтинг: 0 / 0
27.01.2005, 16:07:51
    #32887491
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
Она дублируется, если такое значение илет В параметрах ADODB.COMMAND.Parameters(i)="'"
...
Рейтинг: 0 / 0
27.01.2005, 16:12:15
    #32887510
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
А более полный вариант можно?
...
Рейтинг: 0 / 0
27.01.2005, 16:53:51
    #32887622
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
Код: 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
27.01.2005, 16:58:05
    #32887631
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
ADO все правильно сделал.

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

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

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

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

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

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

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

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

процедура
Код: 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
28.01.2005, 09:33:25
    #32888477
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в ADO вызове для MsSQL передать ' так, чтобы она не дублировалась?
2 yuniki
Я на вас дивлюсь
Как профайлером работать вы знаете, а по синтаксису строк совсем у вас плохо :( (этому вроже еще в школе учат)

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

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

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

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

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


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