![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus
FIBPlus Komponenten Frage
Hallo
habe da ein wirklich kleines Problem: In einem anderen Thema haben mir marabu und sharky sehr weitergeholfen. Und das klappt auch alles bis.. das Umsetzen auf Fibplus. Bei diesen Befehlen habe ich in der Doku zu Fibplus wirklich kein vergleichbaren Befehl gefunden. Ja ich weiss, ist Unglaublich und das ist mir wirklich schon fast Peinlich. :oops: Query1.Open; Query1.Edit; Query1.Post; Query1.Open; > hier erscheint die Meldung [Pascal Error] E2014 Statement expected, but expression of type 'Boolean' found Query1.Edit; > 'TpFIBQery' does not contain a member named 'edit' // [Pascal Error] (174): E2003 Undeclared identifier: 'edit' Query1.Post; > 'TpFIBQery' does not contain a member named 'post' // [Pascal Error] (176): E2003 Undeclared identifier: 'post' Habe das ganze dann anstelle von Post mit ExecQuery und diversen meiner meinung nach "ähnlichen" Befehlen getestet, aber ohne Erfolg. Manfred |
Re: FIBPlus Komponenten Frage
Hi ho!
Nehmen wir an, du hast eine funktionsfähige DB-Connection und eine Transaction die mit deinem FibQuery und der DB-Verknüpft ist. Dann ist die grobe Schrittfolge wie folgt:
Delphi-Quellcode:
Ganz grob. :)
DBConnection.Open;
Transaction.StartTransaction; Query.Sql.Text:='Bli bla ...'; Query.ExecQuery; while not Query.Eof do begin Query.Next; end; Query.Close; Transaction.Commit; //oder Rollback; DBConnectionclose; |
Re: FIBPlus Komponenten Frage
Zitat:
oder so..
Delphi-Quellcode:
Bei diesen 3 Befehlen hapert es bei mir.
procedure Tfrm_tools.btn_idreplClick(Sender: TObject);
begin DM.pFIBDB_Gideons.Connected := True; DM.pFIBDS_NursingH.Open; DM.pFIBDS_NursingH_D.Open; DM.pFIBDS_NursingH_DD.Open; if not DM.pFIBDS_Camps.Active then DM.pFIBDS_Camps.Open; DM.pFIBQ_NursingH_D.Close; DM.pFIBQ_NursingH_D.SQL.Text := 'UPDATE Nursing_H_D SET ID_AREA = :newID WHERE id = :oldID'; DM.pFIBQ_NursingH_D.ParamCheck := True; DM.pFIBQ_NursingH.Close; DM.pFIBQ_NursingH.SQL.Text := 'SELECT id FROM Nursing_H'; DM.pFIBQ_NursingH.open; while not (DM.pFIBQ_NursingH.Eof) do begin newID := Neue_GuID; oldID := DM.pFIBQ_NursingH.FieldByName('id').AsString; DM.pFIBQ_NursingH.edit; DM.pFIBQ_NursingH.FieldByName('id').AsString := newID; DM.pFIBQ_NursingH.post; DM.pFIBQ_NursingH_D.ParamByName('newID').AsString := newID; DM.pFIBQ_NursingH_D.ParamByName('oldID').AsString := oldID; DM.pFIBQ_NursingH_D.ExecQuery; DM.pFIBQ_NursingH.Next; end; DM.pFIBQ_NursingH.open; DM.pFIBQ_NursingH.edit; DM.pFIBQ_NursingH.post; hab schon mit Google nach dieversen Bsp. gesucht aber auch dort nichts gefunden. :pale: Manfred |
Re: FIBPlus Komponenten Frage
Hi Manfred,
schau mal in die Hilfe von FibPlus. Dann wirst du sehen, dass du TpFibDataSet benutzen musst. Die Query ist nur unidirektional und von TComponent abgeleitet. Cu, Frank |
Re: FIBPlus Komponenten Frage
Zitat:
Manfred Hab da auch eben was im Delphi-Forum gefunden. Da hatte jemand ein vergleichbares Problem. ![]() |
Re: FIBPlus Komponenten Frage
Zitat:
|
Re: FIBPlus Komponenten Frage
Dataspider hat Recht. Ich habe hier zig Datasets und kein einziges Query etc.
Ein Grundgerüst kann so aussehen :
Delphi-Quellcode:
DS.Close;
DS.SelectSQL.Text := 'SELECT ......'; DS.Open; if DS.IsEmpty then begin ShowMessage ('neuer Datensatz !'); DS.insert; end else begin DS.Edit; ... Daten ändern // DS.delete; Daten löschen end; DS.Post; |
Re: FIBPlus Komponenten Frage
Zitat:
Dort steht: Using TpFIBQuery you can do the following things. · You can get unidirectional dataset creating select statement into SQL property. · You can do any database manipulation — insert, update and delete data, modifying metadata. · You can execute stored procedures. aber ich habe das ganze geändert und auf Datasets umgestellt. Das sieht jetzt so aus:
Delphi-Quellcode:
leider will das immer noch nicht. Bin echt den halben Tag heute aum Rumproieren :wall: :coder2:
function Neue_GuID: String;
var guidWork: TGUID; begin CoCreateGuid(guidWork); Result := GUIDToString(guidWork); end; procedure Tfrm_tools.btn_idreplClick(Sender: TObject); begin DM.pFIBDB_Gideons.Connected := True; DM.pFIBDS_NursingH.Open; DM.pFIBDS_NursingH_D.Open; DM.pFIBDS_NursingH_DD.Open; if not DM.pFIBDS_Camps.Active then DM.pFIBDS_Camps.Open; DM.pFIBDS_NursingH_D.Close; DM.pFIBDS_NursingH_D.UpdateSQL.Text := 'UPDATE Nursing_H_D SET ID_AREA = :newID WHERE id = :oldID'; DM.pFIBDS_NursingH_D.Active := True; DM.pFIBDS_NursingH.Close; DM.pFIBDS_NursingH.SelectSQL.Text := 'SELECT ID FROM Nursing_H'; DM.pFIBDS_NursingH.Active := True; while not (DM.pFIBDS_NursingH.Eof) do begin newID := Neue_GuID; oldID := DM.pFIBDS_NursingH.FieldByName('id').AsString; DM.pFIBDS_NursingH.edit; DM.pFIBDS_NursingH.FieldByName('id').AsString := newID; DM.pFIBDS_NursingH.post; DM.pFIBDS_NursingH_D.ParamByName('newID').AsString := newID; DM.pFIBDS_NursingH_D.ParamByName('oldID').AsString := oldID; DM.pFIBDS_NursingH_D.post; DM.pFIBDS_NursingH.Next; end; end; habe auch nebenbei den BT SQL Monitor am laufen. Aber mit den Datasets habe ich es echt ( auch )noch nicht geschaft dass er die IDs durch GUIDs erszt. Manfred PS: wenns hilft?
SQL-Code:
CREATE TABLE NURSING_H ( ID ID /* ID = CHAR(38) NOT NULL */, C_NR T30 NOT NULL /* T30 = VARCHAR(30) */, U_NR T30 NOT NULL /* T30 = VARCHAR(30) */, NAME T130 /* T130 = VARCHAR(130) */, STR T130 /* T130 = VARCHAR(130) */, PLZ PLZ /* PLZ = VARCHAR(10) */, CITY T50 /* T50 = VARCHAR(50) */, TEL T20 /* T20 = VARCHAR(20) */, FAX T20 /* T20 = VARCHAR(20) */, EMAIL T50 /* T50 = VARCHAR(50) */, HOMEPAGE T130 /* T130 = VARCHAR(130) */, ANZ_PL T10 /* T10 = VARCHAR(10) */, WORKER INTEGER, MT SMALLINT, ACCEPTANCE INTEGER, STATUS INTEGER, MEMO TEXT /* TEXT = BLOB SUB_TYPE 2 SEGMENT SIZE 4096 */, NC INTEGER, CS INTEGER, L_UPDATE TIME_S /* TIME_S = TIMESTAMP */, STAT_UPDATE INTEGER, STAT_DEL INTEGER );
SQL-Code:
CREATE TABLE NURSING_H_D (
ID ID /* ID = CHAR(38) NOT NULL */, C_NR T30 NOT NULL /* T30 = VARCHAR(30) */, U_NR T30 NOT NULL /* T30 = VARCHAR(30) */, ID_AREA ID /* ID = CHAR(38) NOT NULL */, D_DATE "DATE" /* "DATE" = DATE */, D_C_PERSON T50 /* T50 = VARCHAR(50) */, D_C_THRU T130 /* T130 = VARCHAR(130) */, D_MEMO TEXT /* TEXT = BLOB SUB_TYPE 2 SEGMENT SIZE 4096 */, L_UPDATE TIME_S /* TIME_S = TIMESTAMP */, STAT_UPDATE INTEGER, STAT_DEL INTEGER ); |
Re: FIBPlus Komponenten Frage
Es funktioniert :thumb: :P
Da mir doch mehrere Personen dabei geholfen haben möchte ich hier die Lösung bereitstellen.
Delphi-Quellcode:
pFIBQ_NursingH:
var
theOldId : String; theNewId : String; icount : Integer; function CreateClassID: String; var guidWork: TGUID; begin CoCreateGuid(guidWork); Result := GUIDToString(guidWork); end; procedure TSDIAppForm.Button1Click(Sender: TObject); begin DM.pFIBDB_Gideons.Open; DM.pFIBTrans.StartTransaction; DM.pFIBQ_NursingH.ExecQuery; icount:=0; while not DM.pFIBQ_NursingH.eof do begin theOldId := DM.pFIBQ_NursingH.fields[0].AsString; // there is only one field in here theNewId:= CreateClassID; DM.pFIBQ_NursingH_UPDATE.ParamByName('new_id').AsString:=theNewId; DM.pFIBQ_NursingH_UPDATE.ParamByName('old_id').AsString:=theOldId; DM.pFIBQ_NursingH_UPDATE.ExecQuery; inc(icount); DM.pFIBQ_NursingH.Next; end; DM.pFIBTrans.Commit; DM.pFIBDB_Gideons.Close; caption:=intToStr(icount); end;
SQL-Code:
pFIBQ_NursingH_UPDATE:
select id from Nursing_H
order by name
SQL-Code:
und dies sind die Tabellen
UPDATE Nursing_H
SET ID = :new_id WHERE id = :old_id
SQL-Code:
/******************************************************************************/
/** Tables **/ /******************************************************************************/ CREATE TABLE NURSING_H ( ID ID /* ID = CHAR(38) NOT NULL */, C_NR T30 NOT NULL /* T30 = VARCHAR(30) */, U_NR T30 NOT NULL /* T30 = VARCHAR(30) */, NAME T130 /* T130 = VARCHAR(130) */, STR T130 /* T130 = VARCHAR(130) */, PLZ PLZ /* PLZ = VARCHAR(10) */, ); /******************************************************************************/ /** Primary Keys **/ /******************************************************************************/ ALTER TABLE NURSING_H ADD PRIMARY KEY (ID); /******************************************************************************/ /** Foreign Keys **/ /******************************************************************************/ ALTER TABLE NURSING_H ADD FOREIGN KEY (C_NR) REFERENCES CAMPS (C_NR) ON UPDATE CASCADE;
SQL-Code:
Besten dank für Eure Hilfe. :cheers:
******************************************************************************/
/** Tables **/ /******************************************************************************/ CREATE TABLE NURSING_H_D ( ID ID /* ID = CHAR(38) NOT NULL */, C_NR T30 NOT NULL /* T30 = VARCHAR(30) */, U_NR T30 NOT NULL /* T30 = VARCHAR(30) */, ID_AREA ID /* ID = CHAR(38) NOT NULL */, D_DATE "DATE" /* "DATE" = DATE */, D_C_PERSON T50 /* T50 = VARCHAR(50) */, ); /******************************************************************************/ /** Primary Keys **/ /******************************************************************************/ ALTER TABLE NURSING_H_D ADD PRIMARY KEY (ID); /******************************************************************************/ /** Foreign Keys **/ /******************************************************************************/ ALTER TABLE NURSING_H_D ADD CONSTRAINT FK_NURSING_H_D1 FOREIGN KEY (ID_AREA) REFERENCES NURSING_H (ID) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE NURSING_H_D ADD FOREIGN KEY (C_NR) REFERENCES CAMPS (C_NR) ON UPDATE CASCADE; Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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