AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Datenmodule und DLL

Ein Thema von Tonic1024 · begonnen am 26. Sep 2003 · letzter Beitrag vom 29. Sep 2003
Antwort Antwort
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Datenmodule und DLL

  Alt 26. Sep 2003, 18:07
Moin...

Ich will die Zugriffsschicht zu einer Datenbank in eine DLL auslagern, und komme damit nicht so recht weiter. Einer von den Datenbank-Spezis kann mir da doch bestimmt einen Tip geben.

Ich habe folgendes verbrochen:

Zuerst habe ich meiner DLL Schnittstelle eine Funktion zum Testen hinzugefügt und die Kommunikation von Hauptmodul und DLL mit eigenen Datentypen (2DArray of Strings) getestet. ShareMem hat gumgezickt, aber habe ich in den Griff bekommen, und Läuft nun einwandfrei.

Dann habe ich den Datenbankzugriff im Hauptmodul realisiert. Nichts besonderes, eine SQLConnection und eine SQLQuery und einem Datenmodul. Läuft auch.

Dann habe ich in der DLL - Project hinzufügen - geklickt und mein DatenModul in die DLL integriert. Aber nun kommt es... Immer wenn ich jetzt die Query via Code anspreche gibt das einen Fehler. (weiß grad nicht wie der ausschaut - Zugriffsfehler in Modul XXX mit ein paar Hex-Adressen oder so) Wenn ich die Einstellungen "von Hand" also direkt im ObjektInspector mache geht es, Ich kann die Query auch aktivieren, bis ich Code-mäßig die Query anfasse. Egal was ich Ihr sage...

Wenn ich schreibe (sinngemäß) MyUnit.MyDatenModul.MyQuery.SQL:=MySQLStrings oder sowas, dann ists aus. Ich weiss nicht mehr weiter, und weiss auch nicht wo ich suchen soll...

Kann es sein, dass man generell keine Datenmodule in eine DLL Packen kann? Oder Mach ich einen dämlichen Fehler. Jedes Stück Code alleine funktioniert einwandfrei...

HILFEEEE.....!!!


Bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Datenmodule und DLL

  Alt 26. Sep 2003, 18:36
Das ist alles etwas verworren, was willst du mit der dll und einem Datenmodul ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 07:10
Moin...

Und ich hatt mir solche Mühe gemacht es kurz aber übersichtlich rüberzubringen...

Okay... Ich habe das Datenmodul ganz normal in meine Anwendung eingebaut, möchte es jetzt aber zusammen mit ein paar Funktionen auslagern. eine austauschbare Zugriffsschicht erzeugen - wenn man so will. Das Hauptmodul (also das was normal Form1 heisst ) wird dann weggegeben und je nach Datenbank eine DLL dazu.

Die Frage ist jetzt, geht das so überhaupt oder mach ich einen da einen Fehler? Ich habe einfach mal gemacht und bin davon ausgegangen: "Wird schon..."

bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#4

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 07:54
Wär schon Hilfreich zu wissen, was genau für eine Fehlermeldung Du bekommst und wo genau (in welcher Zeile) sie auftritt...
So pauschal würde ich sagen, dass der String, den du der Query übergeben willst, in der DLL nicht existiert (bzw. die DLL weiß, dass der String da ist, darf aber auf den Speicherbereich, in den er liegt, nicht zugreifen...)

Strings an DLLs besser als PChar oder PAnsiChar übergeben...
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 08:38
Moin...

Deiner Frage entnehme ich, dass es also generell möglich sein muss, oder?

Die Fehlermeldung lautet wie oben schon angedeutet: "Zugriffsverletzung an Adresse sowiso im Modul XY.DLL. Lesen von Adresse nochwas"

Der Fehler wird in meiner DLL angezeigt. Ich kann den Fehler auch auf eine Zeile genau definieren, aber verstehe ihn nicht.

Wie schon gesagt. Immer wenn ich im code die Query anspreche löst der Fehler aus.

Ein Beispiel:
Delphi-Quellcode:
function getDrivers(SQL:string):TDatenArray;
var Daten: TDatenArray;
    SQLString: TStrings;
    temp: string;
