Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADOConnection Servernamen ermitteln... (https://www.delphipraxis.net/163416-adoconnection-servernamen-ermitteln.html)

Panschi 28. Sep 2011 08:59

Datenbank: MSQL • Version: 2005 • Zugriff über: ADO

ADOConnection Servernamen ermitteln...
 
Wie der Titel schon beschreibt baue ich eine Verbidung mit einem Server auf und wähle eine Datenbank aus, welche dann im späteren Verlauf des Programmes noch bearbeitet wird etc... Jedoch würde ich zur Übersicht gerne einen "Infokasten" einfügen in dem der Servername und die angewählte Datenbank stehen. Wie ich den Namen der Datenbank herausbekomme ist kein Problem,
(ADOConnection.DefaultDatabase), jedoch finde ich keine Möglichket den Server herauszusuchen.

FredlFesl 28. Sep 2011 09:03

AW: ADOConnection Servernamen ermitteln...
 
Hi, das steht im ConnectionString drin.

Panschi 28. Sep 2011 09:10

AW: ADOConnection Servernamen ermitteln...
 
stimmt... dann baue ich jetzt mal ne Funktion um nur den Servernamen rauszufiltern

Panschi 28. Sep 2011 09:59

AW: ADOConnection Servernamen ermitteln...
 
habe jetzt eine Prozedur geschrieben, welche den Data Source Teil, welcher sich im Connection string zwischen dem 4. und dem 5. ";" befindet, rauskopiert. Der resultierende String fängt an der richtigen Stelle an, endet aber zu weit hinten :?
Hier mein bisheriger quelltext:

Delphi-Quellcode:
procedure TFMain.ServerNamen(const Con: TADOConnection);
var Verbindung: string;
    i, u: Integer;
    Start, Ende: Integer;

begin
  ServerName := '';
  Verbindung := Con.ConnectionString;
  u := 0;

  for i := 0 to length(Verbindung)-1 do
  begin
    if Verbindung[i] = ';' then
    begin
      u := u + 1;

      if u = 4 then
      begin
        Start := i;
      end;

      if u = 5 then
      begin
        Ende := i-1;
      end;

    end;
  end;

  for i := Start to Ende do
  begin
    if Verbindung[i] = '=' then
    begin
      Start := i + 1;
      Break;
    end;
  end;

  ServerName := Copy(Verbindung, start, ende);
end;
Edit: Die Varialbe u zählt in der Prozedur die vorkommenden ";"

DeddyH 28. Sep 2011 10:32

AW: ADOConnection Servernamen ermitteln...
 
Wieso suchst Du nicht einfach nach "Remote Server=" und kopierst ab da bis zum nächsten Semikolon oder bis zum Stringende, falls kein Semikolon mehr kommt?

espen 28. Sep 2011 10:35

AW: ADOConnection Servernamen ermitteln...
 
Hallo,

Du benutzt ja MSSQL, erstelle ein TADOQuery mit folgendem SQL-Text:
Code:
select @@servername as SRVName
und in z.B. Fields[0].asstring hast Du dann den Servernamen.

Grüßle

Panschi 28. Sep 2011 11:51

AW: ADOConnection Servernamen ermitteln...
 
@DeddyH: das probiere ich ja in etwa. Ich weiß, dass im connectionstring der teil den ich haben will zwischen dem 4. und dem 5. Semikolon steht. Deswegen setze ich den "start" an die Position hinter dem 4. und das "ende" vor das 5.. Dann wird in diesem eingegrenzten Stück nach dem '=' gesucht, denn es steht ja immer Data Source=... und der Start-Wert wird hinter das '=' verschoben... also habe ich theoretisch den Bereich in dem sich meine Daten befinden gefunden und kann die Daten einfach rauskopieren...
Komisch ist nur, dass mir beim setzen eines Breakpoints für den startwert 111 und für den endwert 130 angegeben werden. Was auch logisch ist, denn die Zeichen des Servernamens sind wirklich 19! Jedoch gibt er mir bei der Ausgabe zuviel heraus :?

Panschi 28. Sep 2011 12:17

AW: ADOConnection Servernamen ermitteln...
 
Hab den Fehler gefunden :-D Das Problem war die Copy Funktion. Habe gedacht, dass man den string angibt den anfangspunkt und den endpunkt, aber man muss ja den string, den anfangspunkt und die Länge des stringteiles angeben :oops:
Hier mein verbesserter Code, falls jemand ähnliches irgenwann, irgendwie, irgendwo benötigt:

Delphi-Quellcode:
procedure TFMain.ServerNamen(const Con: TADOConnection);
var Verbindung: string;
    i, u: Integer;
    Start, Ende: Integer;

begin
  ServerName := '';
  Verbindung := Con.ConnectionString;
  u := 0;

  for i := 0 to length(Verbindung)-1 do
  begin
    if Verbindung[i] = ';' then
    begin
      u := u + 1;
      if u = 4 then
      begin
        Start := i;
      end;
      if u = 5 then
      begin
        Ende := i;
      end;
    end;
  end;

  for i := Start to Ende do
  begin
    if Verbindung[i] = '=' then
    begin
      Start := i + 1;
      Break;
    end;
  end;

  ServerName := Copy(Verbindung, start, Ende-start);
end;
Danke für eure Hilfe :thumb:

DeddyH 28. Sep 2011 12:19

AW: ADOConnection Servernamen ermitteln...
 
Ich bin nicht besonders fit in ADO, aber kann der Servername nicht auch z.B. zwischen dem 2. und 3. Semikolon stehen? Oder ist die Reihenfolge der Parameter nicht beliebig?

Panschi 28. Sep 2011 12:29

AW: ADOConnection Servernamen ermitteln...
 
wenn das so wäre, dann müsste ich tatsächlich nach "Data Source=...;" suchen. Ich greife auf einen Server zu, den ich auf dem gleichen Rechner starte. hmm...
Dann müsste ich ja theoretisch den Connectionsstring in ;...; bröckenchen in ein Array schreiben und dann die ersten 12 Buchstaben mit "Data Source=" vergleichen.
Ich gebe mich mal dran, dann ist man auf jedenfall auf der sicheren Seite


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 1 von 3  1 23      

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