Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Вниз

Проблема с соханением сторки в MS SQL   Найти похожие ветки 

 
ДмирийК   (2003-03-21 14:41) [0]

Добрый день!
Я заполняю в Memo строку для сохранения в поле типа varchar, все работает нормально пока я не ставлю в конце какой-нибуд строки символ "\". В этом случае он при сохранении исчезает вместе с символами перевода строки. Например, если попытаться сохранить строку "111\"#$D#$A"222\" , то сохраниться "111222\".
Как это побороть?


 
ДмирийК   (2003-03-24 08:41) [1]

Народ, помогите. Очень надо сохранить слэш перед переводом строки.


 
Димон1   (2003-03-24 09:09) [2]

у меня тоже база MSSQL2000 с мемо полями, такой проблемы нет


 
ДмирийК   (2003-03-24 09:28) [3]

У меня тоже база MSSQL2000, но я имею ввиду обычный memo (не dbmemo). Я в общем то согласен вручную обработать строку перед сохранением, скажите только как.


 
Димон1   (2003-03-24 09:34) [4]

у меня тоже простой мемо (не дбмемо). Сохнаняю так:



with dm.ADOQuery1 do
begin
Close;
SQL.Text := "UPDATE PROJECTS SET "+
"Nazvanie=:p01 " +
"WHERE OBJ_ID=:p99 ";
with Parameters do
begin
ParamByName("p01").Value := Nazvanie ;
ParamByName("p99").Value := Obj_ID ;
end;
if ExecSQL<>1 then raise Exception.Create(
"Ошибка в TProjPassport.Save RowsAffected<>1");
Close;
end;


описанной тобой проблемы нет


 
ДмирийК   (2003-03-24 10:25) [5]

У меня есть процедура

procedure ExecSQL(text: string);
var
Command: TADOCommand;
begin
Command := TADOCommand.Create(nil);
Command.Connection := SQL.Connection;
Command.CommandTimeout := 30;
Command.CommandText := text;
Command.Execute;
Command.Free;
end;


При выполнении следующего кода проявляется моя проблема.

Value := mValue.Lines[0];
for i:=1 to mValue.Lines.Count-1 do
Value := Value + #13#10 + mValue.Lines[i];
ExecSQL("UPDATE Configuration SET Name="""+edName.Text+""", Val="""+Value+""" WHERE Code="+IntToStr(Code));

Если вместо Value использовать mValue.Lines.Text, то тоже самое.

В мой пример отличается от вашего?


 
ДмирийК   (2003-03-24 10:37) [6]

А у вас сервиспаки для SQL какие-нибудь стоят?


 
Romkin   (2003-03-24 11:03) [7]

попробуй удвояивать "\" Хотя и странно


 
Димон1   (2003-03-24 11:19) [8]

Отличается.
Попробуй с параметрами, как у меня. Должно получиться!!!


мой MS SQL Product Version: 8.00.534 (SP2)


 
Димон1   (2003-03-24 11:27) [9]

я попробовал в Enterprize Manager"e выполнил такой запрос:
UPDATE Projects
SET Nazvanie = "проверка
такой
формы\
выполнения запроса"
WHERE (Obj_id = 310)


слеш потерялся!



 
Димон1   (2003-03-24 11:31) [10]

Получилось так:

Проверка
такой
формывыполнения запроса


 
ДмирийК   (2003-03-24 11:41) [11]

Удваивание слэша не помогает, так как второй слэш убирается вместе с переводом строки.


 
ДмирийК   (2003-03-24 12:41) [12]

Люди, мне параметры не с руки использовать, кто-нибудь знает в чем дело и как это побороть в корне?


 
Fiend   (2003-03-24 12:51) [13]

а может где триггерок стоит?


 
ДмирийК   (2003-03-24 12:57) [14]

Какой тригерок? У меня в базе одна таблица и все, может сам MS SQL где подстроить надо?


 
Fiend   (2003-03-24 13:12) [15]

Шо тут сказать, проблема не типичная, т.е. я такого никогда не втречал, да и большинство ответивших я смотрю просто недоумевают в чем дело.

Крутить в сервере ничё не надо. подобных настроек у него нету.
Правда наводит на мысль что может вы при установке выбрали какой то нехороший Collate?
Посмотрите шо у вас дефолтом стоит для базы и сервера


 
ДмирийК   (2003-03-24 13:21) [16]

Ответивших кроме вас было всего двое, и у проверившего (Димон1) проблема на стороне SQL сервера есть.


 
Димон1   (2003-03-24 13:33) [17]

Уважаемый ДмирийК!

Я не считаю описываемое Вами явление проблемой!
Просто интерпритатор SQL запроса так понимает, то что вы ему говорите. А говорите Вы ему примерно следующее:
UPDATE Projects
SET Nazvanie = "проверка
такой
формы\
выполнения запроса"
WHERE (Obj_id = 310)

Был бы Я на месте вашего sql сервера, я бы вообще не принял такую форму записи запроса.

Предлагаю 2 варианта решения проблемы:
1. (Наиболее простой и естественный) Пользоваться параметрами! (см.выше)
2. Писать всякие управлющие символы, в том числе и CR LF, так как этого требут MSSQL, то есть:
SET Field1="First line." + CHAR(13) + CHAR(10) + "Second line."





см.: mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\acdata.chm::/ac_8_con_03_7mch.htm

The CHAR function can be used to convert an integer code to an ASCII character. This is useful when trying to specify control characters, such as a carriage return or line feed. Use CHAR(13) and CHAR(10) to put a carriage return and new line in a character string:
PRINT "First line." + CHAR(13) + CHAR(10) + "Second line."



 
ДмирийК   (2003-03-24 13:50) [18]

Спасибо!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-30354
Psi-factor
2003-03-31 18:42
2003.04.10
Скроллинг в MEMO и RichEdit


1-30384
multik
2003-03-29 21:52
2003.04.10
Привет всем!!! Из bmp сделать ico


1-30371
Intell
2003-03-28 22:02
2003.04.10
Условие с ShellApi


4-30660
KDenis
2003-02-10 23:07
2003.04.10
Как убить процесс, зная его Handle?


14-30515
Supreme 2
2003-03-23 19:11
2003.04.10
Активность форума





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский