![]() |
Datenbank: FB • Version: 2.0 • Zugriff über: IB-Komponenten
Umstellung von Paradox auf FB 2.0
Hallo Zusammen.
Ich bin etwas am verzweifeln. Da ich in erfahrung gebracht habe das die Paradox Datenbank Treiber unter windows Vista nicht mehr zur verfügung stehen bzw. die BDE da nicht mehr so ohne weiteres einsetzbar ist habe ich mich entschieden auf FB umzustellen. So weit habe ich Die Software auch am laufen. Habe mit IBDataPump alles convertieren können. Incl. ID die automatisch erhöht wird. Jetzt stehe ich vor dem Problem das ich vorher bei der BDE mit der SQLTable immer die Abfragen gemacht habe und mit TTable einfach die Tabellen bearbeitet habe. Sprich 2 Komponenten in ein DatenFormular gesetzt und das eine war zum einsehen der Daten das andere zum bearbeiten. Nun unter FB/IB hatte ich das gleiche vor. Da aber nun ein Trigger (Before insert) Existiert und dieser wert nicht zurükgegeben wird bis man die Tabelle aktualisiert hat stehe ich vor dem Prob. das ich immer die Meldung bekomme "ID muss einen wert haben". Was ja logisch ist. Wie schaffe ich es wenn der Trigger eine ID zugewiesen hat diesen auch SOFORT einsehen zu können ?? Habe es auch schon mit STORED Proc probiert aber da bekam ich lediglich immer den ID wert 0 !! Wie schaffe ich es zum einen Das ich in die Direkte IBSQLTable daten Bearbeiten kann nachdem ich einen neuen Datensatz angelegt habe, und wie schaffe ich es das ich die ID sofort nach dem erstellen des Datensatzes auch in der Tabelle sehen kann. Ich bin anfänger. Habe mich bisher immer mit kleinen tabellen und Datenbanken beschäftigt. Nun wird das ganze aber grösser auch die Datenmengen werden immer grösser. Daher musste ich früher oder Später umsteigen.. Gruss Sascha |
Re: Umstellung von Paradox auf FB 2.0
Verwende eine Sequence-Komponente oder die neue neue Möglichkeit des
SQL-Code:
bei
returning
SQL-Code:
-Statements in FB 2
Insert
Zitat:
SQL-Code:
vergessen?
suspend
|
Re: Umstellung von Paradox auf FB 2.0
Hallo,
1. die Bde läuft immer noch unter Vista. 2. Hole dir die neue ID vor dem Speichern über eine Stored Procedure Suche hier entweder nach Generator oder schaue mal hier ![]() Suchwort "key generators" Kleines Bsp. Tabelle Personal
SQL-Code:
Und hier der passende Delphi-Code (BDE).
create generator gen_Personal;
CREATE PROCEDURE PERSONAL_NEWID RETURNS (NEWID INTEGER) AS begin newid=gen_id(gen_PERSONAL,1); end die Methode geht davon aus, dass die SP und der Generator einer bestimmten Syntax folgen: Generator: gen_TableName SP: TableName_NewId Damit kann die Methode für alle Tabellen verwendet werden.
Delphi-Quellcode:
Frag mich jetzt nicht, warum dortfunction Table_GetNewId__DB(const theDataBaseName, theTableName: String; var theNewId: Longint; var theErrorStr: String): Boolean; var SP: TStoredProc; begin Result:= False; theNewId:= -1; theErrorStr:= ''; try SP:= TStoredProc.Create(NIL); try SP.DataBaseName:= theDataBaseName; SP.StoredProcName:= UpperCase(theTableName)+'_NEWID'; SP.ExecProc; theNewId:= StrToInt(SP.Params[0].AsString); Result:= True; finally SP.Free; end; except on E: Exception do begin theErrorStr:= E.message; end; end; end; { Table_GetNewId__DB } StrToInt(SP.Params[0].AsString); statt nur AsString steht, hatte damals was mit 16bit BDE zu tun (jaja, gab es mal ;) ) Heiko |
Re: Umstellung von Paradox auf FB 2.0
Wenn ich mit einer StoredProc arbeite brauche ich da eigentlich noch einen Trigger ???
Denn dann wenn ich das richtig verstanden habe würde der Wert sich ja immer um eines Erhöhen wenn die SP aufgerufen wird und wenn der Trigger aufgerufen wird.... Richtig ?? |
Re: Umstellung von Paradox auf FB 2.0
Hallo,
im Trigger schreibst du if new.id is null then new.id=gen_id() oder lässt ihn gleich weg. Der Trigger hat dann nur noch eine Bedeutung, wenn fremde Anwednungen in die DB schreiben wollen. Heiko |
Re: Umstellung von Paradox auf FB 2.0
Ok. Da diese Datenbank nur von meiner Software benutzt wird denke ich macht es auch eine Stored Proc.
Wenn die software mehrmals benutzt wird dann reicht ja im Netzwerk als beispiel die Stored Proc. Und der Trigger wird nicht gebraucht. Soweit ich das weiss oder richtig verstanden habe. Kann das also auf alle Tabellen anwenden. denn beim Trigger kann ich die Bevore insert klausel ja nicht draussen lassen. Und wenn ich einen neuen datensatz anlege ist die ID ja noch nicht gespeichert sondern erst wenn ich Den Befehl POST benutzt habe. Danke für die Hilfe.... Werde das dann entsprechend umsetzen. Trigger wäre mir da allerdings lieber.... Naja kann man nichts machen... Gruss Sascha |
Re: Umstellung von Paradox auf FB 2.0
Ich habe mich entschieden die BDE wegzulassen.
Nehme da lieber dann die komponenten von IB ;) habe das alles so gemacht jetzt. Es Funzt... Danke nochmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz