AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Connection in DLL -> .Open = Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Connection in DLL -> .Open = Fehler

Ein Thema von mika · begonnen am 4. Mär 2008 · letzter Beitrag vom 17. Mär 2008
Antwort Antwort
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#1

ADO Connection in DLL -> .Open = Fehler

  Alt 4. Mär 2008, 16:08
Datenbank: MS Access • Version: 2000/2003 • Zugriff über: adoConnection -> DSN Eintrag
Hallo erstmal

ich hoffe ihr könnt mir bei meinem Problem weiterhelfen. Hab schon allerhand gegoogelt und auch hier im Forum gesucht, leider ohne Erfolg. Ich habe eine Klasse geschrieben die über ein Datenbankformular auf eine MS-Access 200 oder 2003 Datenbank zugreifen soll um Werte auszulesen. Das ganze hat den Zweck einer anderen Applikation mit DLL Schnittstelle die Möglichkeit zu geben Double Werte aus der Datenbank zu holen.

Leider stürzt die DLL immer in dem Datenbankformular in der
Code:
// Standardkonstruktor
// : Öffnet die Datenbankverbindung
procedure TiSIM_Database.DataModuleCreate(Sender: TObject);
Var
    DatabaseFile: String;

begin
    changeDebugMode(0);

    DatabaseFile := ReadFromRegistry(
       HKEY_CURRENT_USER,
        'SOFTWARE\ODBC\ODBC.INI\iSIM',
        'DBQ');

    if Trim(DatabaseFile) = '' then
    begin
        MessageDlg('Benutzerspezifischer Datenbankalias "iSIM" nicht vorhanden!',
            mtError, [mbOK], 0);
        Abort;
    end;

    if Not SysUtils.FileExists(DatabaseFile) then
    begin
        MessageDlg('Datenbankdatei im Alias iSIM nicht korrekt!' + #13#10 +
            '"' + DatabaseFile + '"',
            mtError, [mbOK], 0);
        Abort;
    end;

    // Hier kommt der Fehler !!
    adoDatabaseConnection.Open;
end;
ab und ich kann den Fehler nicht finden. Wenn ich meine Units zu einer "normalen" Win-Applikation kompiliere funktioniert alles tadellos. Habe schon beim Initialisieren/Finalisieren der DLL OleInitialize und ComInitialize aufgerufen, brachte jedoch keine Verbesserung des ganzen.

Im Anhang ist die Datei des DLL-Projektes und das Datenbankformular. Ich hoffe jemand von euch weiss einen guten Rat da ich schon seit Tagen an diesem Problem knabbere.


Danke schonmal für jedwede Hilfe.
Angehängte Dateien
Dateityp: pas u_isim_database_301.pas (3,9 KB, 11x aufgerufen)
Dateityp: dfm u_isim_database_477.dfm (418 Bytes, 6x aufgerufen)
Dateityp: dpr isc_696.dpr (6,9 KB, 7x aufgerufen)
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 4. Mär 2008, 19:42
Und das Objekt existiert bereits?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#3

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 10:59
Hallo sirius,

ja das Objekt liegt auf dem Datenbankformular (ist auch im Anhang meines Ursprungspost). Das Datenbankformular ist ein Standard Delphi Datennmodul und wird beim initialisieren der DLL erzeugt.
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 11:27
(Brauchst du kein Passwort/Benutzernamen für die Datenbank?)

Den Fehler finde ich direkt nicht, aber was mir noch aufgefallen ist:
1. AddTerminateProcs dürfte in einer DLL nicht funktionieren. Du hängst deine Funktion zwar an eine Liste an. Allerdings hat die DLL eine eigene Liste und ausgeführt wird IMHO nur die Liste in der EXE.
2. Nutze besser DLL_Process_Attach/DLL_PROCESS_DETACH, dann hast du auch gleich Punkt 1 erledigt (siehe Hilfe: DLLProc).
3. Ich würde noch versuchen, das open mal aus dem Create rauszunehmen und etwas später auszuführen.

Prinzipiel geht es mit der DLL. Ich habe das in einem Projekt auch so: Alle ADO-Komponenten befinden sich auf einem DataModul, welches von einem Thread in einer DLL genutzt wird.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#5

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 12:06
Hallo Sirius,

