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 مشکلی وجود ندارد.
آیا دلیل خاصی برای این امر وجود دارد؟
من با استفاده از 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 مشکلی وجود ندارد.
آیا دلیل خاصی برای این امر وجود دارد؟