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

Вниз

Запись и чтение   Найти похожие ветки 

 
fd979 ©   (2007-06-14 09:23) [0]

Товарищи..

Проблема заключается в следующем:

Строка преобразуется с помощью некой функции в набор всяких непонятных символов и записывается в базу. Потом считывая с этого поля преобразую обратно. Странно, что когда записываю в базу преобразованную строку сам, то есть обыкновенным копи-пейстом, при считывании обратно  преобразуется правильно, а вот когда записываю с помощью запроса (не важно программно или из Куери Аналайзера), то при преобразовании обратно строка получается не правильной.

тип поля nvarchar.


 
Anatoly Podgoretsky ©   (2007-06-14 09:31) [1]

У тебя наверно ошибка в программе


 
StriderMan ©   (2007-06-14 09:35) [2]

типа шифрование?

покажи как пишешь


 
fd979 ©   (2007-06-14 09:43) [3]


> Anatoly Podgoretsky ©   (14.06.07 09:31) [1]
> У тебя наверно ошибка в программе


Я тоже так думал. Но проверено - если не записывать в базу работает нормально. я думаю может при преобразовании получаются какие-то юникод символы.


 
fd979 ©   (2007-06-14 09:44) [4]


> StriderMan ©   (14.06.07 09:35) [2]
> типа шифрование?
>
> покажи как пишешь


Ну в общем и целом с некоторыми изменениями базировано на стандартном алгоритме Борланда:

function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
 I : Integer;
begin                        
 Result := "";
 for I := 1 to Length(InString) do
 begin
   Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
 end;
end;

function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
 I : Integer;
begin
 Result := "";
 for I := 1 to Length(InString) do
 begin
   Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey;
 end;
end;


 
ЮЮ ©   (2007-06-14 10:11) [5]

> Ну в общем и целом с некоторыми изменениями базировано на
> стандартном алгоритме Борланда:


> когда записываю с помощью запроса (не важно программно или
> из Куери Аналайзера),

Ну и как этот код применяется при использовании Куери Аналайзера? :)


> покажи как пишешь
означает где и как ты эти функции используешь? Как понимаещь, Куери Аналайзеру пофиг на твои функции.


 
fd979 ©   (2007-06-14 10:51) [6]

Покажи как пишешь означает, по моему, покажи как преобразуешь строку, а не то как я записываю в базу. Обыкновенный инсерт. А аналайзер я упомянул, только из-за того, что попробовал вставить данные не только с помощью программы.

Insert INTO USR (UserName, PWD, LinkedUser, R1, R2, R3, SITES, email, mobile, phone) VALUES(
"хххххх",
"F3h2%6oOUU??",
"000008",
"F3u2b6i;#ЏЈH",
"F3u2b6i;#ЏЈH",
"F3u2b6i;#ЏЈH",

"SED;ERT;FFFG;TGHR",
Null,
Null,
Null)


 
fd979 ©   (2007-06-14 10:52) [7]

проблема в выделенном тексте...


 
Плохиш ©   (2007-06-14 10:57) [8]


> fd979 ©   (14.06.07 10:51) [6]

Используй параметры.


 
Desdechado ©   (2007-06-14 11:07) [9]

> я думаю может при преобразовании получаются какие-то юникод символы
Как вариант - неверный чарсет у поля, куда азписываешь.

Но параметры использовать - без вариантов.


 
ЮЮ ©   (2007-06-14 11:10) [10]

> когда записываю в базу преобразованную строку сам, то есть
> обыкновенным копи-пейстом
,

ты сервер, что ли? сам - это как?


> а вот когда записываю с помощью запроса


Insert INTO USR (UserName, PWD, LinkedUser, R1, R2, R3, SITES, email, mobile, phone) VALUES(
"хххххх",
"F3h2%6oOUU??",
"000008",
Encrypt("строка, подлежащая кодированию"),


> или из Куери Аналайзера

Измени алгоритм, чтобы после кодирования получались "печатные" символы, или используй CHAR() +  CHAR() + ... для создания строк из непечатных символов, как если бы на делфи "ab"#10"cd"


 
ЮЮ ©   (2007-06-14 11:13) [11]

>
> Encrypt("строка, подлежащая кодированию"),

Перестарался. Естественно, параметр в самом запросе, а ему уже присваивать  Encrypt()


 
sniknik ©   (2007-06-14 11:16) [12]

> получаются какие-то юникод символы.
обязательно получаются... ты же используешь
> тип поля nvarchar.
что означает юникод строку, и неявно означает что оно может и преобразовать к нему, если вдруг строка не в нем.
а она у тебя явно не в нем
> function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;

> CHAR(Byte(InString[I]) xor (StartKey shr 8))
не боишься нулей, или др. управляющих НЕ символов? и что с ними думаешь будет при передаче в строку символов?

если уж делаешь так, что данные получаются не строковые, а бинарные  то и пиши их в масив байт (varbinary), или блоб (image).


 
fd979 ©   (2007-06-14 11:58) [13]

Спасибо всем!



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

Текущий архив: 2007.07.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
15-1181296248
Serg1968
2007-06-08 13:50
2007.07.08
Аудио


2-1180966360
AlexanderMS
2007-06-04 18:12
2007.07.08
Как поместить ProgressBar на определённую область StatusBar.


2-1181717913
Dr H
2007-06-13 10:58
2007.07.08
TValueListEditor


2-1181568479
Cardinalius
2007-06-11 17:27
2007.07.08
Проблема с ООП.


6-1165828880
Rentgen
2006-12-11 12:21
2007.07.08
IdHTTP и Content-Transfer