SQL Fehlermeldung

Alles, was den Programmierer beschäftigt

Moderator: SYNERPY

Antworten
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

SQL Fehlermeldung

Beitrag von Fanja »

Hallo Leute,
ich bin neu hier im Forum und beschäftige mich seit kurzem mit AvERP
Ich arbeite gerade die Übungsaufgabe aus der Programmierdokumentation ab.
Beim erstellen der Trigger, sowie der View, erhalte ich SQL-Fehlermeldung und ein Rollback.
BeforeInsertTrigger: Invalid Token Dynamic SQL Error. SQL Error code = -104 Token unknown - line 3, char 1
CREATE

View: This operation is not defined for system tables. Dynamic SQL Error. SQL error code = -607. Invalid command. Number of columns does not match select list.

Kann mir da jemand weiterhelfen?
Gruß
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

Hallo Fanja,
bei der View scheinst Du in der Anzahl der Listen-Elemente abzuweichen :

CREATE VIEW V_XYZ(
Liste mit X Elementen )
AS SELECT
Liste mit ebenfalls X Elementen
FROM ...

Hier wäre es hilfreich, den Quellcode der entsprechenden Prozeduren (View, Trigger, ...) zu sehen.

Gruß
Geri12
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Mit welchem Tool arbeitest Du denn ... ?

Die Fehlermeldung besagt eigentlich nur, daß der SQL-Interpreter den Befehl CREATE nicht kennt.

Davon ausgehend, daß Du IBexpert verwendest: Trigger und Prozeduren werden nicht im SQL-Editor, sondern im SQL-Script Executive geschrieben.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

Ooops,
lieber mal genauer lesen und öfter mal die Klappe halten :shock:

:oops: Geri12 :oops:

P.S. Ich arbeite mit IBExpert. Merke ich bin urlaubsreif ...
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

Triggerquellcode

Code: Alles auswählen

CREATE TRIGGER BAVERP_BI2 FOR BAVERP
ACTIVE BEFORE INSERT POSITION 2
AS
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
BEGIN
/* Letzter Stand 17.04.2006 16:49:44 AS */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('BAVERP_BI2');
/* Kürzel für Ja und Nein aus dem Firmenstamm holen */
EXECUTE PROCEDURE P_BFIRMA_JANEIN RETURNING_VALUES (:SJA, :SNEIN);
/* Wert für das Feld ID vom Generator holen, wenn noch nicht vorhanden */
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_BAVERP,1);
/* Änderungen des Datensatzes dokumentieren */
NEW.BENUTZER = USER;
NEW.GESPEICHERT = CURRENT_TIMESTAMP;
/* Plausibilisierung für Tabellefelder */
IF (NEW.BKUNDE_ID = 0) THEN NEW.BKUNDE_ID = NULL;
IF (NEW.BSM_ID = 0) THEN NEW.BSM_ID = NULL;
/* Block der nicht mit dem Benutzer WORSTCASE ausgeführt wird */
IF (USER <> 'WORSTCASE') THEN
BEGIN
/* Ein neuer Datensatz kann noch nicht gedruckt sein */
NEW.GEDRUCKT = sNEIN;
END
END
Viewquellcode:

Code: Alles auswählen

