![]() |
Datenbank: Oracle • Version: 10 • Zugriff über: ADO
TADOConnection auf anderem Datenmodul wie TADOQuery
Hallo zusammen,
will mich gerade von meiner BDE lösen und versuche mich jetzt gerade mit TADO ... Ich habe die TADOConnection auf dem Datenmodul_1 Die TADOQuery liegt auf Datenmodul_2. Der TADOQuery habe ich auch die Connection von Datenmodul_1 zuweisen können. Die Verbindung ist auch hergestellt da ich die Felder hinzufügen konnte. Wenn ich im Programm aber jetzt TADOQuery.Open mache kommt die Meldung das eine Connection oder Connectionstring fehlt. Packe ich jetzt beide auf das gleiche Datenmodul klappt es. Möchte aber nicht auf jedem Datenmodul eine Connection haben. Woran könnte es liegen ? In den uses des Datenmodul_2 ist auch das Datenmodul_1 eingetragen. Gruss Holger |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Zitat:
teilweise mit 2 oder 3 connections, bisher hatte ich keine Probleme das zu handhaben. Gruß K-H |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Vorher mit den TDatabase-Komponenten hat das aber super funktioniert.
Ich habe in einem anderen Projekt festegestellt das wenn ich umso mehr Connections habe die Programme langsamer werden, da jedes Programm dann mehrere Connections gleichzeitig bedient und das mal die Anwender die das Programm nutzen. Gibt es denn eine Idee wie ich die TQADOQuery auf ein anderes Datenmodul packen kann wie die TADOConnection ? Gruss Holger |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Zitat:
Aber im Ernst, eine Connection,eine Query fertig. Manchmal braucht man noch eine zweite oder dritte (Connection/Query) aber das ist zumindestens für mich seehr selten. Gruß K-H |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Ich würde mal annehmen, in deinem Projekt wird erst das Datenmodul erzeugt, das die Query hat. Nun steht in der DFM unter Connection 'Module2.myADOConnection'... Aber 'Module2' gibt es ja noch nicht. Ergo steht da nun null drin.
Abhilfe: Setzte die Connection-Eigenschaft explizit. Ist eh besser, weil Du irgendwann ja doch die Einstellung verlierst (beim rumeditieren) |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Es ist genau umgekehrt.
Das Datenmodul mit der Connection ist von Anfang an da. Die einzelnen Datenmodule mit den entsprechenden Querys werden je nach Nutzung nachgeladen. Muss ich da eventuell noch was auf Aktiv setzen ? Aber warum ging das mit der BDE und den TQuerys ohne Probleme ? Habe ja jetzt nur testweise eine neue ADOConnection und eine neue TADOQuery dazu erstellt. Alles andere mit der BDE läuft weiterhin. Gruss Holger |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Wie erstellst Du die Instanzen?
Aber das ist doch eigentlich nebensächlich. Setze die Verknüpfung explizit (was sowieso 1000x besser ist) und widme dich dem nächsten Problem.. ;-) |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Du meinst also ich soll den Connection String direkt in die Query setzen ?
Nur wäre dann bei der Auswahl eines Testservers die Notwendigkeit das ich allen Querys den neuen Server mitteilen muss und nciht nur einer. Gehen würde das, aber ist halt auch aufwendig und muss ich bei Erweiterungen des Programms auch immer dran denken. Wenn der Anwender einen bestimmten Programmteil benutzen will, create ich nur die entsprechende Form und das entsprechende Datenmodul mit den dazugehörigen Querys. Das Datenmodul mit der Connection ist aber immer erstellt. Wenn der Anweder einen anderen Programmteil nutzen möchte werden die wieder mit freeandnil gekillt und die neuen erstellt. Gruss Holger |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Habe gerade was herrausgefunden.
Wenn ich bei erstellen des Datenmoduls die Connection nochmal explizit zuweise klappt es:
Delphi-Quellcode:
Aber warum muss ich das tuen ?
procedure TDM_Systemoptionen.DataModuleCreate(Sender: TObject);
begin inherited; DM_Systemoptionen := Self; ADOQueryTreeView.Connection := DM_Menu.ADO_Con_SYSDBP; end; Gruss Holger |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Nur so als Beispiel
Delphi-Quellcode:
TADODataModule = class( TDataModule )
public procedure SetConnection( AConnection : TADOConnection ); end; procedure TADODataModule.SetConnection( AConnection : TADOConnection ); var LIdx : Integer; begin for Lidx := 0 to ComponentCount - 1 do if Components[LIdx] is TCustomADODataSet then ( Components[Lidx] as TCustomADODataSet ).Connection := AConnection; end; |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Sowas war ich mir auch gerade am basteln:
Delphi-Quellcode:
procedure TDM_Systemoptionen.DataModuleCreate(Sender: TObject);
var ADOQuery: TADOQuery; I: Integer; begin inherited; DM_Systemoptionen := Self; For I := 0 to DM_Systemoptionen.ComponentCount - 1 do begin if DM_Systemoptionen.Components[I] is TADOQuery then begin ADOQuery := TADOQuery(DM_Systemoptionen.FindComponent(DM_Systemoptionen.Components[I].Name)); ADOQuery.Connection := DM_Menu.ADO_Con_SYSDBP; end; end; //ADOQueryTreeView.Connection := DM_Menu.ADO_Con_SYSDBP; end; Aber besser ist es natürlich in eine Funktion zu packen damit ich das für alle Datenmodule nutzen kann, wie bei Dir. Aber warum das bei TADO so ist ? |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Hätte statt
Delphi-Quellcode:
nicht auch
ADOQuery := TADOQuery(DM_Systemoptionen.FindComponent(DM_Systemoptionen.Components[I].Name));
Delphi-Quellcode:
gereicht?
ADOQuery := TADOQuery(DM_Systemoptionen.Components[I]);
Davon abgesehen ist das schöne an Sir Rufos Methode, dass sie mehr entkoppelt ist, d.h. das ursprüngliche Datenmodul "DM_Menu" muss in den folgenden nicht bekannt sein, es wird einfach über den Setter die Connection übergeben. GGf. könnte man doch auch das create des Datenmoduls überschreiben (oder?) und da direkt die Connection übergeben? Da man da ggf. auch bereits weiß wie alle Querys heißen, muss man dann auch nicht durch alle Komponenten nach den Querys suchen. Umgekehrt ist die Setter-Funktion natürlich in anderen Datenmodulen wiederverwertbar egal wie die Querys dsa heißen. |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Das tut doch schon beim Schreiben weh, oder?
Delphi-Quellcode:
Wie kann man nur auf dieses schmale Brett kommen? :wall:
procedure TDM_Systemoptionen.DataModuleCreate(Sender: TObject);
var ADOQuery: TADOQuery; I: Integer; begin inherited; DM_Systemoptionen := Self; |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Jetzt bekomme ich Sie aber richtig hier ;)
Daher hatte ich diese Schmuddellösung: ![]() Vielleicht gibt es ja was besser, aber es konnte nichts besseres gefunden werden ... Die Lösung von Sir Rufos habe ich nun auch so übernommen ;) |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Natürlich gibt es was Besseres und das wurde dort auch genannt.
Diese Lösung wurde als Schmuddelnotlösung bezeichnet und ist eigentlich noch schlimmer. |
AW: TADOConnection auf anderem Datenmodul wie TADOQuery
Dennoch danke. Werde mal schauen wenn ich dazu komme mich mit dem Thema nochmal zu befassen, da es ja eigentlich stabil läuft ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz