2017-06-08 5 views
-1

Ich verwende eine TSQLConnection Komponente (connDT) auf einem Datenmodul nur die Felder zu einem TSQLDataset, TDatasetProvider und TClientDataset Trio zur Entwurfszeit zu holen, die zu meiner Testdatenbank verbinden. Zur Laufzeit muss ich die Objektinstanz der Designzeit TSQLConnection (connDT) mit einer Laufzeitobjektinstanz (connRT) ändern, die mit der Produktionsdatenbank verbunden ist. Ich habe es auf diese Weise in der OnCreate Veranstaltung Datenmodul:Kann ich eine Sollzeitkomponentenreferenz zur Laufzeit überschreiben?

connDT := connRT;

Aber wenn ich mein TClientDataset Objekt (Trio) öffnen, verwendet es noch die Testdatenbank (die connDT Verbindungsobjekt-Einstellungen verwendet werden). Wie kann ich eine Soll-Komponentenreferenz zur Laufzeit überschreiben?

+2

Nein, das tust du nicht. Verwenden Sie die vorhandene Verbindung (ConnDT) und ändern Sie den Verbindungsnamen, oder verwenden Sie Ihre neue Verbindung (ConnRT), und ändern Sie die "TSQLQuery.SQLConnection", um diese Verbindung im OnCreate Ihres Datenmoduls zu verwenden. Sie müssen keine Instanz auf eine andere Instanz verweisen. –

+0

@KenWhite Ich weiß, dass ich es so machen kann, wie du es gesagt hast, aber es ist nicht das, was ich tun möchte. Ich möchte die SQLConnection-Objektinstanz austauschen, damit ich nicht in allen SQLDataset tauschen oder ConnDT bereits mit der Produktionsdatenbankkonfiguration verbinden muss. Es handelt sich nicht um ein SQLConnection-Exklusivproblem, sondern darum, die Instanz der Entwurfszeitkomponente für eine Laufzeitinstanz zu vertauschen. –

+0

Das ist nicht das, was du tun sollst. Wenn Sie keine weiteren Probleme haben, verliert das Originalobjekt, das für diese Designzeitkomponente instanziiert wurde und das Sie überschreiben, seinen Verweis und wird nicht freigegeben. – Victoria

Antwort

1

Überschreibe die Design-Time-Objektverweise nicht auf diese Weise. Wenn Sie die Verbindung Ihrer Datenbankkomponente (n) zur Laufzeit ändern möchten, ändern Sie entweder die Eigenschaft SQLConnection oder ändern Sie die Parameter des Verbindungsobjekts (was ich bevorzugen würde). Also entweder das:

SQLDataSet1.SQLConnection := ConnRunTime; 

Oder etwas Ähnliches:

ConnDesignTime.Params.Values['Database'] := 'MyDatabase'; 
ConnDesignTime.Params.Values['User_Name'] := 'UserLogin'; 
ConnDesignTime.Params.Values['Password'] := 'Password'; 
ConnDesignTime.Open; 

Es gibt andere Möglichkeiten, aber die oben genannten sind recht einfach.

+0

Bitte beachten Sie meinen Kommentar zu der Frage. –

Verwandte Themen