Hallo!
Ich habe da mal wieder eine Frage:
Ich habe eine Maske gebaut, in der man über einen Button eine Auflistung von Datensätzen (per Instanz von frmauflist2) angezeigt bekommt.
Allerdings bekomme ich beim klick auf den Button bevor sich das Auflistfenster öffnet folgende Meldung:
------------------------------------------------------------------------
ParamByName für IB_StoredProc ist falsch
StoredProc-Name: StP_Uebername
IB-PROCEDURE-Name: P_MEINE_ZUWEISUNG
Name von ParamByName: ZIEL_ID_LINKKEY
SQL-Anweisung: EXECUTE PROCEDURE P_MEINE_ZUWEISUNG
Aufruf erfolgte von: BUTTON_2OnClick
IB-Exception: Meldung von der AVERP-Datenbank
Errcode: 335544569
ErrorMessage: ISC Fehlernummer:335544569
ISC Fehlermeldung:
Dynamic SQL Error
parameter mismatch for procedure P_MEINE_ZUWEISUNG
STATEMENT:
TIB_StoredProc: "<TApplication>.frmAuflist2.StP_Uebername."
SQLMessage: EXECUTE PROCEDURE P_MEINE_ZUWEISUNG
SQLCODE: -902
------------------------------------------------------------------------
Die Prozedur habe ich mit 2 Inputparametern angelegt: QUELLE_ID und ZIEL_ID_LINKKEY. Muss ich evtl. noch Zuweisungen in irgendwelchen Tabellen machen, damit das klappt?
Die Prozedur sieht folgendermaßen aus:
------------------------------------------------------------------------
begin
IF ((QUELLE_ID IS NULL) OR (ZIEL_ID_LINKKEY IS NULL) OR
(QUELLE_ID < 1) OR (ZIEL_ID_LINKKEY < 1)) THEN
EXCEPTION PROCPARAMETER;
UPDATE MEINETABELLE SET ZIEL_ID = :ZIEL_ID_LINKKEY WHERE ID = :QUELLE_ID;
end
------------------------------------------------------------------------
Woher weiß frmauflist2 denn eigentlich WAS er als QUELLE_ID übergibt? Ist es das erste Feld aus der Q_Erfassung?
Danke und Gruß
2mad
Wie benutze ich ProcInputNameID vom frmauflist2?
Moderator: SYNERPY
-
- Beiträge: 79
- Registriert: Fr Apr 15, 2005 8:52 am
-
- Beiträge: 79
- Registriert: Fr Apr 15, 2005 8:52 am
Re: Wie benutze ich ProcInputNameID vom frmauflist2?
Achso, und was macht O_Auflist.bQueryErzeugen genau?
2mad hat geschrieben:Hallo!
Ich habe da mal wieder eine Frage:
Ich habe eine Maske gebaut, in der man über einen Button eine Auflistung von Datensätzen (per Instanz von frmauflist2) angezeigt bekommt.
Allerdings bekomme ich beim klick auf den Button bevor sich das Auflistfenster öffnet folgende Meldung:
------------------------------------------------------------------------
ParamByName für IB_StoredProc ist falsch
StoredProc-Name: StP_Uebername
IB-PROCEDURE-Name: P_MEINE_ZUWEISUNG
Name von ParamByName: ZIEL_ID_LINKKEY
SQL-Anweisung: EXECUTE PROCEDURE P_MEINE_ZUWEISUNG
Aufruf erfolgte von: BUTTON_2OnClick
IB-Exception: Meldung von der AVERP-Datenbank
Errcode: 335544569
ErrorMessage: ISC Fehlernummer:335544569
ISC Fehlermeldung:
Dynamic SQL Error
parameter mismatch for procedure P_MEINE_ZUWEISUNG
STATEMENT:
TIB_StoredProc: "<TApplication>.frmAuflist2.StP_Uebername."
SQLMessage: EXECUTE PROCEDURE P_MEINE_ZUWEISUNG
SQLCODE: -902
------------------------------------------------------------------------
Die Prozedur habe ich mit 2 Inputparametern angelegt: QUELLE_ID und ZIEL_ID_LINKKEY. Muss ich evtl. noch Zuweisungen in irgendwelchen Tabellen machen, damit das klappt?
Die Prozedur sieht folgendermaßen aus:
------------------------------------------------------------------------
begin
IF ((QUELLE_ID IS NULL) OR (ZIEL_ID_LINKKEY IS NULL) OR
(QUELLE_ID < 1) OR (ZIEL_ID_LINKKEY < 1)) THEN
EXCEPTION PROCPARAMETER;
UPDATE MEINETABELLE SET ZIEL_ID = :ZIEL_ID_LINKKEY WHERE ID = :QUELLE_ID;
end
------------------------------------------------------------------------
Woher weiß frmauflist2 denn eigentlich WAS er als QUELLE_ID übergibt? Ist es das erste Feld aus der Q_Erfassung?
Danke und Gruß
2mad
-
- Beiträge: 79
- Registriert: Fr Apr 15, 2005 8:52 am
Hallo,
hier der Code
hier der Code
Code: Alles auswählen
begin
iMY_ID := E_ID.Field.AsInteger;
// Umschalten in Anzeigemodus
if ((iMY_ID > 0) and ((q_1.state = dssInsert) or (q_1.state = dssEdit))) then
q_1.post;
// Lieferscheinkopf prüfen
if (iMY_ID = 0) then
begin
Messagebox('Gültige Lieferscheinnummer (Lieferscheinkopf) fehlt !','Erfassung Lieferscheinpositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Anzeigemodus prüfen
if ((q_1.state = dssInsert) or (q_1.state = dssEdit)) then
begin
Messagebox('Nur im Anzeigemodus möglich !','Erfassung Lieferscheinpositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Erfassungsfenster prüfen
O_Auflist := Application.FindComponent('frmauflist2');
MyQuery := FrmData.Universal;
if O_Auflist = 0 then
begin
bPascalScriptOK := false;
MessageBox('Konnte Erfassungsfenster nicht finden','ACHTUNG',0);
Goto 1;
end;
O_Auflist.Caption := 'Positionserfassung';
// Auflisfenster generieren
O_Auflist.bQueryErzeugen := False;
O_Auflist.MultiselectIDFeld := 'ID';
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_MEINE_ZUWEISUNG';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', iMY_ID);
O_Auflist.Q_Erfassung.Sql.Text := 'SELECT * FROM MEINETABELLE WHERE ZIEL_ID IS NULL';
// O_Auflist.Q_Erfassung.ParamByName('MY_ID', iMY_ID);
1:
End;
-
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Also, ich habe Folgendes gemacht:
- Button auf den Lieferscheinkopf (FRMV_BRLS).
- Folgenden Code hinterlegt:
Code: Alles auswählen
begin
iMY_ID := E_ID.Field.AsInteger;
// Umschalten in Anzeigemodus
if ((iMY_ID > 0) and ((q_1.state = dssInsert) or (q_1.state = dssEdit))) then
q_1.post;
// Lieferscheinkopf prüfen
if (iMY_ID = 0) then
begin
Messagebox('Gültige Lieferscheinnummer (Lieferscheinkopf) fehlt !','Erfassung Lieferscheinpositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Anzeigemodus prüfen
if ((q_1.state = dssInsert) or (q_1.state = dssEdit)) then
begin
Messagebox('Nur im Anzeigemodus möglich !','Erfassung Lieferscheinpositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Erfassungsfenster prüfen
O_Auflist := Application.FindComponent('frmauflist2');
MyQuery := FrmData.Universal;
if O_Auflist = 0 then
begin
bPascalScriptOK := false;
MessageBox('Konnte Erfassungsfenster nicht finden','ACHTUNG',0);
Goto 1;
end;
O_Auflist.Caption := 'Positionserfassung';
// Auflisfenster generieren
O_Auflist.bQueryErzeugen := False;
O_Auflist.MultiselectIDFeld := 'ID';
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_MEINE_ZUWEISUNG';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', iMY_ID);
O_Auflist.Q_Erfassung.Sql.Text := 'SELECT * FROM BSA WHERE ID IS NOT NULL';
1:
End;
- Prozedur angelegt:
Code: Alles auswählen
create procedure P_MEINE_ZUWEISUNG
(Quelle_id INTEGER,
ziel_id_linkkey INTEGER )
as
begin
IF ((QUELLE_ID IS NULL) OR (ZIEL_ID_LINKKEY IS NULL) OR
(QUELLE_ID < 1) OR (ZIEL_ID_LINKKEY < 1)) THEN
EXCEPTION PROCPARAMETER;
UPDATE BSA SET ID = ID WHERE ID = :QUELLE_ID;
end
Schreibfehler bei der Prozedur schließe ich auch aus, da sonst das Kompilieren nicht möglich wäre.
Vielleicht uns die Maske, das DDL für Tabelle und Prozedur zukommen lassen. Auch dieser Fehler wird gefunden werden.