Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi .udl-Datei mit TQuery öffnen (https://www.delphipraxis.net/36943-udl-datei-mit-tquery-oeffnen.html)

Klarabella 28. Dez 2004 14:27


.udl-Datei mit TQuery öffnen
 
mit ADO ist das Ganze ja gar kein Problem -->
TADOQuery.ConnectionString = 'FILE NAME=...';
aber hab ich auch irgendeine Möglichkeit, eine UDL-Datei in einzulesen... Also halt so, dass ich dann die Connection weiß.

Mir würde schon weiterhelfen, zu wissen, wie ich es schaffen kann, die UDL-Datei so zu splitten, um an den "DatabaseName" zu kommen!

Gruß, Klarabella

Jens Schumann 28. Dez 2004 15:21

Re: .udl-Datei mit TQuery öffnen
 
Hallo Klarabella,
Du kannst eine udl Datei wie eine ASCII Datei behandeln.
D.h. lade die Datei in ein TString´List Objekt und zerlege den
Text/String mit den üblichen Mitteln.

Klarabella 29. Dez 2004 09:09

Re: .udl-Datei mit TQuery öffnen
 
soweit so gut... Aber wirklich funktionieren tut das nicht, oder???

Delphi-Quellcode:
var Datei: string;
    list: TStringList;
    str: string;
begin
  list := TStringList.Create;
  Datei := ExtractFilePath('Garantie_Abfrage.exe') + 'Datenbank-Connection.udl';
  if (FileExists(Datei)) then
  begin
    try
      list.LoadFromFile(Datei);
      str := list.Strings[0];
    finally
      list.Free;
    end;
  end;
wenn ich das so mache, also über loadfromFile ist die Variable "list" angeblich leer, str zeigt mir folgendes an: 'ÿþ['
Obwohl doch eigentlich im string 0 [oledb] stehen sollte, oder???
Wenn ich mir die udl-datei im editor anzeigen lasse, steht das dort als erstes/ in der ersten Zeile.

Also, was mache ich falsch????

StefanDP 29. Dez 2004 09:17

Re: .udl-Datei mit TQuery öffnen
 
Der Code ist soweit richtig, habs getestet.
Es könnte an der Zeile
Delphi-Quellcode:
  Datei := ExtractFilePath('Garantie_Abfrage.exe') + 'Datenbank-Connection.udl';
liegen.

Und ist das try ... finally eigentl. an der richtigen Stelle? Die Stringlist wird nämlcih nur freigegeben wenn es die Datei gibt :gruebel:

Klarabella 29. Dez 2004 09:20

Re: .udl-Datei mit TQuery öffnen
 
@StefanDP: hast du das auch mit einer udl-Datei oder nur mit ner Text-Datei getestet?
Das ExtractToFilePath etc. ist korrekt... Ohne funktionierts genausowenig...
Bin ein wenig ratlos :gruebel: :wall:

//edit: achso mit dem try-finally hast du natürlich völlig recht... Hatte vorher was anderes ausprobiert, deswegen stand es da noch so :oops:

Jens Schumann 29. Dez 2004 09:38

Re: .udl-Datei mit TQuery öffnen
 
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;

Klarabella 29. Dez 2004 09:53

Re: .udl-Datei mit TQuery öffnen
 
Oh Super!!!!

Bin ja schon fast dran verzweifelt :wall: :zwinker:

DANKE! Das klappt prima!

und gleich wieder was neues gelernt... :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz