ورود

View Full Version : سوال: آیا تفاوتی بین متد CreteBlobStream اشیا Tquery,AdoQuery وجود دارد؟



mike
دوشنبه 31 فروردین 1388, 02:08 صبح
با سلام
من با استفاده از Stream ها تعدادی عکس را در بانک SQl Server 2000 قرار دادم.اینکار بدون هیچ مشکلی انجام شد ولی در هنگام بازیابی تصاویر از DB وذخیره عکس ها روی هارد که با استفاده از Stream انجام می شود اگر از TADO QUERY استفاده کنم اینکار بدون هیچ مشکلی انجام می شود ولی اگر از Tquery و BDE استفاده کنم تنها 32769 بایت اول از DBخوانده می شود .من این کار را برای فایلهای موزیک و فلاش هم امتحان کردم وتفاوتی نکرد.

کد مربوط به ADOQUERY


while not ADOQuery1.Eof do
begin
st:=ADOQuery1.CreateBlobStream(ADOQuery1.FieldByNa me('img'),bmRead);


st2:=TMemoryStream.Create();
if st.Size <> 0 then
begin
st2.CopyFrom(st,st.Size);
ShowMessage('st2 size is : '+inttostr(st2.size));
st2.SaveToFile('M:\Delphi projects\streamsql\pics\'+ADOQuery1.FieldByName('n ame').AsString);

end
else
ShowMessage('.....');
ADOQuery1.Next();
st.Free();
st2.Free();
end;
ADOQuery1.Close();end;


کد مربوط به Tquery


while not Query1.Eof do
begin
st:=Query1.CreateBlobStream(Query1.FieldByName('im g'),bmRead);


st2:=TMemoryStream.Create();
if st.Size <> 0 then
begin
st2.CopyFrom(st,st.Size);

st2.SaveToFile('M:\Delphi projects\streamsql\pics\'+Query1.FieldByName('name ').AsString);

end
else
ShowMessage('.....');
Query1.Next();
st.Free();
st2.Free();
end;
Query1.Close();

end;


من تمامی تاپیک های موجود را مطالعه کردم. ولی علت را متوجه نشدم.مشکل در همان ابتدا رخ می دهد یعنی در هنگام ایجاد st ، اگر از query1.CreateBlobStream استفاده کنم تنها 32769 بایت اول هر شی از دیتابیس خوانده میشود. ولی در هنگام استفاده از ADOQUERY مشکلی وجود ندارد.
آیا دلیل خاصی برای این امر وجود دارد؟

vcldeveloper
سه شنبه 01 اردیبهشت 1388, 23:30 عصر
بله، پیاده سازی این دو با هم فرق میکنه. کامپوننت های BDE برای این کار از کلاس TBlobStream در یونیت DBTables استفاده می کنند. کامپوننت های ADO از TAdoBlobStream در یونیت ADODB استفاده می کنند.