Autor Beitrag
flaavia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105

WinXp Vista
D6 Ent, D2007 Ent
BeitragVerfasst: Mo 09.06.03 14:50 
Hallo

Bei meinen Versuchen eine sound-Datei als BlobStream aus einer Access-DB auszulesen habe ich entsprechend eines Forumvorschlages den unten genannten Ansatz verfolgt (Verbindung zur Datenbank mit ADO). Ich bekomme aber die Fehlermeldung vom Debugger:

Undeclared identifier: 'TBlobStream'

wobei ich die Variable blob probehalber auch unter public aufgeführt habe:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
public
var
blob: TBlobStream

kann es sein, dass dieser Identifier (TBlobStream) unter ADO nicht definiert ist (in der Online-Hilfe wird TBlobStream nur für BDE genannt; nach dem Autor des Forumbeitrag '...eine Datei in einen TBlobStream speicher, daraus lesen'  (http://www.swissdelphicenter.ch/de/showcode.php?id=1271)
soll der Vorschlag u. a. auch für ADO geeignet sein).

procedure TfoMain.btGetBlobStreamClick(Sender: TObject);
var
  blob : TBlobStream;
begin
    s:='select X from Y where id=1';

  ADOQuery1.Active := False;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Append(s);
  ADOQuery1.Active := True;

     begin
      blob := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('X'), bmRead);
       try
         blob.seek(0, soFromBeginning);

         with TFileStream.Create(savedBlobOrt, fmCreate) do
           try
             CopyFrom(blob, blob.size)
           finally
             Free
           end;
       finally
         blob.Free
     end;
end;


Ich raufe mir die Haare bei all meinen Wissenslücken über Delphi und würde mich über jeden Tip sehr freuen. :D

Im vorraus vielen Dank

Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 09.06.03 20:53 
Jaja, das kenn ich, hab den Code von Swiss auch verwendet und bin auf einige Ungereimtheiten gestoßen.

Deswegen habe ich daraus auch einen FAQ-Beitrag erstellt. Die Lösung ist ganz einfach. Deklarier blob als TStream, nicht als BlobStream und weise ihm dann das Create von TBlobStream zu. Dann funktionierts... :wink:
flaavia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105

WinXp Vista
D6 Ent, D2007 Ent
BeitragVerfasst: Mo 09.06.03 23:02 
Herzlichen Dank für den Profitip

Super, es funktioniert (z.T.)

Auf jedenfall wird jetzt eine Datei geschrieben, das Problem ist nur, dass hinten und vorne noch einige Byte drangehängt werden (mit Info zum File).
So wird der Anhang z.B. mit ...........METAFILEPICT eingleitet und dann kommen noch an die 300 Byte, vorne weg sind es weniger, ca 20 - 30 Byte. Der eigentliche soundfile fängt dann mit RIFF~ÚWAVEfmt an, so dass man theoretisch den Anfang und dass Ende wohl abschneiden könnte

wie macht man das am einfachsten??

oder gibt es noch eine Anweisung, dass die Daten ohne Zusätze übergeben werden??
So wie hier scheint es ja ein spezielles Datenformat für Metafile Picture zu sein, gibt es das auch für wavesound ??

falls ich die störenden Daten entferne, dauert dies möglicherweise zu lange, um sofort in der nächsten im Quelltext folgenden Prozedur (nach Übernahme aus der DB und Abspeichern (+ Zurechtschneiden)) den Datensatz dem Mediaplayer zum einlesen (mit MediaPlayer.FileName) zu übergeben ??

Fragen über Fragen, zum Glück gibt es ja viele Profis im Forum :D , vielen Dank im vorraus für die Tips !! :!:
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 09.06.03 23:42 
Naja, ich kann Dir das net genau sagen, da ich mich mit Access net so gut auskenne. Außerdem ist meine Sache mit dem Speichern von Dateien noch net ganz fertig.

Aber Du liest das Ganze ja mit nem Stream aus, da kannste ja dann mit Position "vorspulen" und das in einen anderen Stream kopieren oder das irgendwie dem MediaPlayer zukommen lassen. Vll. hat jmd ne genauere Idee....
flaavia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105

WinXp Vista
D6 Ent, D2007 Ent
BeitragVerfasst: Di 10.06.03 18:37 
Vielen Dank für die Tips

Im Moment habe ich ziemliche Probleme den gespeicherten file hinten und vorne zurechtzuschneiden, ich werde hierzu eine neue Frage posten, da es ja ein eigenständiges Thema ist.

Vielen Dank nochmal für die aufmunternden Tips :D