Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: .udl-Datei mit TQuery öffnen

  Alt 29. Dez 2004, 10:38
Hallo Klarabella,
man lernt nie aus. Wenn man sich eine UDL Datei mit dem Notepad ansieht, scheint
es sich um eine ganz normale Textdatei zu handeln. Ist es aber nicht. Ein Blick mit
einem Hex-Editor zeigt, dass die ersten beiden Bytes FF und FE sind. Dann ist jedes
2. Byte ein #0. Diese Zeichen müssen erst herausgefiltert werden, bevor man den
Inhalt der Datei in ein TStringList-Objekt schiebt
Delphi-Quellcode:
procedure TFormUDL.Button1Click(Sender: TObject);
{Hier wird mit UDLFileStream eine UDL Datei in einen Stream gelesen.
Da in einer UDL Datei ab dem 3. Byte jedes zweite Zeichen #0 ist,
wird der UDLFileStream byteweise in UDLMemStream kopiert. Dabei wird
das Zeichen #0 unterdrückt. Anschließend. kann TStringList.LoadFromStream
aufgerufen werden}

var
    Datei : string;
    list : TStringList;
    UDLFileStream : TFileStream;
    UDLMemStream : TMemoryStream;
    UDLByte : Byte;
    str: string;
begin
  Datei := ExtractFilePath(Application.Exename) + 'db1.udl';
  list := TStringList.Create;
  UDLMemStream:=TMemoryStream.Create;
  UDLFileStream:=TFileStream.Create(Datei,fmOpenRead);
  Try
    // Die ersten beiden Bytes in der UDL Datei sind FF und FE
    // Die können übersprungen werden.
    UDLFileStream.Seek(2,soFromBeginning);

    // Kopieren des Stream
    While UDLFileStream.Position<UDLFileStream.Size do
      begin
      UDLFileStream.Read(UDLByte,SizeOf(Byte));
      If UDLByte<>0 then // unterdrücken von #0
        UDLMemStream.Write(UDLByte,SizeOf(Byte));
      end;
    UDLMemStream.Seek(0,soFromBeginning);
    list.LoadFromStream(UDLMemStream);
    str := list.Strings[0]; // enthält jetzt [oledb]
  finally
   UDLFileStream.Free;
   UDLMemStream.Free;
   list.Free;
   end;
end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat