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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.041 c
15-1181193494
oxffff
2007-06-07 09:18
2007.07.08
Помогите им освежить VCL


11-1164864154
Rocket
2006-11-30 08:22
2007.07.08
AnchorRight -Bottom не корректно работают при Parent - GroupBox


2-1180131936
Dmitry_177
2007-05-26 02:25
2007.07.08
FillChar для строки


1-1178636963
Oleg_teacher
2007-05-08 19:09
2007.07.08
Какое событие возникает при минимизации формы


2-1181935276
лЕвый поЗер
2007-06-15 23:21
2007.07.08
паскаль





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский