Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 26.11.06 21:37 
user profile iconAmiga-Fan hat folgendes geschrieben:
...Der Funktion übergebe ich die Query und die Transaktion (da mein Programm 2 austauschbare Datenbanken verwaltet).


Inwiefern austauschbar ? Wann steht fest, welche DB gebraucht wird ? Muss die während des Programmlaufes gewechselt werden oder wie ? "Austauschen" heißt für mich, dass zu einer Zeit nur eine DB gebraucht wird. Du musst schon etwas mehr sagen. Ich vermute nämlich stark, dass sich die Problematik viel einfacher lösen läßt.

_________________
Gruß
Hansa
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: So 26.11.06 21:53 
"muß" gar nicht. Die aktive DB wird über einen Menüpunkt umgeschaltet. Man kann aber auch nur eine DB festlegen.

wenn ich die DB wechsle, lege ich über variablen die aktuelle db, die queries und die transaktion fest. Nachher greife ich auf diese Variablen zu und übergebe sie dieser prozedur. Grundsätzlich ist das nicht schwer, ich kann aber natürlich nicht den ganzen quellcode posten...

Bitte beachten, diese funktion im datamodul rufe ich mehrere male mit denselben parametern hintereinander auf (bis auf sql-befehl natürlich), und die Fehlermeldung tritt erst beim 2. aufruf auf...

_________________
- Leg dich nie mit einem Berufsprogrammierer an
- Wahre Profis akzeptieren keine einfachen Lösungen
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 27.11.06 00:56 
user profile iconAmiga-Fan hat folgendes geschrieben:
...wenn ich die DB wechsle, lege ich über variablen die aktuelle db, die queries und die transaktion fest. Nachher greife ich auf diese Variablen zu und übergebe sie dieser prozedur....


So ungefähr war es zu erwarten. :mrgreen:

Ein Denkfehler produziert wohl einige Folgefehler. Es ist überhaupt kein Problem eine Datenbank zu benutzen und irgendwann eine andere. Ich habe hier bestimmt 10 verschiedene DBs. Test-DB, welche mit Originaldaten usw. Dabei wird gar nichts übergeben, außer dem ConnectionString zur DB. In der Praxis sieht es so aus, dass der DB-Name in einer INI im Programm-Verzeichnis liegt und die wird notfalls eben manuell geändert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Ini := TIniFile.Create (ExtractFilePath (ParamStr (0)) + 'DB.INI');
    DatenBankName := Ini.ReadString('Datenbank','Name',ExtractFilePath (ParamStr (0))+'db\XXX.fdb')
  DM.DataBase.Close;
  DM.DataBase.DatabaseName := DatenBankName;
  DM.DataBase.Open;
  DM.Transaction.Active := true;
  Ini.free;


Sollte Bedarf bestehen, die DB auch während des Programmlaufes zu wechseln, dann wäre der Code, der die INI betrifft auch leicht durch eine ComboBox etc. zu ersetzen. Es geht lediglich um : Database.Close -> genauen Datenbanknamen angeben -> Database.Open. Alles andere bleibt gleich. Würdest Du bei 10 DBs allen eine extra TDataBase, TTransaction usw. spendieren ? :shock:

_________________
Gruß
Hansa
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Mo 27.11.06 01:03 
das programm ist sowieso auf 2 datenbanken festgelegt, das ist schon ok. Wenn es noch mehr wären, hätte ich wohl auch eine andere Lösung ausgesucht, aber so... außerdem will ich über eine funktion eine db in die andere kopieren können, dazu brauche ich zwei gleichzeitig gültige db-verbindungen.

die db-verbindungen schreibe ich auch in eine ini-datei, aber natürlich im anwendungsdaten-verzeichnis.

wie auch immer, es läuft jetzt wieder. Ich hatte beim dynamischen Generieren von Queries nicht die Transaktion zugewiesen, danach mußte ich noch in meiner Schreibfunktion ein db.close und anschließend db.open durchführen, und dann gings wieder.

_________________
- Leg dich nie mit einem Berufsprogrammierer an
- Wahre Profis akzeptieren keine einfachen Lösungen
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 27.11.06 01:16 
user profile iconAmiga-Fan hat folgendes geschrieben:
...danach mußte ich noch in meiner Schreibfunktion ein db.close und anschließend db.open durchführen, und dann gings wieder.


Überlege trotzdem, was ich geschrieben habe. Oder eben auch nicht. "Operation gelungen, Patient tot" das sollte keine Dauerlösung werden. :mrgreen:

_________________
Gruß
Hansa
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mo 27.11.06 08:01 
Guten Morgen,

user profile iconAmiga-Fan hat folgendes geschrieben:

wie auch immer, es läuft jetzt wieder. Ich hatte beim dynamischen Generieren von Queries nicht die Transaktion zugewiesen, danach mußte ich noch in meiner Schreibfunktion ein db.close und anschließend db.open durchführen, und dann gings wieder.


genau das habe ich gemeint: Der Fehler lag nicht an der Transaktion sondern wo anders und hat bis an diese Stelle einfach durchgeschlagen! Gut wenn es jetzt läuft...

Grüße
Lemmy
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Di 12.06.07 20:44 
Ich weiß jetzt, woran es lag. Zum einen war AutoCommit aktiviert...
Zum anderen startete ich immer eine neue Transaktion, ohne zu achten ob bereits eine aktiv war.

_________________
- Leg dich nie mit einem Berufsprogrammierer an
- Wahre Profis akzeptieren keine einfachen Lösungen