CREATE VIEW V_BAVERP(
ID,
MASKENKEY,
BKUNDE_ID,
BSM_ID,
DATUM,
GEDRUCKT,
BEMERKUNG,
BENUTZER,
GESPEICHERT,
BKUNDE_MASKENKEY,
BKUNDE_BADR_NAME,
BKUNDE_BADR_BEZ,
BKUNDE_BADR_ABTEILUNG,
BKUNDE_BADR_STRASSE,
BKUNDE_BADR_BPLZ_MASKENKEY,
BKUNDE_BADR_BPLZ_ORT,
BSM_MASKENKEY,
BSM_NAME)
AS
SELECT
A.ID,
A.MASKENKEY,
A.BKUNDE_ID,
A.BSM_ID,
A.DATUM,
A.GEDRUCKT,
A.BEMERKUNG,
A.BENUTZER,
A.GESPEICHERT,
B.MASKENKEY,
C.NAME,
C.BEZ,
C.ABTEILUNG,
C.STRASSE,
D.MASKENKEY,
D.ORT,
E.MASKENKEY,
E.NAME
FROM BAVERP A
LEFT OUTER JOIN BKUNDE B ON A.BKUNDE_ID = B.ID
LEFT OUTER JOIN BADR C ON B.BADR_ID_ADRNR = C.ID
LEFT OUTER JOIN BPLZ D ON C.BPLZ_ID_LANDPLZ = D.ID
LEFT OUTER JOIN BSM E ON A.BSM_ID = E.ID
;
Ich arbeite mit IBExpert, das Script Executive habe ich noch nicht gefunden. Ich habe mich strickt an das Handbuch gehalten.
Gruß F
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

Okay habs gefunden

Tools->Script Executive (CtRL +F12).........
einfach das Script eingeben, testen und dann??????
Gruß F
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

@Geri: Die Frage nach dem Tool ging an Fanja, um zu wissen, wie man helfen kann ... aber Urlaub ist auch mal keine schlechte Idee :wink:

@Fanja: Erst die View und dann den Trigger anlegen. Und im Script Executive solche "Einspielskripte" für Views, Trigger etc. immer aufbauen wie folgt:

Code: Alles auswählen

SET TERM ^;
CREATE .....
END
^ /* Wichtig */
SET TERM;^
Die beiden SET TERM Befehle sind zum umschalten des Befehlsendezeichens von ; auf ^, da Du den ; im normalen Skript ja miteingeben mußt. Der Interpreter bleibt deswegen auch am ersten Semikolon hängen und denkt der Befehl sei zu Ende. Und da kommt beim Eingeben eines Skriptes natürlich nur Blödsinn bei rüber :)

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

Also auch da erhalte ich eine Exception:

Code: Alles auswählen

Script executed with errors!

Code: Alles auswählen

Linie 48 cannot perform operation--DB is not open.
Über select DB habe ich die aber vorher ausgewählt :?
Linie 48 ist das ^ zwischen und

Code: Alles auswählen

set term;^
Hier nocheinmal der Viewscript mit obengenannten Aufbau:

Code: Alles auswählen

set term ^;
CREATE VIEW V_BAVERP(
ID,
MASKENKEY,
BKUNDE_ID,
BSM_ID,
DATUM,
GEDRUCKT,
BEMERKUNG,
BENUTZER,
GESPEICHERT,
BKUNDE_MASKENKEY,
BKUNDE_BADR_NAME,
BKUNDE_BADR_BEZ,
BKUNDE_BADR_ABTEILUNG,
BKUNDE_BADR_STRASSE,
BKUNDE_BADR_BPLZ_MASKENKEY,
BKUNDE_BADR_BPLZ_ORT,
BSM_MASKENKEY,
BSM_NAME)
AS
SELECT
A.ID,
A.MASKENKEY,
A.BKUNDE_ID,
A.BSM_ID,
A.DATUM,
A.GEDRUCKT,
A.BEMERKUNG,
A.BENUTZER,
A.GESPEICHERT,
B.MASKENKEY,
C.NAME,
C.BEZ,
C.ABTEILUNG,
C.STRASSE,
D.MASKENKEY,
D.ORT,
E.MASKENKEY,
E.NAME
FROM BAVERP A
LEFT OUTER JOIN BKUNDE B ON A.BKUNDE_ID = B.ID
LEFT OUTER JOIN BADR C ON B.BADR_ID_ADRNR = C.ID
LEFT OUTER JOIN BPLZ D ON C.BPLZ_ID_LANDPLZ = D.ID
LEFT OUTER JOIN BSM E ON A.BSM_ID = E.ID
;
end
^
set term;^
Gruß
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Schau mal oben in der Icon-Leiste direkt über dem Texteditor-bereich im Script Executive. Da gibt es neben der Datenbankauswahl noch ein kleines Kästchen "Use Current Connect", welches aktiviert sein muß.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
festus01
Beiträge: 515
Registriert: Di Okt 19, 2004 5:45 am
Wohnort: Diepholz