begin
    SQLString:=TStringlist.Create;
    SQLString.Insert(0,SQL);
    DBAnbindung.SQLQuery.SQL:=SQLString;
    //DBAnbindung.SQLQuery.SQLConnection:=DBAnbindung.CnxIB;
    //DBAnbindung.SQLQuery.Active:=true;

    SQLstring.Free;

    setlength(Daten,2);
    setlength(Daten[0],2);
    setlength(Daten[1],2);
    Daten[0][1]:='Alle Fahrer';
    Daten[1][1]:='-----------------------------------------'; // Separator

    //DBAnbindung.SQLQuery.First;
    {
    while not DBAnbindung.SQLQuery.Eof do
    begin
      ...machwas damit...
    end;
    }

    Result:=Daten;
end;
Hier weise ich der Query.SQL einen TStrings-typ zu ( Zeile 8 ). und bekomme die Exception. Wenn ich den zur Designzeit ändere und danach die Query öffene (auch zur Designzeit) passiert nichts - bzw. alles arbeitet wie vorgesehen.

Ich habe alle Zugriffe Auf das Datenmodul auskommentiert. Aber egal wann und in welcher zeile ich es anspreche, reagiert es wie oben beschrieben. Wenn ich aber die gleichen Änderungen zur Designzeit mache geht es. Wenn ich das Datenmodul und die Funktionen, so wie sie sind, im Hauptmodul (also der Application) und nicht in der DLL benutze gehts auch. Die Übergabe des Strings geht auch ohne Probleme. und der Rückgabewert ('Fahrer' und '----') geht auch

Der Fehler liegt also im Zugriff von der DLL auf das Datenmodul in der DLL bzw. die Query.

Es klingt kompliziert, ist es auch...

bis denne...

[EDIT]

Zu den Strings und der DLL:
Ich weiß, bin aber durch andere Umstände auf ShareMem angewiesen. Ich brauche Dynamische2D-String-Arrays. Dann sollte (eigentlich) der Datentyp String keine Probleme mehr machen. Tut er auch nicht. Aber danke für den Tip, habe ihn schon vorher beherzigt...

Wenn Du aber eine Bessere Alternative weißt, bin ich immer offen für Vorschläge...
[/EDIT]
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 09:26
Hast du das Datenmodul auch erzeugt? In einer DLL macht Delphi das nämlich nicht automatisch.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 09:30
Moin...

Hm, erklähr mal etwas näher... Könnte ein Ansatz sein

Ich habe "zum projekt hinzufügen" benutzt...

hab da folgendes:
Delphi-Quellcode:
uses
  DBSets in 'DBSets.pas{DBAnbindung: TDataModule};
und in DBSets steht:
Delphi-Quellcode:
type
  TDBAnbindung = class(TDataModule)
    CnxIB: TSQLConnection;
    SQLQuery: TSQLQuery;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DBAnbindung: TDBAnbindung;
meist du das ?

bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 09:38
Damit hast du nur die Unit in die Uses-Anweisung deier DLL aufgenommen. Was in einer DLL nun fehlt ist das, was Delphi bei einer Exe-Datei automatisch einfügt:
Application.CreateForm(TMyDataModule, MyDataModule); Das könntest du z.B. nun direkt in die DataModule Unit schreiben:
Delphi-Quellcode:
unit DMMyDataModule;
interface
...
type
  TMyDataModule = class(TDataModule)
    ...
  end;

var
  MyDataModule: TMyDataModule;
  
implememtation
...
initialization
  MyDataModule := TMyDataModule.Create(nil); // Application.CreateForm würde ich hier nicht nehmen

finalization
  MyDataModule.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: Datenmodule und DLL

  Alt 29. Sep 2003, 09:56
Moin...

SUUUPER!!!

Das wars... Eigentlich ganz logisch, wär ich aber selbst nie drauf gekommen. Ich kann sie sehen, und anfasen, aber sie ist nicht da...

Vielen Dank..!

Bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:22 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