Autor Beitrag
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Mo 30.06.03 09:12 
Hallo Leute,

ich habe ein böses Problem, dessen Lösung für mich rätselhaft ist. Also zunächst versuche ich 2 DB-Units in einer Klasse zu vereinen. Zum einen sind es die IBX-Komponenten für delphi und die TDatabase-Komponenten von Delphi (BDE-Verbindung). Eigentlich läuft alles Problemlos nur folgender Befehl löst einen Fehler aus.

ausblenden Quelltext
1:
Result := FIBConnection.TraceFlags;					


ich bekomme den Fehler: Inkompatible Typen: DBTables.TTraceFlag und IB.TTraceFlag.

Wenn ich die entsprechende Unit (so löst man das auch normalerweise) vor den Befehl schreib, bekomme ich an der Stelle nurnoch mehr Fehlermeldungen. Hilfe hätte ich hier echt bitter nötig, sonst muss ich verzweifeln. :cry:

Vielen Dank schonmal
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Fr 04.07.03 12:32 
Hi,

in diesem Fall kan eine Typumwandlung auch nicht funktionieren, da es nicht so ist, dass die eine Variable von der anderen Abgeleitet ist.
Das bedeutet, dass du die Umwandlung selber vollführen musst.
Was unter anderem daran liegt, dass beide Variablen von einander abweichen.

Hier erst einmal die beiden Definitionen der beiden DataSets.:
IB:
ausblenden Delphi-Quelltext
1:
type TTraceFlag = (tfQPrepare, tfQExecute, tfQFetch, tfError, tfStmt, tfConnect, tfTransact, tfBlob, tfService, tfMisc);					

DB:
ausblenden Delphi-Quelltext
1:
type  TTraceFlag = (tfQPrepare, tfQExecute, tfError, tfStmt, tfConnect, tfTransact, tfBlob, tfMisc, tfVendor, tfDataIn, tfDataOut);					



Das beduetet , dass deine Zeile
ausblenden Delphi-Quelltext
1:
  result :=  FIBConnection.TraceFlags;					

nicht einfach so funktioniert. statt dessen musst du die etwas längere Variante benutzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
case FIBConnection.TraceFlags of
  tfQPrepare: result := tfQPrepare;
  tfQExecute: result :=  tfQExecute;
  tfError: result :=tfError;
  tfStmt: result :=tfStmt;
  tfConnect: result := tfConnect;
  tfTransact: result := tfTransact;
  tfBlob: result := tfBlob;
  tfMisc: result := tfMisc;
end;


ich weiss jedoch nicht was man für tfQFetch u. tfService benutzen soll.
Dafür musst du wahrscheinlich ein bischen austesten.

_________________
Result := 42; Application.ProcessMessages;
ShadowCaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Do 10.07.03 10:52 
vielen Dank für deine ausführliche Antwort. Diesen Weg hab ich bereits getestet aber gefunzt hat er nicht so richtig. die Antwort bei delphipraxis.net hat funktioniert. Was ich gemacht hab war wegen der inkompatiblität der Typen 3 Basisklassen für BDE, ADO und IB zu machen, die jeweils die eigenen DB-Units einbinden. Von diesen Klassen werden die Properties per Forwarddeklaration durchgeschliffen, dass ich die Units in der Childklasse nicht mehr einbinden muss.

Also nochmal veranschaulicht:

TBDEClass --- TADOClass --- TIBClass
// diese Klassen includen jeweils die eigenen DB-Units

TCustomMudule
// besitzt Instanzen dieser 3 Klassen und vereint so die Funktionalität von BDE, ADO und Interbase.

Das Ganze sieht folgendermaßen aus. Beim Kreieren von TCustomModule gibt man an, ob ADO, IB oder BDE gewählt werden soll. Danach kreiert man ganz normal seine Queries und Datasets, etc. und kann damit arbeiten.

Über Sinn und Unsinn kann man sich streiten. Auftrag ist Auftrag und ich hab das Ding jetzt fertig ;)