SET QUOTED_IDENTIFIER OFF
От: PavelT100 Россия  
Дата: 22.01.03 10:50
Оценка:
Из QA запускаю —
SET QUOTED_IDENTIFIER OFF
INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(6,"HEPATITE CHOLESTATIQUE","C5*")

все работает.

Из VB6 с использованием ADO пишу —

...
str1 = "6"
str2 = "HEPATITE CHOLESTATIQUE"
str3 = "C5*"
Call cnnPBD.Execute("SET QUOTED_IDENTIFIER OFF")
InsSQL = "INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(" & _
            str1 & ",""" & str2 & """,""" & str3 & """)"
Call cnnPBD.Execute(InsSQL)


Ругаются —
The name 'HEPATITE CHOLESTATIQUE' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
Почему ?
Re: SET QUOTED_IDENTIFIER OFF
От: sorgery  
Дата: 22.01.03 11:09
Оценка:
Здравствуйте, PavelT100, Вы писали:

PT>Из VB6 с использованием ADO пишу -

PT>Ругаются —
PT>The name 'HEPATITE CHOLESTATIQUE' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
PT>Почему ?

Попробую это дело посмотреть под сиквеловским профайлером.
и текст в сиквеле забивается в одинарные ковычки 'my text'
... << RSDN@Home 1.0 beta 4 >>
Re[2]: SET QUOTED_IDENTIFIER OFF
От: PavelT100 Россия  
Дата: 22.01.03 11:14
Оценка:
Если писать с одинарными кавычками, то все работает, но тогда будет работать и при SET QUOTED_IDENTIFIER ON.
А мне хочется работать с двойными кавычками, потому-что в других моих строках данных будет встречаться апостроф < ' >.
Re[3]: SET QUOTED_IDENTIFIER OFF
От: andik  
Дата: 22.01.03 11:34
Оценка:
Здравствуйте, PavelT100, Вы писали:

PT>А мне хочется работать с двойными кавычками, потому-что в других моих строках данных будет встречаться апостроф < ' >.


можно же передавать значения через параметры или апостроф < ' > заменять на < '' >
Re[3]: SET QUOTED_IDENTIFIER OFF
От: sorgery  
Дата: 22.01.03 11:35
Оценка:
Здравствуйте, PavelT100, Вы писали:

PT>Если писать с одинарными кавычками, то все работает, но тогда будет работать и при SET QUOTED_IDENTIFIER ON.

PT>А мне хочется работать с двойными кавычками, потому-что в других моих строках данных будет встречаться апостроф < ' >.

А как в профайлере смотрится твой запрос?
... << RSDN@Home 1.0 beta 4 >>
Re[4]: SET QUOTED_IDENTIFIER OFF
От: PavelT100 Россия  
Дата: 22.01.03 11:36
Оценка: -1
Здравствуйте, andik, Вы писали:
A>можно же передавать значения через параметры или апостроф < ' > заменять на < '' >

Заменять на < '' > — это сложно, а вот с параметрами, наверно, попробую.
Re[5]: SET QUOTED_IDENTIFIER OFF
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 22.01.03 11:47
Оценка:
Здравствуйте, PavelT100, Вы писали:


PT>Заменять на < '' > — это сложно, а вот с параметрами, наверно, попробую.


Не понял — чего сложного-то

Как пример на Билдере:


String s = "test'quotes";
String Result;

for(int i=1;i<=s.Length();i++)
 {
  if(s[i]=='\'')
    Result += "'";

  Result += s[i];
 }


Вот и все... Так чего сложного то? Пишем одну функцию и юзаем ее везде, где нужно...
Re[5]: SET QUOTED_IDENTIFIER OFF
От: andik  
Дата: 22.01.03 11:51
Оценка:
Здравствуйте, PavelT100, Вы писали:

PT>Заменять на < '' > — это сложно

Почему? В VB же есть функция Replcace
Re[6]: SET QUOTED_IDENTIFIER OFF
От: PavelT100 Россия  
Дата: 22.01.03 12:08
Оценка:
Здравствуйте, Flamer, Вы писали:
F>Вот и все... Так чего сложного то? Пишем одну функцию и юзаем ее везде, где нужно...

Спасибо, это я все понимаю, и до этого так и делал, но хочется проще, и вообще у меня вопрос был
почему SET QUOTED_IDENTIFIER OFF из бейсика не проходит ?
Re[7]: SET QUOTED_IDENTIFIER OFF
От: SCS  
Дата: 22.01.03 12:14
Оценка: -1
Здравствуйте, PavelT100, Вы писали:

PT>Здравствуйте, Flamer, Вы писали:

F>>Вот и все... Так чего сложного то? Пишем одну функцию и юзаем ее везде, где нужно...

PT>Спасибо, это я все понимаю, и до этого так и делал, но хочется проще, и вообще у меня вопрос был

PT>почему SET QUOTED_IDENTIFIER OFF из бейсика не проходит ?

если это реально из программы
InsSQL = "INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(" & _
            str1 & ",""" & str2 & """,""" & str3 & """)"

исправь на
InsSQL = "INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(""" & _
            str1 & """,""" & str2 & """,""" & str3 & """)"
SCS
Re[7]: SET QUOTED_IDENTIFIER OFF
От: _MarlboroMan_ Россия  
Дата: 22.01.03 12:16
Оценка: 30 (1)
Здравствуйте, PavelT100, Вы писали:

PT>Здравствуйте, Flamer, Вы писали:

F>>Вот и все... Так чего сложного то? Пишем одну функцию и юзаем ее везде, где нужно...

PT>Спасибо, это я все понимаю, и до этого так и делал, но хочется проще, и вообще у меня вопрос был

PT>почему SET QUOTED_IDENTIFIER OFF из бейсика не проходит ?

SET QUOTED_IDENTIFIER is set at parse time. Setting at parse time means that if the SET statement is present in the batch or stored procedure, it takes effect, regardless of whether code execution actually reaches that point; and the SET statement takes effect before any statements are executed.
... << RSDN@Home 1.0 beta 5... наслаждаюсь тишиной >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re: SET QUOTED_IDENTIFIER OFF
От: Alex K  
Дата: 22.01.03 12:25
Оценка:
Здравствуйте, PavelT100, Вы писали:

А почему у тебя операторы в разных batch-пакетах? Просто объедини оба в одну строку (не забудь перевод строки) и выполни одним Execute...

PT>Из QA запускаю —

PT>
PT>SET QUOTED_IDENTIFIER OFF
PT>INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(6,"HEPATITE CHOLESTATIQUE","C5*")
PT>

PT>все работает.

PT>Из VB6 с использованием ADO пишу -


PT>
PT>...
PT>str1 = "6"
PT>str2 = "HEPATITE CHOLESTATIQUE"
PT>str3 = "C5*"
PT>Call cnnPBD.Execute("SET QUOTED_IDENTIFIER OFF")
PT>InsSQL = "INSERT INTO Z_INTXT(TxtID, Abstract, Type) values(" & _
PT>            str1 & ",""" & str2 & """,""" & str3 & """)"
PT>Call cnnPBD.Execute(InsSQL)
PT>


PT>Ругаются —

PT>The name 'HEPATITE CHOLESTATIQUE' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
PT>Почему ?
Re[8]: SET QUOTED_IDENTIFIER OFF
От: SCS  
Дата: 22.01.03 12:38
Оценка:
Здравствуйте, _MarlboroMan_, Вы писали:

_MM_>SET QUOTED_IDENTIFIER is set at parse time. Setting at parse time means that if the SET statement is present in the batch or stored procedure, it takes effect, regardless of whether code execution actually reaches that point; and the SET statement takes effect before any statements are executed.


это теория (RTFM читать умеем ), а вот работающия программа
  cn.Open "Provider=SQLOLEDB.1;Data Source=SRV7-32\VSdotNet;Initial Catalog=Test;", "sa", "xxxxxxx"
  cn.Execute "SET QUOTED_IDENTIFIER OFF"
  cn.Execute "INSERT INTO T2 (f1, f2, f3) VALUES(""aa"", ""bb"", ""cc"")"

SCS
Re[9]: SET QUOTED_IDENTIFIER OFF
От: _MarlboroMan_ Россия  
Дата: 22.01.03 12:40
Оценка:
Здравствуйте, SCS, Вы писали:

SCS>это теория (RTFM читать умеем ), а вот работающия программа


это — шаманство.

а правильно работающая программа выполнит SET в одном батче с нужным кодом.
... << RSDN@Home 1.0 beta 5... наслаждаюсь тишиной >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[9]: SET QUOTED_IDENTIFIER OFF
От: _MarlboroMan_ Россия  
Дата: 22.01.03 12:47
Оценка:
Здравствуйте, SCS, Вы писали:

SCS>это теория (RTFM читать умеем ), а вот работающия программа

SCS>
SCS>  cn.Open "Provider=SQLOLEDB.1;Data Source=SRV7-32\VSdotNet;Initial Catalog=Test;", "sa", "xxxxxxx"
SCS>  cn.Execute "SET QUOTED_IDENTIFIER OFF"
SCS>  cn.Execute "INSERT INTO T2 (f1, f2, f3) VALUES(""aa"", ""bb"", ""cc"")"
SCS>


дело в том, что твоя прога отработает корректно только в случае когда у SET QUOTED_IDENTIFIER [OFF] — дефолтное значение.
вопрос у человека был конкретный "почему?", а не "как?"
... << RSDN@Home 1.0 beta 5... наслаждаюсь тишиной >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[10]: SET QUOTED_IDENTIFIER OFF
От: SCS  
Дата: 22.01.03 12:53
Оценка:
Здравствуйте, _MarlboroMan_, Вы писали:
_MM_>это — шаманство.

шаманством здесь и не пахнет — SET QUOTED_IDENTIFIER выставляется для connection и остается в действии до след. SET (можешь проверить в QA)

_MM_>а правильно работающая программа выполнит SET в одном батче с нужным кодом.


правильно написанная — да, а у PavelT100 обычная ошибка:
Column names are not permitted
т.е. слово HEPATITE CHOLESTATIQUE вообще без каких либо кавычек
SCS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.