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 3 von 3     123
Blackpit

Registriert seit: 27. Feb 2019
43 Beiträge
 
#21

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

  Alt 9. Sep 2019, 19:58
Hallo,
hier beide komplett:

GETALLDETAILS
Code:
SET TERM ^ ;

create or alter procedure GETALLDETAILS
returns (
    MYID integer,
    TABLE_NAME varchar(100) character set UTF8,
    COLUMN_NAME varchar(100) character set UTF8,
    COLUMN_VALUE char(100) character set UTF8)
as
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^

SET TERM ; ^

GRANT SELECT ON COMP_AUS TO PROCEDURE GETALLDETAILS;

GRANT EXECUTE ON PROCEDURE GETALLDETAILS TO MYDB;
GETCOMPDETAILS
Code:
SET TERM ^ ;

create or alter procedure GETCOMPDETAILS
as
declare variable DET_ID integer;
declare variable BEZEICH varchar(100) character set UTF8;
declare variable MYID integer;
declare variable COLUMN_NAME varchar(50) character set UTF8;
  begin
    for select myID, column_name
        from GETALLDETAILS
        where UPPER(COLUMN_VALUE) = UPPER('j')
        into myid, column_name
    do
    begin
    if (column_name not CONTAINING 'xxx') then
    begin
    select Bezeichnung from dmchange where Field_Name = :column_name into :Bezeich;
    select AUS_DET_ID from comp_aus_detail where Bezeichnung = :Bezeich into :DET_ID;
    if (bezeich is null and det_id is null) then
    begin
    Insert into comp_aus_detail (bezeichnung) Values (:Bezeich) returning aus_det_id into :det_id;/*return gen_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;^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE GETALLDETAILS TO PROCEDURE GETCOMPDETAILS;

GRANT SELECT ON DMCHANGE TO PROCEDURE GETCOMPDETAILS;

GRANT SELECT,INSERT ON COMP_AUS_DETAIL TO PROCEDURE GETCOMPDETAILS;

GRANT INSERT ON COMP_KAT_DETAILS TO PROCEDURE GETCOMPDETAILS;

GRANT EXECUTE ON PROCEDURE GETCOMPDETAILS TO MYDB;
Erste Proc allein liefert wie gewünscht.
Im Einzelschritt läüft GETCOMPDETAILS auch wie es soll.
Wenn ich es durchlaufen lasse nicht mehr
Ich dachte erst an Feldnamendoppellungen welche auch existieren, erklären kann ich es mir nicht.

Geändert von Blackpit ( 9. Sep 2019 um 20:02 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.600 Beiträge
 
Delphi 2010 Enterprise
 
#22

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

  Alt 10. Sep 2019, 07:08
Code:
..
create or alter procedure GETCOMPDETAILS
as
..
    begin
    select Bezeichnung from dmchange where Field_Name = :column_name into :Bezeich;
    select AUS_DET_ID from comp_aus_detail where Bezeichnung = :Bezeich into :DET_ID;
Ich dachte erst an Feldnamendoppellungen welche auch existieren, erklären kann ich es mir nicht.
Das kann durchaus sein, kommt auf die Natur der Felder an, die Du in beiden Selects oben als Einschränkung verwendest.

Nur wenn die Felder Field_Name und Bezeichnung (die ja die einzige Einschränkung sind) unique sind und idealer Weise auch so deklariert sind, dann kann das select immer funktionieren.
Wenn das Datenmodell an der Stelle keine Eindeutigkeit garantiert, brauchst Du weitere Felder zur Einschränkung, bis sichergestellt ist, dass immer 1 oder auch kein Datensatz als Ergebnis kommt.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.434 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#23

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

  Alt 10. Sep 2019, 07:15
Zitat:
Wenn das Datenmodell an der Stelle keine Eindeutigkeit garantiert, brauchst Du weitere Felder zur Einschränkung, bis sichergestellt ist, dass immer 1 oder auch kein Datensatz als Ergebnis kommt.
Oder man limitiert das Abfragergebnis auf einen Eintrag.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.600 Beiträge
 
Delphi 2010 Enterprise
 
#24

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

  Alt 10. Sep 2019, 07:29
Stimmt!
Schien mir in dem Zusammenhang nicht sinnvoll, aber es behebt den Fehler.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.434 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#25

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

  Alt 10. Sep 2019, 07:32
Ob, es sinnvoll ist steht auf einem anderen Blatt.
Markus Kinzler
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
43 Beiträge
 
#26

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

  Alt 10. Sep 2019, 11:46
Zitat:
Wenn das Datenmodell an der Stelle keine Eindeutigkeit garantiert, brauchst Du weitere Felder zur Einschränkung, bis sichergestellt ist, dass immer 1 oder auch kein Datensatz als Ergebnis kommt.
Das neue schon, das alte nicht daher die Vergleichstabelle.
Aber auch mit eleminierten Feldnamendoppellungen (Eindeutigkeit in der Vergleichstabelle) laufe ich auf den Fehler.
Ich gehe davon aus, das Ergebnis der ersten Proc als Resultset zu bekommen, welches ich in der zweiten abarbeiten kann. Im Debugmodus läuft es ja!
Die Einschränkung des Resultsets über die Felder dessen Value 'j' ist erzeugt ein neues RS was mir dann scheinbar das Problem macht.
Ansonsten müsste ich den Fehler doch schon beim ausführen der ersten Proc bekommen, oder irre ich mich da?

Geändert von Blackpit (10. Sep 2019 um 11:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
Ort: Hude (Oldenburg)
390 Beiträge
 
FreePascal / Lazarus
 
#27

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

  Alt 10. Sep 2019, 17:26
es hindert dich eigentlich auch niemand daran, statt der variablen die werte in rückgabe parameter zu packen und bei jedem vorgang einen supend einzuwerfen,mit dem du dann sehen kannst, wie weit der kommt. Es bringt aber nichts, auf Hilfe zu hoffen, wenn kein anderer deine Daten hat.
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
jobo

Registriert seit: 29. Nov 2010
2.600 Beiträge
 
Delphi 2010 Enterprise
 
#28

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

  Alt 10. Sep 2019, 19:08

Code:
create or alter procedure GETALLDETAILS
returns (
    MYID integer,
    TABLE_NAME varchar(100) character set UTF8,
    COLUMN_NAME varchar(100) character set UTF8,
    COLUMN_VALUE char(100) character set UTF8)
as
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
Und das sind noch mehr select..into mit dem gleichen Problem. Und das Group By in dem Select ist schon ein Schritt in die richtige Richtung, garantiert aber keinen Datensatzanzahl < 2.

Und IBExpert hat Recht mit seinen Hinweisen:
1. niemand hier hat Deine Daten und eine Struktur, die Eindeutigkeit sicherstellt gibt es ja so offenbar nicht. (Dafür sind Datenmodelle eigentlich da) Also folgt: alles ist möglich
2. Die Nutzung von SP ohne Parameter ist schon etwas fraglich. Also wenn schon "funktionale Programmierung" in SQL, wieso nicht gleich mit Eingangsparameter?
Ich habe mir das "Innenleben" der SP noch nicht so wirklich angeschaut, aber woher soll in der SP Getalldetails die Dynamik kommen?
Befüllst Du die Tabelle Comp_Aus vorher unterschiedlich?
Gruß, Jo
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
43 Beiträge
 
#29

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

  Alt 11. Sep 2019, 00:52
es hindert dich eigentlich auch niemand daran, statt der variablen die werte in rückgabe parameter zu packen und bei jedem vorgang einen supend einzuwerfen,mit dem du dann sehen kannst, wie weit der kommt. Es bringt aber nichts, auf Hilfe zu hoffen, wenn kein anderer deine Daten hat.
Das war's doch
Mit Ausgabeparameter und suspend hab ich es hinbekommen!
Danke an alle!
  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 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf