AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FIBPlus Komponenten Frage

FIBPlus Komponenten Frage

Ein Thema von manfred_h · begonnen am 8. Mär 2006 · letzter Beitrag vom 11. Mär 2006
Antwort Antwort
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 10:42
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 10:52
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:
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;
Ganz grob.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 11:03
Zitat von chaosben:
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:
Ganz grob.
Danke das ganze habe ich eigentlich schon zusammen. Bis auf die 3 Befehle die Fibplus nicht kennt
oder so..

Delphi-Quellcode:
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;
Bei diesen 3 Befehlen hapert es bei mir.

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.
Manfred
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 11:13
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
Frank Reim
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 11:19
Zitat von dataspider:
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
Werde es Anschauen. Danke
Manfred

Hab da auch eben was im Delphi-Forum gefunden. Da hatte jemand ein vergleichbares Problem.
Tquery in Interbase SQL-Datenbank
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 11:27
Zitat von manfred_h:
Bis auf die 3 Befehle die Fibplus nicht kennt
oder so..
Hmmm ... wenn die Befehle von dem pFibQXXX Objekt nicht unterstützt werden, dann ist doch die Sache eindeutig. Ich vermute du hast, wie oben schon bemerkt, ein Query mit einem Dataset verwechselt.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 13:49
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;
Gruß
Hansa
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: FIBPlus Komponenten Frage

  Alt 8. Mär 2006, 21:12
Zitat von dataspider:
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
Hallo hab die Hilfedatei wirklich gelesen.
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:
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;
leider will das immer noch nicht. Bin echt den halben Tag heute aum Rumproieren

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
);
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: FIBPlus Komponenten Frage

  Alt 11. Mär 2006, 22:09
Es funktioniert

Da mir doch mehrere Personen dabei geholfen haben möchte ich hier die Lösung bereitstellen.

Delphi-Quellcode:
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;
pFIBQ_NursingH:
SQL-Code:
select id from Nursing_H
order by name
pFIBQ_NursingH_UPDATE:
SQL-Code:
UPDATE Nursing_H
SET ID = :new_id
WHERE id = :old_id
und dies sind die Tabellen

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:
******************************************************************************/
/**                                  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;
Besten dank für Eure Hilfe.
Manfred
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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