AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Strukturänderung Ja/Nein-Felder in Firebird

Strukturänderung Ja/Nein-Felder in Firebird

Ein Thema von Blackpit · begonnen am 24. Aug 2019 · letzter Beitrag vom 11. Sep 2019
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 11:03
mach das dann lieber über extra prozeduren, in fb3 könntest du die als hilfsprozeduren in einer einer package ablegen
und auf der results direkt deine where bedingungen legen (packages sind so ähnlich wie units in delphi, was außerhalb
sichtbar ist muss dann in den head).

Aufruf erfolgt dann in fb3 über
Code:
select * from tools.getusertables
wenn du das in fb<3 machen willst, nimm einfach die beiden sps aus dem recreate teil und erstelle die ohne package, aufruf dann
ohne tools. vor dem objektnamen


Code:
SET TERM ^ ;

CREATE OR ALTER package tools
as
begin
  procedure GetUserTables
  returns (tblname varchar(31));

 
end^

RECREATE package body tools
as
begin
procedure GetAllTableName
returns (tbl varchar(80))
as
begin
  for select rdb$relation_name from rdb$relations into tbl do
  suspend;
  when any do
  begin
   --hier kannst du z.B. exception wie hier einfach ignorieren
   --oder mit exception exceptionname selber definieren
   --falls du ''Stringkonstanten'' braucht, doublequotes nehmen
  end
end
 
procedure GetUserTables
returns (tblname varchar(31))
as
begin
  for select tbl from GetallTableName where tbl not containing '$' into tblname do
  begin
    suspend ;
  end
end
end
^

SET TERM ; ^

/* Existing privileges on this package */

GRANT EXECUTE ON PACKAGE TOOLS TO SYSDBA;
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#12

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 11:16
Hallo Holger,
ist ja ein cooles Feature, aber leider erst in FB3 (hab hier 2.5) trotzdem gut zu wissen
Dann werd ich mal mein Glück versuchen, wenn ich anstehe würde ich mich nochmal melden.
BTW ich würde das ganze noch gern protokollieren, gibt's dafür integrierte Mechanismen oder IBExpert-Tools?
Vielen Dank schonmal für die Unterstützung!
Gruß BP
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 11:24
In der Vollversion im SP Editor einfach mal oben auf Versioncontrol klicken und den dialog dann bestätigen, ab dann findest du in dem Reiter alle con dir erfolgreich compilierten Versionen deiner sp (geht auch mit trigger und bei fb3 package und functions).

Mit tools-database compare kannst du auch ein script erzeugen,um den metadata stand vor einer ziel db auf den metadata stand der quell db abzugleichen, ohne daten zu verlieren. In dem ibeblock reiter sind dazu dann jeweils die Script versionen, um das zu automatisieren mit ibescript.exe

Bei der Personal edition fehlt das aber
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#14

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 17:12
Hallo,
wenn ich das ganze in Prozeduren unterteile, kann ich es evtl auch gleich so machen:
In Proc GETTALLDETAILS bekomme ich alle Felder für alle Komponenten, in WorkOnDETAILS würde ich die Ergebnisse filtern, mit der Vergleichstabelle die entsprechende Bezeichnung ermitteln, in der Detailtabelle nachschlagen und die ID für das Insertstatement zurückbekommen und Insert ausführen.
Code:
  procedure WorkOnDETAILS                                                    
  as
  variables
   DET_ID integer;
   BEZ varchar(100);
  begin
    for select myID, column_name, column_value
        from GETALLDETAILS
        where column_value = Upper(''j'')
        into myid, column_name, column_value
    do
    begin
    select Bezeichnung from Vergleichstabelle where ColField = colfield_name into :Bez;
    suspend;
    select ID from comp_details where Bezeichnung = :Bez into DET_ID;
    suspend;
    if (id is null) then
    Insert into comp_details set bezeichnung = Bez
    return DET_ID
    suspend;
    else
    begin
    Insert into comp_cat_detail set (KAT_ID,DET_ID,CompID) Values(1,:DET_ID,myID)
    end
    end
  end;
Könnte das auch so gehen?

