AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBgrid in DLL Problem

Ein Thema von supermuckl · begonnen am 17. Nov 2005
Antwort Antwort
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#1

DBgrid in DLL Problem

  Alt 17. Nov 2005, 13:38
Hallo.
Ich habe eine Application, die zur Laufzeit eine DLL mit Forms lädt.
In der Application sind mysql Query Funktionen definiert, die aus der DLL aufgerufen werden (funktioniert)
connection und datasources sind auch in der application definiert.
die datasources werden beim instanziieren der dll als pointer in die dll übergeben.
wenn ich ein query ausführe und dann in der dll auf das Datasource zugreife (direkt per code) oder per DBNavigator, dann tut das.

Problem:
Wenn ich aber ein Dbgrid zur Laufzeit mit dem Datasource verbinde, zeigt es beim query'en nur an, wie es wohl mit Records gefüllt wird ( der vertikale Scrollbalken wird immer kleiner ) aber dann kommt es zu willkürlichen Schreib-Exceptions die mir anschliessend auch CPU Debugfenster bringen.

das gleiche ausserhalb der DLL funktioniert aber.

wo kann hier das Problem liegen?
hier mal ein paar codeauszüge

Hauptapplikation-Funktionen:
Delphi-Quellcode:
function mySQL_query(var query:Tadquery; sql:string): boolean;
begin
result := false;
try
query.Active := false;
query.SQL.Clear;
query.SQL.Add(sql);
query.Active := true;
result := query.Active;
except on e:exception do begin
showmessage('Exception mySQL_query: '+e.message+' SQL:'+sql);
end; end;
end;

function mySQL_query1(sql:pchar): boolean;
begin
result := mysql_query(form1.adquery1,sql);
end;
Hauptapplikation-Übergabe von Adressen und Pointer an DLL:
Delphi-Quellcode:
@fetch_pointer := GetProcAddress(pluginhandle,'fetch_query1');
fetch_pointer(@mysql_query1); //query funktion

@fetch_pointer := GetProcAddress(pluginhandle,'fetch_ds1');
fetch_pointer(ds1); //datasource
DLL-Variablen (global):
Delphi-Quellcode:
  mysql_query1,mysql_query2,mysql_query3 : function(sql:pchar): boolean;
  adcommand: function(sql:pchar): boolean;
  ds1,ds2,ds3:Tdatasource;
DLL-Query auslöser:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
q:string;
begin

  form3.show;

  q := 'SELECT name FROM `sys_kwtypen`';
  mysql_query2(pchar(q));
  //dbgrid1.DataSource := ds2; //error
  dbnavigator1.DataSource := ds2;

  //QueryToDBgridA('SELECT name FROM `sys_kwtypen`',form3.dbgrid1);
  //QueryToDBgridB('SELECT name FROM `sys_kwtypen`',form3.dbgrid1);
end;
DLL-Funktionen:
Delphi-Quellcode:
procedure fetch_query1(p:pointer);
begin
 @mysql_query1 := p;
end;

procedure fetch_ds1(p:pointer);
begin
 ds1 := Tdatasource(p);
end;

exports
dllinit,dllfree,fetch_query1,fetch_query2,fetch_query3,fetch_command,fetch_ds1,fetch_ds2,fetch_ds3,init2;
hab halt noch einige sachen rausgelassen die den bock wohl nicht dünn machen

Also ich würde ja gerne direkt ein Tdbgrid an das Datasource auf der Oberfläche die die DLL verwaltet hänten und ein query ausführen können. Aber wenn das wohl nicht tut, müsste ich mir mein eigenes grid bauen und das dann "zu fuß" mit schleifen füllen o_O sowas ist unsauber
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  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 23:55 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