Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi BDE unter Win 7 64 bit (https://www.delphipraxis.net/177644-bde-unter-win-7-64-bit.html)

Furtbichler 18. Nov 2013 18:42

Datenbank: SQL-Server • Version: egal • Zugriff über: ODBC/BDE

BDE unter Win 7 64 bit
 
Hi,

Ich habe ein altes (ein wirklich altes) Projekt, das die BDE verwendet, um über ODBC auf einen SQL-Server zuzugreifen. Nun soll Win-XP durch Win 7(64 bit) ersetzt werden. Kein Problem eigentlich, denn es läuft ja alles super auf meinem Laptop.

Nur leider nicht beim Kunden, was irgendwie logisch ist (Murphy lässt grüßen).

Also: Der Kunde ist lokaler Admin, richtet eine System-DSN ein (getestet, funktioniert). Dann im BDE-Administrator den Alias einrichten, der verwendet den ODBC-DSN (getestet, funktioniert). Aber aus der Anwendung heraus kommt keine Verbindung zustande.

Folgendes ist auffällig:
1. ODBC-Konfiguration lässt sich vom BDE-Administrator (rechte Maustaste auf Aliasnamen) zwar starten, funktioniert aber nicht ('Konfigurationsbutton' bleibt ohne Wirkung).
2. Die Anwendung bricht mit dem Fehler 'Unbekannter User ""' ab (also kein Username). Der Username ist in der BDE hinterlegt. Offenbar kann die Anwendung diese Einstellungen nicht aus der BDE (dem Alias) abrufen.
3. Wenn ich den User direkt in der Anwendung angebe, kommt keine Verbindung zustande, weil der Server unbekannt ist. Auch hier vermute ich, das die Anwendung den ODBC-DSN nicht aus den BDE-Einstellungen ermitteln kann.

Es handelt sich also irgendwie um ein Windows-Benutzer/Rechteproblem. Aber da der Anwender angeblich lokaler Admin ist, verstehe ich das nicht so recht.

Kennt jemand das Problem? Was könnte noch geprüft werden?

grl 18. Nov 2013 18:44

AW: BDE unter Win 7 64 bit
 
Kann mich da dumpf dran erinnern, daß sich das abstellen ließ, indem man den Kompatibilitätsmodus der Applikation auf WinXP SP2 stellt.

Gruß
GRL

Furtbichler 18. Nov 2013 18:52

AW: BDE unter Win 7 64 bit
 
Ah, das probiere ich morgen mal aus. Lustigerweise funktioniert das auf meinem Laptop problemlos. Aber egal. Danke erstmal.

grl 18. Nov 2013 18:55

AW: BDE unter Win 7 64 bit
 
Wann welcher Kompatibilitätsmodus für welche Applikation unter welchen Umständen richig ist hab ich nicht durchblickt - aber meine Windows-Erfahrungen halten sich extrem in Grenzen...

GRL

wbibb 18. Nov 2013 19:08

AW: BDE unter Win 7 64 bit
 
....ist die ODBC Verbindung unter 32Bit erstellt worden?

Wir hatten ein ähnliches Problem und nach Einrichtung der ODBC Verbindung lief alles.

ODBC Einrichtung mit...
C:\Windows\SysWOW64\odbcad32.exe

hathor 18. Nov 2013 19:13

AW: BDE unter Win 7 64 bit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn man das Programm nicht mit Als Administrator ausführen startet, spielt der Status Admin keine Rolle.

Siehe Testprogramm:

Delphi-Quellcode:
program Test;

{$IFDEF FPC}
  {$mode objfpc}{$H+}
{$ELSE}
  {$APPTYPE CONSOLE}
{$ENDIF}

uses
  SysUtils,
  Windows,
  Classes;

Const
 SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
 SECURITY_BUILTIN_DOMAIN_RID = $00000020;
 DOMAIN_ALIAS_RID_ADMINS    = $00000220;
 DOMAIN_ALIAS_RID_USERS     = $00000221;
 DOMAIN_ALIAS_RID_GUESTS    = $00000222;
 DOMAIN_ALIAS_RID_POWER_USERS= $00000223;

 function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall; external advapi32;

 function UserInGroup(Group :DWORD) : Boolean;
 var
  pIdentifierAuthority :TSIDIdentifierAuthority;
  pSid : Windows.PSID;
  IsMember   : BOOL;
 begin
  pIdentifierAuthority := SECURITY_NT_AUTHORITY;
  Result := AllocateAndInitializeSid(pIdentifierAuthority,2, SECURITY_BUILTIN_DOMAIN_RID, Group, 0, 0, 0, 0, 0, 0, pSid);
  try
    if Result then
      if not CheckTokenMembership(0, pSid, IsMember) then //passing 0 means which the function will be use the token of the calling thread.
         Result:= False
      else
         Result:=IsMember;
  finally
     FreeSid(pSid);
  end;
 end;


begin
 Writeln(Format('Current user is Admin       %s',[BoolToStr(UserInGroup(DOMAIN_ALIAS_RID_ADMINS),True)]));
 Writeln(Format('Current user is Guest       %s',[BoolToStr(UserInGroup(DOMAIN_ALIAS_RID_GUESTS),True)]));
 Writeln(Format('Current user is Power User  %s',[BoolToStr(UserInGroup(DOMAIN_ALIAS_RID_POWER_USERS),True)]));
 readln;
end.
Im Anhang: Source und EXE

jaenicke 18. Nov 2013 19:21

AW: BDE unter Win 7 64 bit
 
Zitat:

Zitat von wbibb (Beitrag 1236462)
....ist die ODBC Verbindung unter 32Bit erstellt worden?

Ja, ein beliebter Fehler, ODBC-Datenquellen einrichten heißt der Eintrag in der Verwaltung, aber dahinter muss man dann aufpassen, dass man 32-Bit oder 64-Bit, je nach Programm nimmt.

Ich hatte das allerdings auch als jemand die UAC deaktiviert hatte. Danach ging mit den ODBC Verbindungen nicht mehr viel. Auch die Reaktivierung hat nichts gebracht. Am Ende wurde das letzte Image zurückgespielt, die UAC blieb ganz normal an und alles lief.

Zitat:

Zitat von grl (Beitrag 1236461)
Wann welcher Kompatibilitätsmodus für welche Applikation unter welchen Umständen richig ist hab ich nicht durchblickt

Es sollte die höchste Windowsversion als Kompatibilitätsmodus eingestellt werden, bei der die Funktion, die nun nicht mehr funktioniert, noch drin war. Im Zweifelsfall eine, bei der man weiß, dass es lief. Zudem gibt es dafür auch eine entsprechende Doku.

Furtbichler 18. Nov 2013 21:21

AW: BDE unter Win 7 64 bit
 
Super, sind das hier gute Denkanstöße.

Die Details kenne ich nicht, der Kunde sitzt in der Ukraine und morgen gehe ich per VNC rauf.

Ich denke, da ist eine Konfusion zwischen 32 und 64 bit.

Danke, ich melde mich, wenn es Fortschritte gibt.

stahli 18. Nov 2013 23:29

AW: BDE unter Win 7 64 bit
 
Es ist mir jetzt schon peinlich, aber die "offizielle" BDE 64bit ... http://cc.embarcadero.com/item/27573
(:oops::oops::oops:)

jaenicke 19. Nov 2013 05:27

AW: BDE unter Win 7 64 bit
 
Wobei ich für unsere alten BDE-Anwendungen ein Vorab-Setup geschrieben habe, das nicht nur die BDE installiert, sondern auch z.B. eine passende SHAREDMEMLOCATION abhängig vom Zielrechner ermittelt und setzt. (Die Daten aus FastMM sind dabei sehr hilfreich. ;-))

Für den ODBC Zugriff ist das aber nicht erforderlich, deshalb reicht da das normale BDE Setup.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
Seite 1 von 2  1 2      

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