AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird - Fremdschlüsselbeziehungen
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird - Fremdschlüsselbeziehungen

Ein Thema von Nico80 · begonnen am 5. Sep 2011 · letzter Beitrag vom 5. Sep 2011
 
Benutzerbild von dataspider
dataspider

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

AW: Firebird - Fremdschlüsselbeziehungen

  Alt 5. Sep 2011, 16:03
Hi,

ich habe mir eine Procedure geschrieben, welche die tabellen und Anzahl der Datensätze liefert.
Sicher nicht genau das, was du brauchst. Aber vielleicht hilft es ja:

Code:
create or alter procedure sys$to_delete (
    table_name varchar(31),
    id integer)
returns (
    relation_name varchar(31),
    anzahl integer,
    can_delete char(1))
as
declare variable field_name varchar(31);
begin
  /*
    -> zum Anzeigen vor dem Löschen
    Alle abhängigen Tabellennamen mit Anzahl der Datensätze
    welche mit gelöscht werden, wenn Record mit ID :id der Tabelle :table_name
    gelöscht wird
  */
  for select
    A.RDB$RELATION_NAME
  , E.RDB$FIELD_NAME
  , case
      when B.RDB$DELETE_RULE = 'CASCADE' then
        'T'
      else
        'F'
    end
    from RDB$REF_CONSTRAINTS B, RDB$RELATION_CONSTRAINTS A, RDB$RELATION_CONSTRAINTS C,
         RDB$INDEX_SEGMENTS D, RDB$INDEX_SEGMENTS E
    where (A.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY') and
          (A.RDB$CONSTRAINT_NAME = B.RDB$CONSTRAINT_NAME) and
          (B.RDB$CONST_NAME_UQ=C.RDB$CONSTRAINT_NAME) and
          (C.RDB$INDEX_NAME=D.RDB$INDEX_NAME) and
          (A.RDB$INDEX_NAME=E.RDB$INDEX_NAME) and
          (C.RDB$RELATION_NAME = :table_name) and
          (B.RDB$DELETE_RULE in ('CASCADE', 'RESTRICT'))
    into
    :relation_name
  , :field_name
  , :can_delete do
  begin
    execute statement 'select count(*) from '||:relation_name||' where '||:field_name||
                      '='||:id
                      into :anzahl;
    suspend;
  end
end
In diesem Fall übergebe ich den Tabellennamen und den PK (ID).

Frank
Frank Reim
  Mit Zitat antworten Zitat
 


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 09:33 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