Results 1 to 15 of 15

Thread: ADODB applicatie naar 64bits OS

  1. #1

    ADODB applicatie naar 64bits OS

    Hallo,

    Ik heb een database applicatie, welke gebruikt maakt van ADODB. Deze applicatie draait prima onder WindowsXP, maar blijkt te crashen als deze op een Windows-7 64 bits systeem wordt gestart. Ik vermoed dat dit met de ADODB library te maken heeft.

    Klopt dit? En wat kan ik doen om deze applicatie 'eenvoudig' geschikt te maken voor 64 bits systemen (en dan bedoel ik niet het draaien van deze applicatie in een 32 bits VirtualPC omgeving )

    Alvast bedant,
    Frank
    Environmental alert: stop fixing those bugs with ddt..!

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Doet vista/w7 32-bit het? Als die het ook niet doen, moet je het misschien meer in UAC gevallen zoeken.

  3. #3
    Hoe crasht je applicatie precies? Ga eerst eens uitzoeken waarom je applicatie crasht.

  4. #4
    Quote Originally Posted by Vos View Post
    Hoe crasht je applicatie precies? Ga eerst eens uitzoeken waarom je applicatie crasht.
    Ik kan helaas niet zien waarom de applicatie crasht. Ik kan alleen zien dat deze, zodra de database wordt aangesproken, eruit klapt (er zit een simpele log in die daar stopt). Ik zou het kunnen zien (tracen) als ik zelf een 64 bits systeem had, maar helaas is dat niet zo.

    Ik zou een uitgebreid logsysteem kunnen maken voor meer info, maar dat zit nu niet in de applicatie. Ik hoop dus dat iemand al een idee heeft?

    Op Vista en Windows 7 32 Bits doet de applicatie het prima.
    Environmental alert: stop fixing those bugs with ddt..!

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    De term 'ADODB' is nogal grootschalig, want je kan d.m.v. een juiste connectiestring meerdere databases mee connecteren. Over welke database spreken we dan?
    Delphi is great. Lazarus is more powerfull

  6. #6
    Het betreft een aantal MS-Access databases welke allemaal tegelijk geopend worden: 2007 (accdb) en 2003 (mdb).
    Environmental alert: stop fixing those bugs with ddt..!

  7. #7
    Op welke locatie staan die Access databases? Het kan zijn dat ze in een directory staan waar je applicatie niet mag lezen/schrijven van Windows (UAC). Bijvoorbeeld in een submap van Program Files.

    De kans is klein dat het komt door x64. Het zal eerder een veiligheidsprobleem zijn (UAC) zoals eerder aangegeven hier.

  8. #8
    Bij UAC is niets te vinden. De slider staat in de laagste positie.

    Dit is wat het log nog wel weet te melden:
    Failed to open database: 'C:\Program Files (x86)\Company\db.accdb' Open: Kan de voorziening niet vinden. Mogelijk is deze niet juist geïnstalleerd.

    De database staat echter wel op de locatie. Ik weet dus niet wat er met 'de voorziening' wordt bedoeld.
    Environmental alert: stop fixing those bugs with ddt..!

  9. #9
    Ah, ACCDB is de opvolger van MDB en is in Office 2007 geintroduceerd. Misschien is een update van de Microsoft Jet Database Engine nodig om deze te kunnen gebruiken. Al lijkt me dat sterk met Windows 7.

    http://www.microsoft.com/downloads/d...displaylang=en
    Last edited by Vos; 25-Mar-10 at 12:30.

  10. #10
    Het lijkt er inderdaad op dat je een driver mist. Vooral dat 'kan de voorziening niet vinden' lijkt te suggereren dat het bestand wel is gevonden, maar dat de middelen om het te openen ontbreken.

    Overigens zal dat geen algemeen ADO probleem zijn. Ik gebruik ADO componenten om tegen Oracle te praten vanuit een ISAPI dll op een 64 bit server. Dat gaat allemaal probleemloos.
    1+1=b

  11. #11
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Laatst had ik exact dezelfde foutmelding vanuit een 32bit met Delphi gemaakt programma op een 64bit Windows 10 laptop naar een 64bit MS Office Access 2016 database.

    Mijn oplossing was:
    - ga naar Microsoft Access Database Engine 2016 Redistributable, zoals Vos hierboven meldde,
    - download beide bestanden, zowel 32bit als 64bit,
    - installeer eerst de 64bit versie,
    - installeer daarna de 32bit versie vanaf de opdrachtregel met de /quiet optie (C:\Users\###\Downloads\AccessDatabaseEngine.exe /quiet), om de foutmelding te onderdrukken dat de 64bit versie eerst verwijderd moet worden.

    Met ODBC gegevensbronbeheer (C:\Windows\SysWOW64\odbcad32.exe) kun je controleren of het stuurprogramma inderdaad voor beide platforms in geïnstalleerd.
    Last edited by NGLN; 25-Sep-18 at 17:27.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  12. #12
    Senior Member
    Join Date
    Aug 2004
    Location
    Rotterdam
    Posts
    151
    Heb ooit deze functie gemaakt om een TADOConnection in te stellen voor een Access Database(.mdb / .accdb).

    Maar ook hierbij is het vereist dat je voor Win64 code of .accdb bestanden de Microsoft Data Access componenten hebt geinstalleerd.

    Als het resultaat van de functie True is, dan is je ADOConnection verbonden.

    Code:
    //#############################################################################
    const
      MSProviders : array[0..1] of  record
                                      Data  : string;
                                      Skip  : Boolean;
                                    end = (
        (Data: 'Microsoft.Jet.OLEDB.4.0'; Skip: false),
        (Data: 'Microsoft.ACE.OLEDB.12.0'; Skip: false));
    
      ProviderStr   = 'Provider=%s;';
      DataSourceStr = 'Data Source="%s";Persist Security Info=False;';
      ConnectPsw    = 'Jet OLEDB:Database Password=%s;';
    
    function SetConnectionEx(ACnx: TADOConnection; ADataBase, APassword: string): Boolean;
    var
      i       : Integer;
      CnxStr  : string;
    begin
      if FileExists(ADataBase) then
      begin
        CnxStr := Format(DataSourceStr, [ADataBase]);
        if (APassword <> '') then
          CnxStr := CnxStr + Format(ConnectPsw, [APassword]);
    {$IFDEF WIN64}
        for i := High(MSProviders) downto Low(MSProviders) do
    {$ELSE}
        for i := Low(MSProviders) to High(MSProviders) do
    {$ENDIF}
        try
          if not MSProviders[i].Skip then
          begin
            ACnx.Connected := false;
            ACnx.ConnectionString := Format(ProviderStr, [MSProviders[i].Data]) + CnxStr;
            ACnx.Connected := true;
            Break
          end
        except
          on E:EDataBaseError do
            Break;
          on E:Exception do
            MSProviders[i].Skip := true
        end;
        Result := ACnx.Connected
      end
      else
        Result := false
    end;

  13. #13
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Quote Originally Posted by fscharff View Post
    Failed to open database: 'C:\Program Files (x86)\Company\db.accdb'
    De map waar de database staat zou ik ook op voorhand al aanpassen.
    Volgens de windowsregel mag er geen data in een programs map staan, maar ja in het verleden werd daar niet zo moeilijk over gedaan door windows.
    In windows10 word je zeker op je vingers getikt, en kan je je programma nogmaals gaan aanpassen.

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  14. #14
    Senior Member
    Join Date
    Mar 2002
    Location
    Edam
    Posts
    426
    @knollie: Is het enige verschil tussen 64bits en 32bits de richting waarin je de providerlijst afloopt ( van hoog naar laag vs. van laag naar hoog)? Is dat omdat de 64bits providers standaard lager staan in de lijst en je zo vermijdt dat er een 32bits provider wordt geladen voor een 64bits versie?

  15. #15
    Senior Member
    Join Date
    Aug 2004
    Location
    Rotterdam
    Posts
    151
    Ja, dat is het enige verschil.

    Maar de reden is niet omdat anders de 32-bit provider wordt geladen (want die doet het in een Win64 applicatie toch niet).
    Ik had ooit in mijn enthousiasme veel meer providers in de lijst staan, omdat ik heel slim de versie nummers had doorgenummerd Jet 4.0, Jet 5.0 etc.
    Aangezien de enige die werkte in Win64 op de laatste plaats stond besloot ik toen de lijst achterstevoren af te werken. Hoefde ik de lus maar 1x te doorlopen.
    Maar bij enig speurwerk jaren later kwam ik er achter dat die providers helemaal niet bestonden, lijstje toen weer ingekort. Maar de compiler optie laten bestaan.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •