Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Umstellung von Paradox auf FB 2.0 (https://www.delphipraxis.net/87022-umstellung-von-paradox-auf-fb-2-0-a.html)

dor557 22. Feb 2007 10:02

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

mkinzler 22. Feb 2007 10:37

Re: Umstellung von Paradox auf FB 2.0
 
Verwende eine Sequence-Komponente oder die neue neue Möglichkeit des
SQL-Code:
returning
bei
SQL-Code:
Insert
-Statements in FB 2
Zitat:

Habe es auch schon mit STORED Proc probiert aber da bekam ich lediglich immer den ID wert 0 !!
Hast du das
SQL-Code:
suspend
vergessen?

hoika 22. Feb 2007 10:37

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
http://www.ibphoenix.com/main.nfs?a=...&page=ibp_skip

Suchwort "key generators"

Kleines Bsp.
Tabelle Personal

SQL-Code:
create generator gen_Personal;


CREATE PROCEDURE PERSONAL_NEWID
RETURNS (NEWID INTEGER)
AS
begin
  newid=gen_id(gen_PERSONAL,1);
end
Und hier der passende Delphi-Code (BDE).
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:

function 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 }
Frag mich jetzt nicht, warum dort
StrToInt(SP.Params[0].AsString); statt nur AsString steht,
hatte damals was mit 16bit BDE zu tun (jaja, gab es mal ;) )

Heiko

dor557 22. Feb 2007 10:54

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 ??

hoika 22. Feb 2007 11:50

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

dor557 22. Feb 2007 12:24

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

dor557 22. Feb 2007 14:34

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 11:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz