Database - Delphi
7 отговора
297 прегледа
Database - Delphi
Зравейте, имам затруднения с четенето на полета от тип Blob. Ето и питанките ми:
1. Как може да се види BlobField през TImage компонент?
2. Как може да се отвори BlobField (ако е програма)?
3. Може ли ако BlobField е музикален файл да се пусне през TMediaPlayer?
Благодаря ви предварително за мненията
1. Как може да се види BlobField през TImage компонент?
2. Как може да се отвори BlobField (ако е програма)?
3. Може ли ако BlobField е музикален файл да се пусне през TMediaPlayer?
Благодаря ви предварително за мненията
Re: Database - Delphi
Абе хора защо не четете ХЕЛПА?!?!? Трябва само да натиснете F1!!!
Използвайте Stream
По същия начин, може и с музикални и с всякакъв вид данни да боравите
procedure TBlobField.SaveToStream
Saves the contents of the BLOB field to a stream.
procedure SaveToStream(Stream: TStream);
Description
Use SaveToStream to copy the contents of a BLOB field to a stream. Specify the name of the stream to which the field’s value is saved as the value of the Stream parameter.
Note: The Stream parameter is typically not a BLOB stream. BLOB streams (returned by the dataset’s CreateBlobStream method) provide a completely separate mechanism for streaming data from a BLOB field.
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
SQLDataSet1Images.SaveToStream(MS);
Image1.Picture.Bitmap.LoadFromStream(MS);
finally
MS.Free;
end;
end;

Използвайте Stream
По същия начин, може и с музикални и с всякакъв вид данни да боравите
procedure TBlobField.SaveToStream
Saves the contents of the BLOB field to a stream.
procedure SaveToStream(Stream: TStream);
Description
Use SaveToStream to copy the contents of a BLOB field to a stream. Specify the name of the stream to which the field’s value is saved as the value of the Stream parameter.
Note: The Stream parameter is typically not a BLOB stream. BLOB streams (returned by the dataset’s CreateBlobStream method) provide a completely separate mechanism for streaming data from a BLOB field.
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
SQLDataSet1Images.SaveToStream(MS);
Image1.Picture.Bitmap.LoadFromStream(MS);
finally
MS.Free;
end;
end;
Re: Database - Delphi
Tова ми е ясно, мерси все пак.
Някой може ли да отговори на 2 и 3-ти въпрос.
Компонентата TMediaPlayer неможе директно да отвори stream. (пробвах първо да запазя файла някаде и после от там да го отворя обаче става много бавно)
Някой може ли да отговори на 2 и 3-ти въпрос.
Компонентата TMediaPlayer неможе директно да отвори stream. (пробвах първо да запазя файла някаде и после от там да го отворя обаче става много бавно)
Re: Database - Delphi
Не разбрах кое ти е ясно, и защо ако ти е ясно питаш...
НО НА МЕН НЕ МИ Е ЯСНО какво трябва да означава този въпрос:
2. Как може да се отвори BlobField (ако е програма)?
как да се отвори?!? какво означава "ако е програма" ?!?!?!?
3-тия въпрос също нищо не ми говори?!?
БЛОБ-а си е масив от байтове, така че няма музикален, картинков или какъвто и да е друг чешит БЛОБ
НО НА МЕН НЕ МИ Е ЯСНО какво трябва да означава този въпрос:
2. Как може да се отвори BlobField (ако е програма)?
как да се отвори?!? какво означава "ако е програма" ?!?!?!?
3-тия въпрос също нищо не ми говори?!?
БЛОБ-а си е масив от байтове, така че няма музикален, картинков или какъвто и да е друг чешит БЛОБ
Re: Database - Delphi
2. Ако в Blob-а има програма как мога да я отворя?
3. Ако в Blob-а има музикален файл как може да го зареди в TMediaPlayer?
3. Ако в Blob-а има музикален файл как може да го зареди в TMediaPlayer?
Re: Database - Delphi
Отговор на въпрос №2
В среда на Виндовс, НЕ Е възможно, с предоставените от Майкрософт системни функции да се изпълнява блок от памета. Единствената възможност е запазване чрез мемори стреам на физическо устройство и от там да се изпълни чрез ShellExecute например.
Отговор на въпрос №3
Най-лесния начин е да не се използва TMediaPlayer, а да системна функция
uses MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
M:TMemoryStream;
begin
M := TMemoryStream.Create;
M.LoadFromFile('C:\WINNT\Media\The Microsoft Sound.wav');
if not playsound(M.Memory, 0, SND_MEMORY or SND_ASYNC)
then ShowMessage('Can not play the sound');
end;
Ако музикален файл е някакъв друг формат, виж в MSDN за acmStreamOpen и mciSendCommand.
В среда на Виндовс, НЕ Е възможно, с предоставените от Майкрософт системни функции да се изпълнява блок от памета. Единствената възможност е запазване чрез мемори стреам на физическо устройство и от там да се изпълни чрез ShellExecute например.
Отговор на въпрос №3
Най-лесния начин е да не се използва TMediaPlayer, а да системна функция
uses MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
M:TMemoryStream;
begin
M := TMemoryStream.Create;
M.LoadFromFile('C:\WINNT\Media\The Microsoft Sound.wav');
if not playsound(M.Memory, 0, SND_MEMORY or SND_ASYNC)
then ShowMessage('Can not play the sound');
end;
Ако музикален файл е някакъв друг формат, виж в MSDN за acmStreamOpen и mciSendCommand.