Announcement

Collapse
No announcement yet.

Binär Daten lesen und auf Datenträger speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binär Daten lesen und auf Datenträger speichern

    Hallo Zusammen...<br>
    meine Frage ist wohl recht einfach, aber irgendwie stehe ich auf dem Schlauch.<br>
    Ich will eine EXE Datei auf einen SQL - Server ablegen und säter von dort wieder auf die Festplatte eines Clients kopieren. <br>
    Mein Problem ist wie bekomme ich das BLob-Feld wieder geschrieben?<br>
    Hier mein Proigrammansatz:<br>
    <br>
    procedure TForm1.btnInDatenbankSchreibenClick(Sender: TObject); <br>
    begin<br>
    ADOCommand1.CommandText := 'insert into tblTest (Feld) values ( :Feld )';<br>
    ADOCommand1.Parameters.ParamByName('feld').LoadFro mFile('C:\temp\Test.exe',ftBlob );<br>
    ADOCommand1.Execute;<br>
    end;<br>
    <br>
    procedure TForm1.btnAusDatenbankLesenClick(Sender: TObject);<br>
    begin<br>
    ADOQuery1.Close;<br>
    ADOQuery1.SQL.Clear;<br>
    ADOQuery1.SQL.Add('select feld from tbltest where lngID = 1'); // lngID = 1 ist der erste Datensatz --- der ist da !!!<br>
    ADOQuery1.open;<br>
    <br>
    // so und hier soll das ganze wieder auf die Festplatte zurück .....<br>
    <br>
    end;<br>

    Danke schon mal.<br>
    Wolfgang

  • #2
    Hallo,

    je nachdem, welche MDAC-Version genutzt wird, stehen verschiedene Alternativen zur Verfügung. Wenn MDAC 2.5 (oder höher) genutzt wird, kann das neue <b>Stream</b>-Objekt perfekt mit dieser Aufgabe umgehen. Mit jeder MDAC-Version ab 2.1 sollte jedoch auch der Zugriff über <b>TADOBlobStream</b> erfolgreich sein. Das folgende Beispiel demonstriert, wie man eine Datei in einer SQL Server-Datenbank ablegen und wieder auslesen bzw. als Datei abspeichern kann:
    <pre>
    procedure TForm1.ToolButtonBLOBClick(Sender: TObject);
    var
    aBS : TADOBlobStream;
    iID : Integer;
    begin
    iID := StrToInt(EditID.Text);
    // Step 1: TADODataSet öffnen
    ADODataSet1.Active := True;
    // Step 2: Neuen Datensatzpuffer anfordern
    ADODataSet1.Insert;
    // Step 3: Werte zuweisen, BLOb aus Stream-Objekt zuordnen
    ADODataSet1ID.Value := iID;
    aBS := TADOBlobStream.Create(ADODataSet1FileContents, bmWrite);
    try
    aBS.LoadFromFile(FFileName);
    MemoLog.Lines.Add('....BLOb zugeordnet.');
    finally
    aBS.Free;
    end;
    // Step 4: Datensatz speichern
    ADODataSet1.Post;
    ADODataSet1.Active := False;
    MemoLog.Lines.Add('...Datensatz gespeichert.');
    // Step 5: Datensatz zur Kontrolle neu einlesen
    ADODataSet1.Parameters[0].Value := iID;
    ADODataSet1.Active := True;
    MemoLog.Lines.Add('...Datensatz zur Kontrolle neu eingelesen.');
    // BLOb-Inhalt über Stream-Objekt auslesen und als Datei speichern
    aBS := TADOBlobStream.Create(ADODataSet1FileContents, bmRead);
    try
    aBS.SaveToFile(FSaveFileName);
    MemoLog.Lines.Add(FSaveFileName + ' gespeichert');
    finally
    aBS.Free;
    end;
    Inc(iID);
    EditID.Text := IntToStr(iID);
    end;
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,<br>
      so geht es. Danke. <br>
      <br>
      Noch eine Frage gibt es eine Möglichkeit festzustellen ob und welche MDAC Version installiert ist. <br>
      <br>
      Wolfgan

      Comment


      • #4
        Hallo,

        ja - indem ADO einfach gefragt wird:
        <pre>
        procedure TForm1.Button1Click(Sender: TObject);
        begin
        ShowMessage(ADOConnection1.Version);
        end;
        </pre&gt

        Comment

        Working...
        X