Beitrag von festus01 »

Hallo Franja,
Fanja hat geschrieben:

Code: Alles auswählen

Script executed with errors!

Code: Alles auswählen

Linie 48 cannot perform operation--DB is not open.
ich könnte noch das Handbuch für IBExpert empfehlen, das im Downloadbereich von IBExpert als PDF zur Verfügung steht :wink:
MfG

KDP

----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

@festus01:
mein Name ist Fanja, ohne "R", oder meinst du Franjo - das ist aber ein Mann und noch nicht mal ein Ehrenhafter!
Ich habe mir aber deinen Rat zu HErzen genommen und mir die IBExpert-Doku besorgt. Diese ist allerdings sehr allgemein gehalten.
@miboe:
Use current connect erzeugt folgenden Fehler: Linie 48 Invalide Token. Dynamic SQL Error. SQL error code = -104. token unknown - line46, char 1. end. Ich steh vor einem Rätsel :?
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

miboe hat geschrieben:@Geri: Die Frage nach dem Tool ging an Fanja, um zu wissen, wie man helfen kann ... aber Urlaub ist auch mal keine schlechte Idee :wink:
@Michael: Gestern hatte ich nach mehreren Stunden im IBExpert zum einen Dein Posting falsch verstanden und zum anderen noch nicht mal mehr genug Power, um mein Posting zu überprüfen. (Du bist hier schließlich der Forenkönig.) Deshalb der beschämte Rückzieher ohne nochmal zu kontrollieren. Heute würde ich sagen, ich habe keine falsche Info an Fanja weitergegeben. Ich denke, der Urlaub ist wirklich nötig. 8)

@Fanja: Für mich ist hier das END zuviel :wink:

Gruß
Geri12
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

HI Geri,
das habe ich mir auch gedacht und es einfach mal weggelassen
Fehlermeldung:

Code: Alles auswählen

Column does not belong to reference table. Dynamic SQL error code=-206. Column unknown A.BEMERKUNG. At line 28 column3.
Gut habe ich das Feld Bemerkung nicht berücksichtigt, also A.BEMERKUNG raus.
Fehlermeldung:

Code: Alles auswählen

This operation is not defined for system tables. Dynamic SQL error. Error code=-607. Invalid command. number of columns does not match.
Ich glaube ich fang am Besten noch mal von vorne an.

edit:
So, das Feld BEMERKUNG ist in der Tabelle, :? :? :? :? :?
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

Hallo Fanja,
dann vielleicht erst mal das SELECT-Statement prüfen, bevor Du weiterarbeitest: den Abschnitt zwischen SELECT bis inkl. dem letzten JOIN kopieren und in den SQL-Editor einfügen. Dort mit [Ausführen (F9)] durchlaufen lassen und korrigieren, bis keine Fehler mehr auftreten ...

Gruß
Geri12

P.S. bzgl. der COLUMNS-Fehlermeldung siehe mein Posting oben
Fanja
Beiträge: 20
Registriert: Mo Jun 30, 2008 12:57 pm

Beitrag von Fanja »

hi,
es sind keine Fehler aufgetreten, glaube ich zumindest. Im Grid View wird mir eine Zeile mit allen Feldern angezeigt. Überall steht NULL.

Code: Alles auswählen

0 records fetched
heißt das er findet keine Datensätze?
Die Anzahl der Listenelemente stimmt überein, Quellcode habe ich ja gepostet.
Aber klasse dieser SQL editor, so hat man schon mal eine Vorschau für das was man plant.
Problem noch nicht gelöst
Antworten