Wie benutze ich ProcInputNameID vom frmauflist2?

Alles, was den Programmierer beschäftigt

Moderator: SYNERPY

Antworten
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Wie benutze ich ProcInputNameID vom frmauflist2?

Beitrag von 2mad »

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
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Re: Wie benutze ich ProcInputNameID vom frmauflist2?

Beitrag von 2mad »

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
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Es muss immer ein ID-Feld in dem SELECT des Fenster geben. Also genau das Feld "ID", notfalls als 'SELECT A.BSA_ID AS "ID"'. Das wird als Quelle-ID übergeben. Behebt das schon den Fehler?
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Leider nicht... ich habe ein SELECT * gemacht und ID wird mit zurückgegeben.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Dann bitte mal den ganzen ButtonErfassungsClick posten.
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo,

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;
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

:?: :?: :?:

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;
also eigentlich nur den SQL-Text geändert, weil ich keine MEINETABELLE habe, und den letzten Kommentar gelöscht.
- 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
und das Ganze funktioniert...

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.
Antworten