Форум: "Базы";
Текущий архив: 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