![]() |
.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 |
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. |
Re: .udl-Datei mit TQuery öffnen
soweit so gut... Aber wirklich funktionieren tut das nicht, oder???
Delphi-Quellcode:
wenn ich das so mache, also über loadfromFile ist die Variable "list" angeblich leer, str zeigt mir folgendes an: 'ÿþ['
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; 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???? |
Re: .udl-Datei mit TQuery öffnen
Der Code ist soweit richtig, habs getestet.
Es könnte an der Zeile
Delphi-Quellcode:
liegen.
Datei := ExtractFilePath('Garantie_Abfrage.exe') + 'Datenbank-Connection.udl';
Und ist das try ... finally eigentl. an der richtigen Stelle? Die Stringlist wird nämlcih nur freigegeben wenn es die Datei gibt :gruebel: |
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: |
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; |
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