Geändert von Blackpit ( 8. Sep 2019 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 18:09
beim insert hat das set nix zu suchen und wenn das variablen sein sollen in deinem ersten select muss du die in sql anweisungen mit : als präfix ansprechen

wirkt irgendwie noch alles kraut und rüben zusammengetippt und nicht funktionierend in eine sp,
aber generell geht das, ggf eben über den umweg execute statement, wenn das keine echten objektnamen sind
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#16

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 18:28
Danke, das wollt ich wissen.
Sollte nur als Beispiel dienen, die Anmerkungen sind schon klar.
Beim Suspend bekomme ich auch mit execute statement eine Fehlermeldung, woran kann das liegen?
Noch was, kann ich Blöcke auch in Procs verwenden?
Nochmals vielen Dank, hast mir schon sehr geholfen!
Gruß BP
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 8. Sep 2019, 19:03
daran, das es wohl einen fehler gab
und ja, execute blocks gehen immer auch per execute statement
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#18

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 9. Sep 2019, 08:12
daran, das es wohl einen fehler gab...
Du hast mir den Tag erhellt
War blöd formuliert, der Einsatz von suspend war mir noch nicht ganz klar, hab mich nochmal schlau gemacht.
Wenn ich die Vergleichsliste fertig hab, sehe ich ob es funktioniert.
Danke nochmals!
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#19

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 9. Sep 2019, 15:07
Hallo,
muss mich leider nochmal melden.
Vergleichstabelle erstellt und Prozedur im Einzelschrittmodus getestet.
Läuft wie programmiert, sobald ich sie jedoch fertig laufen lasse bekomme ich
Zitat:
multiple rows in singleton select.
At procedure 'GETALLDETAILS' line: 24, col: 7.
Die Prozedur hat aber nur 22 Zeilen
Proc GETALLDETAILS wir in Proc GETCOMPDETAILS gerufen.

GETALLDETAILS
Code:
begin
  for select COMP_ID
      from COMP_AUS
      group by COMP_ID
      into :MYID
  do
  begin
    for select F.RDB$RELATION_NAME, F.RDB$FIELD_NAME
        from RDB$RELATION_FIELDS F
        join RDB$RELATIONS R on F.RDB$RELATION_NAME = R.RDB$RELATION_NAME and R.RDB$VIEW_BLR is null and (R.RDB$SYSTEM_FLAG is null or R.RDB$SYSTEM_FLAG = 0)
        where (upper(F.RDB$RELATION_NAME) starting with upper('COMP_AUS')) and
              (upper(F.RDB$FIELD_NAME) containing upper('_JN'))
        order by 1, F.RDB$FIELD_POSITION
        into :TABLE_NAME, :COLUMN_NAME
    do
    begin
      execute statement 'select cast(' || COLUMN_NAME || ' as varchar(100)) from ' || TABLE_NAME || ' where COMP_ID =' || MYID
          into :COLUMN_VALUE;
      suspend;
    end
  end
end
GETCOMPDETAILS
Code:
create or alter procedure GETCOMPDETAILS (
    MYID integer,
    COLUMN_NAME varchar(100) character set UTF8,
    COLUMN_VALUE varchar(100) character set UTF8)
as
declare variable DET_ID integer;
declare variable BEZEICH varchar(100) character set UTF8;
  begin
    for select first 1 myID, column_name, column_value  /*<--- multiple rows fehler beseitigt */
        from GETALLDETAILS
        where UPPER(COLUMN_VALUE) = UPPER('j')
        into myid, column_name, column_value
    do
    begin
    select Bezeichnung from dmchange where Field_Name = :column_name into :Bezeich;
    if (column_name not CONTAINING 'xxx') then
    begin
    select AUS_DET_ID from comp_aus_detail where Bezeichnung = :Bezeich into :DET_ID;
    if (bezeich <> '' and det_id is null) then
    begin
    Insert into comp_aus_detail (bezeichnung) Values (:Bezeich) returning aus_det_id into :det_id;
    suspend;
    end
    if (det_id is not null) then
    insert into comp_kat_details (KAT_ID,DET_ID,KID_ID) values (1,:DET_ID,:myid);
    end
    end
  end;
GETALLDETAILS läuft alleine durch und liefert die gewünschten Daten ohne Fehlermeldung.
Woran kann das liegen?

Nachtrag: Den Fehler habe ich mit "First 1" im Select wegbekommen (Datenlage), aber scheibar wird nicht commitet, Tabelle wird nicht gefüllt??

Geändert von Blackpit ( 9. Sep 2019 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 9. Sep 2019, 19:20
den commit musst der aufrufende machen, alle sps laufen in dessen transaktionskontext, in ibexpert also oben nach dem ausführen oben den toolbutton für commit anklicken.
die Fehlermeldung mit zeile xx kann auch aus dem execute statement kommen, daher kann das passen. Bei Zeilennummern zählen auch die im Header mit (es gibt in IBExpert eine toolbutton lazymode, dann erst siehst du den kompletten source, in deinem oberen Beispiel fehlt das scheinbar.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  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 12:57 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