danke erstmal das du probierst mit mir den Fehler zu finden!

Zu deinen Antworten.

1.) Ich habe mit Showmessage mir einfach mal kleine Debugmeldungen eingebaut. Meine Ausstiegsprozedur wird ausgeführt und alles.
Aber ich schaue mir deine Hinweise gern mal an.

2.) Die beiden Keywords kenne ich gar nicht. Muss ich mir glaube ich mal ansehen.

3.) Das wäre ne Idee. Hab ich mir gestern abend auch mal überlegt. Allerdings glaube ich nicht das das Abhilfe schafft den wie
gesagt funktioniert das ganze als Applikation ja tadellos... Ich hatte erst gedacht das mir das OleInitialize helfen würde aber das war ja auch nicht die Lösung :-/
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 15:43
also ich habe noch mal bei mir nachgesehen. Ich habe auch eine Funktion, die exportiert wird, in der direkt die Adoconnection initialisiert und geöffnet wird.

Was kommt den für ein Fehler?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#7

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 16:34
Leider gar keiner.... die DLL hört anscheinend einfach auf...

Ich hab vor und nach der entsprechenden Zeile mal ein Showmessage eingebaut und wenn ich die DLL lade kommt das "vor" aber nicht das "nach" Kannst du eventuell mal n bisschen Beispielcode deines Projektes posten? Vielleicht fällt mir ja ein Unterschied auf.

[edit]
Oder mal die Sachen aus dem Formular die die Connection betreffen? Vielleicht habe ich ja im OI was falsch eingestellt oder vergessen. Das ganze Objekt wird nämlich über den OI sozusagen "initialisiert", will heissen da stehen alle wichtigen Sachen drin.
[/edit]
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 5. Mär 2008, 16:47
Bei mir geht nix über OI:
Delphi-Quellcode:
function TestFirstLastValue(FileName:Pchar; ConnStr:PChar; Messort:pchar; Laenge:integer) :integer; //wird exportiert
var Daten:Tmessdaten;
    mo,name,cstr:string;
    DB:TAdoConnection;
    query:TAdoquery;
    id_kanal,id_zeit,a:integer;
    tab:string;
    vgl:double;
    res:boolean;
begin
  res:=false;
  id_kanal:=0;
  try
    if not initeinstellungen(connstr) then
      raise Exception.Create('Fehler beim Lesen der Einstellungen aus der Datenbank');
...
end;

function InitEinstellungen(ConnStr:Pchar):boolean;
var cstr:string;
    DB:TAdoConnection;
    Query:TadoQuery;
    s,w:string;
    z:int64;
begin
  result:=true;
  if einstellunggeladen {globaler Boolean} then exit;
  cstr:=connstr;
  try
    Query:=nil;
    DB:=nil;
    try
      DB:=TAdoConnection.Create(nil);
      DB.ConnectionString:=cstr;
      DB.Open;
      Query:=TAdoQuery.Create(nil);
      Query.Connection:=DB;
      DBAfterConnect(query);

...
end;
TestFirstLastValue wird exportiert und auch als erstes aufgerufen,
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#9

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 6. Mär 2008, 10:14
hmm :/

dann muss ich mal schauen am wochenende wollte ich mich mal wieder davor setzen und mal sehen. Wenn das ganze bei dir funktioniert muss das bei mir ja auch irgendwie klappen Vielleicht probiere ich auch mal die Instanz der Connection zur Laufzeit zu erstellen und den ganzen Connectionkram und so mitzugeben... Vielleicht funktioniert das hier ja besser.

Danke erstmal!! ich meld mich nach dem Wochenende mal wieder.
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#10

Re: ADO Connection in DLL -> .Open = Fehler

  Alt 17. Mär 2008, 19:15
Soooo nach langem suchen habe ich den Fehler endlich gefunden

Also: Man darf die Initialisierung der adoConnection NICHT in die Initialisierung der DLL einbauen.

Ich habe einfach eine weitere Methode exportiert die die Datenbankverbindung aufbaut die ich aufrufen
kann nachdem die DLL geladen wurde. Dann funktionierts auch mit der DB


Liebe Grüße, Michael
:: don't Panic ::
  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 12:59 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