Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOQuery in DLL spinnt (https://www.delphipraxis.net/65047-adoquery-dll-spinnt.html)

gsh 11. Mär 2006 15:09

Datenbank: Microsoft Access-Datenbank • Zugriff über: Mit ADOQuery und ADOConnection

ADOQuery in DLL spinnt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DPler

Ich hab ein großes Problem. Ich ein Programm geschrieben das auf die Datenbank zugegriffen hat. Alles wunderbar. Bis ich mich entschied alles in eine DLL zu packen. Naja jetzt ist alles in der DLL und er bringt nur noch Fehler. Ich habe ja nichts vom Code geändert ist jetzt alles was die Datenbank angeht in die DLL gepackt. Jetzt kommt der Witz dabei der Fehler tritt auf nachdem er die procedure SQLBefehl 8-10 durch hat. Es ändert sich der SQL befehl nicht einmal. Und wo des ganze im Programm war hat alles wunderbar funktioniert :wall:

Delphi-Quellcode:
procedure SQLBefehl(SQL : String); stdcall;
begin
  ADOQuery.Active := false;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(SQL);      <--- Hier kommt der Fehler. Im Anhang
  ADOQuery.Active := true;
end;

function QueryData(FeldName : String) : Variant; stdcall;
begin
  result := ADOQuery[FeldName];
end;

exports SQLBefehl, QueryData;

begin
  ADOQuery := TADOQuery.Create(nil);
  ADOConnection := TADOConnection.Create(nil);
  ADOQuery.Connection := ADOConnection;
  ADOConnection.ConnectionString := cADOConnectionString;
  ADOConnection.Mode := cmShareExclusive;
  ADOConnection.Provider := 'MSDASQL.1';
end.

Elvis 11. Mär 2006 15:23

Re: ADOQuery in DLL spinnt
 
Mache aus der DLL ein Package und du kannst sogar Strings nehmen. Außerdem wird die VCL bei einer Delphi EXE + Delphi DLL zweimal geladen. Packages sind Delphis ClassLibs, DLLs sollten IMHO nur benutzt werden wenn man auch mit anderen Sprachen auskommen will.

gsh 11. Mär 2006 15:32

Re: ADOQuery in DLL spinnt
 
ich will aus verschiedenen Gründen eine DLL benutzen
also mein prob. warum funkt des nicht

Brüggendiek 12. Mär 2006 05:02

Re: ADOQuery in DLL spinnt
 
Hallo!

Hast Du daran gedacht, die Unit ShareMem als erste Unit aufzunehmen?
Das ist bei String-Parametern in einer DLL nötig (jedenfalls bei früheren Delphi-Versionen). Beim Erzeugen einer neuen Unit sollte das auch da drin stehen.

Alternative: PChar oder ShortString verwenden.

Gruß

Dietmar Brüggendiek

gsh 12. Mär 2006 09:22

Re: ADOQuery in DLL spinnt
 
ja aber warum kann des der fehler sein?
wenn ich debuge wird der string ja wunderbar übergeben :wall:

Ich ich werds mal mit PChar probieren


//edit: Danke :thumb:
Jetzt funktionierts :-D, ich verstehs trotzdem nicht warum :stupid: (kann mir jemand des erklären? würd mich interessieren)

MikeZ 12. Mär 2006 09:31

Re: ADOQuery in DLL spinnt
 
Du musst das COM-Subsystem mit CoInitialize(nil); vor dem Verwenden von COM-Objecten in DLLs initialisieren, und beim Entladen der DLL wieder mit CoUnInitialize; aufräumen. Bei multithreaded Anwendungen sollte in jedem Thread ein CoInitialize/CoUnInitialize Paar in der Execute-Methode stehen.

use ActiveX (bzw. OLE2 in älteren Delphi-Versionen)


ShareMem wird eigentlich nur benötigt, wenn man in extern deklarierten Funktionen Delphi-Strings verwenden will.

gsh 12. Mär 2006 10:15

Re: ADOQuery in DLL spinnt
 
und für was braucht man des CoInitialize bzw. CoUnInitialize? :wiejetzt:

gsh 22. Mär 2006 15:31

Re: ADOQuery in DLL spinnt
 
Liste der Anhänge anzeigen (Anzahl: 1)
:wall:

Ich hab des jetzt alles wunderbar zum laufen gebracht auch ohne CoInitialize(nil);
Naja und plötzlich (ohne des ich beim laden der DLL oder bei der DLL selbst etwas verändert hab) kann er diesen Befehl nicht mehr ausführen:
Delphi-Quellcode:
ADOQuery := TADOQuery.Create(nil);
Fehler: im Anhang

Das einzige was ich beim Prog. verändert hab war das ich eine TWebBrowser kompo gelöscht habe (hat nichts mir der Datenbank zu tun). Auch wenn ich sie wieder hinzufüg dann gehts nicht mehr :wall:

gsh 23. Mär 2006 08:12

Re: ADOQuery in DLL spinnt
 
*push*

gsh 26. Mär 2006 21:09

Re: ADOQuery in DLL spinnt
 
*push²*


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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