PDA

View Full Version : کار با فیلدهای باینری حاوی متن



jackalhe
سه شنبه 13 خرداد 1393, 10:46 صبح
برای ذخیره سازی پسورد در دیتابیس از فیلد varbinary استفاده شده است، در دلفی چطور میتونم مقدار استرینگ اون فیلد باینری رو بخونم؟
مثلا پسورد 1111 بصورت باینری 0x310000003100000031000000310000009510EF9884F8A796 A24AAC19A9354A804E5C025F5F5BF7BA78A1CC74E68EA6D322 339849CEE5DC3377FF9A9D7B5E1AECA523F062DB75F9826287 874863A77B3F00000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000

میشه.

یوسف زالی
سه شنبه 13 خرداد 1393, 11:46 صبح
ربطی به دلفی نداره. در خود دیتابیس باید Cast(F as varchar(max)) -- or other types کنید.

jackalhe
سه شنبه 13 خرداد 1393, 11:49 صبح
cast فقط عبارت باینری رو بر میگردونه من مقدار string رو میخوام

یوسف زالی
سه شنبه 13 خرداد 1393, 11:55 صبح
Cast چیزی رو بر میگردونه که شما ازش می خوای. در اینجا VarChar
در بدترین حالت از Convert هم می شه استفاده کرد.

jackalhe
سه شنبه 13 خرداد 1393, 12:01 عصر
من برای login میخوام ازش استفاده کنم یعنی پسورد رو کاربر تو فرم وارد کنه بعد با اون مقدار باینری مقایسه کنم اگر درست بود اجازه ورود بده، مثلا مقدار ورودی string 1111 ولی مقداریکه میخواد باهاش مقایسه کنه باینری = 0x310000003100000031000000310000009510EF9884F8A796 A24AAC19A9354A804E5C025F5F5BF7BA78A1CC74E68EA6D322 339849CEE5DC3377FF9A9D7B5E1AECA523F062DB75F9826287 874863A77B3F00000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000

jackalhe
سه شنبه 13 خرداد 1393, 12:05 عصر
فکر کنم باید از BlobStream استفاده کنم، برای بازیابی عکس کار میکنه ولی برای string خطای invalid class type cast میده نمونه کد:

procedure TForm1.btn1Click(Sender: TObject);
var
st: TStream;
begin
st := TStream.Create;
try
st := Q1.CreateBlobStream(Q1.FieldByName('PasswordKey'), bmRead);
memo2.Lines.LoadFromStream(st);
//post, commit etc
finally
st.Free;
end;
end;

یوسف زالی
سه شنبه 13 خرداد 1393, 12:19 عصر
مقایسه رو با تایپ باینری انجام بدید.
یا این که تایپ فیلد رو varchar بگیرید، تبدیل شده باینری رو درش نگه دارید.