AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism ADOConnection und GetProviderNames
Thema durchsuchen
Ansicht
Themen-Optionen

ADOConnection und GetProviderNames

Ein Thema von caustic · begonnen am 9. Dez 2005 · letzter Beitrag vom 12. Jan 2006
Antwort Antwort
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#1

ADOConnection und GetProviderNames

  Alt 9. Dez 2005, 10:24
Datenbank: Oracle • Zugriff über: ADO
Folgendes Problem, in den Delphi VCL Komponenten, kann man die für den Connectionstring notwendigen Provider über den Befehl GetProviderNames abrufen und bekommt sie als Stringliste zurück. Jetzt versuche ich gerade etwas ähnliches für eine WinForm Anwendung zu finden.

Bei der Komponente OleDBConnection kann ich ja für den Connectionstring, die Datenverknüpfungseigenschaften im Objektinstpektor aufrufen und dort unter den installierten Treibern wählen, aber wo oder wie bekomme ich diese Liste her.

Ich habe, um mein Datenbanktool, für verschiedene Datenbanken zurüsten, bisher immer die Auswahl des möglichen Providers in einer Combobox anzeigen lassen.
So einfach sah die Funktion früher mal aus:
Delphi-Quellcode:
function TDataMlogin.StrgLstCreate;
 var Provider : TStrings;
      Index : Integer;
begin
    Provider := TStringList.Create;
    GetProviderNames(Provider);
    for Index := 0 to Provider.Count - 1 do
      begin
        Provider[Index] := Provider[Index] + '.1'
      end;
    result := Provider;
end;
Die alte Funktion kam aus der alten ADODB oder DB Unit und hat dann wie jetzt halt mit den Datenverknüpungseigenschften für den Connectionstring so was produziert
" OraOLEDB.Oracle.1 "

Wie bekomme ich das jetzt ohne VCL hin?

Vielen Dank!
Gruß
caustic
  Mit Zitat antworten Zitat
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#2

Re: ADOConnection und GetProviderNames

  Alt 18. Dez 2005, 00:05
Das Problem, besteht weiterhin und ist anscheinend nicht so einfach zu lösen, naja...
Trotzdem hole ich das hier nochmal hoch in der Hoffnung jemand weiß ne einfache Lösung, hier z.B. mal eine Sache aus Delphi .Net bei einer Winforms Anwendung.
Ab und zu muss man ja bei einem Programm überprüfen, ob die Anwendung mit Administratorrechten läuft also auch schreibenden Zugriff auf die Registry und den HKLM hat. So sah das mit Delphi Win32 aus:
Delphi-Quellcode:
function IsAdmin: Boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
  (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;

var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  x: Integer;
  bSuccess: BOOL;
begin
  Result := False;
  bSuccess:=False;
  ptgGroups:=nil;
  psidAdministrators:=nil;
  try
    bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
      hAccessToken);
    if not bSuccess then
    begin
      if GetLastError = ERROR_NO_TOKEN then
      bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
        hAccessToken);
    end;
    if bSuccess then
    begin
      GetMem(ptgGroups, 1024);
      bSuccess := GetTokenInformation(hAccessToken, TokenGroups,
        ptgGroups, 1024, dwInfoBufferSize);
      if bSuccess then
      begin
        AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
          SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
          0, 0, 0, 0, 0, 0, psidAdministrators);
        {$R-}
        for x := 0 to ptgGroups.GroupCount - 1 do
          if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
          begin
            Result := True;
            Break;
          end;
        {$R+}
      end;
    end;
  finally
    if bSuccess then
      CloseHandle(hAccessToken);
    if Assigned(ptgGroups) then
      FreeMem(ptgGroups);
    if Assigned(psidAdministrators) then
      FreeSid(psidAdministrators);
  end;
end;
Der Code ist aus der JCL wenn mich nicht alles täuscht und so sieht das unter .NET aus

in die USES muss folgendes Aufgenommen werden:
System.Security.Principal;

und die Funktion schrumpft auf:
Delphi-Quellcode:
function IsAdmin : boolean;
begin
Result := WindowsPrincipal.Create(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator);
end;
So eine Lösung suche ich halt für die Storie mit der OleDB Provider Liste.

Gruß
caustic
  Mit Zitat antworten Zitat
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#3

Re: ADOConnection und GetProviderNames

  Alt 9. Jan 2006, 08:02
Das Problemchen ist gelöst, es lässt sich aber nicht so trivial wie die Geschichte mit dem ISAdmin lösen...
Es gibt unter .NET keinen Befehl oder keine Befehlskette, die die OleDBProvider Listet.
MfG
caustic
  Mit Zitat antworten Zitat
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#4

Re: ADOConnection und GetProviderNames

  Alt 12. Jan 2006, 12:50
http://www.pat-software.de/images/OleDBDemo.gif

So sollte es aussehen...

Wenn jemand daran interesse hat, no problem, einfach Anfragen.

Gruß
caustic
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: ADOConnection und GetProviderNames

  Alt 12. Jan 2006, 16:25
Lass mich raten... Du nimmst das hier?

Verbeiß dich nicht zu fest auf den OleDb Provider, er könnte sehr bald aus der FCL fliegen...
(Ist schon jetzt eher stiefmütterlich implementiert worden)
Robert Giesecke
  Mit Zitat antworten Zitat
caustic

Registriert seit: 17. Mai 2004
Ort: Villingen-Schwenningen
20 Beiträge
 
Delphi XE2 Architect
 
#6

Re: ADOConnection und GetProviderNames

  Alt 12. Jan 2006, 17:29
Nein, denn ich frage ab, welche Treiber überhaupt auf dem Rechner sind.
Dafür gibt es in deutschen Foren im Moment überhaupt keine Hinweise wie es denn tatsächlich geht.
In einem Englischsprachigem habe ich zumindest einen Hinweis bekommen.
Wobei so wild ist es nicht, aber es ist Arbeit.

Welche Schnittstelle zu Datenbanken würdest Du denn vorziehen.

Mich hat dieser Artikel dazu bewogen die Methode über die OleDBProvider zu gehen:

Auswirkung des Providers auf die Datenbank Performance

Gruß
caustic
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
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