Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.10;
Скачать: CL | DM;

Вниз

Проблема с соханением сторки в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
14-30570
Гость
2003-03-25 00:39
2003.04.10
Свой плагин для Internet Explorer


1-30441
MachmuD
2003-03-31 10:00
2003.04.10
Нужна справка...Как пользоваться функцией Polylineto


3-30297
vcpp
2003-03-21 14:44
2003.04.10
Проблемма с IBXUpdateBD45


1-30322
pavel_k
2003-03-28 19:16
2003.04.10
Вызов процедуры из самой себя


14-30560
Tihas
2003-03-24 16:17
2003.04.10
Интересная штука...