Entwickler-Ecke

Datenbanken - Problem mit ParamByName


csigg - Do 21.07.05 09:09
Titel: Problem mit ParamByName
ich hab in meinem onActivate einer unter-Form die Zeile:

Delphi-Quelltext
1:
dmMesse.TDAnwesend.ParamByName('MANR').asString := dbeMAnr.Text;                    

stehn.
Allerdings tritt dabei immer eine Exception auf, EIBClientError Field "MANR" nocht found

Muss ich in meinem DataSet noch speziell was definieren??


jasocul - Do 21.07.05 09:25

Gibt es deiner SQL-Anweisung denn den Parameter "MANR"?


csigg - Do 21.07.05 09:27

Es gibt halt die Spalte MANR, aber in des SQL-Statements des DataSets steht immer *, muss ich es da explizit angeben??


jasocul - Do 21.07.05 09:29

Verwechselst du ParamByName und FieldByName?


Matthias-K - Do 21.07.05 09:30

'select * from tabelle where name = :manr';

edit: dah basch doch glatt de erklärung vergessen,

also das, was hinter dem dopelpunkt steht, kannst du per parambyname deklarieren!
spaltennamen sind da ein wenig unangebracht, und wie ich grad gelesen hab, muss ich jasocul recht geben! du verwechselst da was!


csigg - Do 21.07.05 10:04

OK, wenn ihr meint.
Dann noch mal von vorne.
Ich hab in meinem DataSet Statement drin wie oben mit where manr=:manr .
Und jetzt hätt ich das manr gerne definiert, weil ich einen Trigger erstellt habe, mit

Quelltext
1:
2:
3:
4:
5:
6:
CREATE TRIGGER "DEL_ANWESENHEIT" FOR "ANWESENHEIT" 
ACTIVE BEFORE DELETE POSITION 0
AS
      BEGIN
          DELETE FROM ANWESENHEIT WHERE MANR=OLD.MANR;
      END

Allerdings muss ich ja jetzt noch das MANR definieren, oder??


jasocul - Do 21.07.05 10:12

Der Trigger dürfte damit nichts zu tun haben.
Gib deinem Parameter mal eine ander Bezeichnung als das Tabellenfeld. Ich vermeide sowas grundsätzlich! Daher ist das im Moment nur eine Vermutung, dass es daran liegen könnte.
Aber du hast natürlich Recht, dass der Parameter mit einem Wert belegt werden muss.


csigg - Do 21.07.05 10:15

Sorry, steh grad etwas auf der Leitung.
Wenn ich dem Parameter einen anderen Namen gebe, woher weiss das Programm dann welche spalte gemeint ist??


jasocul - Do 21.07.05 10:34

Zitat:
Ich hab in meinem DataSet Statement drin wie oben mit where manr=:manr .


manr ist die Spalte
und
:manr ist dein Parameter


csigg - Do 21.07.05 10:35

Ah, jetzt, aber dann brauch ich schon wieder das ParamByName, oder??

Also ich hab jetzt :manr in :nummer geändert, kommt aber noch die gleiche Exception, nud dieses mal mit NUMMER not found


jasocul - Do 21.07.05 10:38

Das stimmt.
Zeig doch mal das ganze SQL-Statement.


csigg - Do 21.07.05 10:40

Es sind ja mehrer, in meinem DataSet, das ist das SELECT:

Quelltext
1:
SELECT * FROM Anwesenheit WHERE MANR = :NUMMER ORDER BY DATUM;                    


jasocul - Do 21.07.05 10:44

Folgendes:

Delphi-Quelltext
1:
dmMesse.TDAnwesend.ParamByName('NUMMER').asString := dbeMAnr.Text;                    

getestet?


csigg - Do 21.07.05 10:47

ja, da kommt eben die Meldung NUMMER not found


jasocul - Do 21.07.05 10:52

Mal ne blöde Frage:
Du machst das ParamByName aber bei dem DataSet, wo auch die SQL-Anweisung mit dem Parameter ":NUMMER" steht?


csigg - Do 21.07.05 10:56

ja, genau da.


jasocul - Do 21.07.05 10:57

Dann bin ich im Moment überfragt. Sorry.


csigg - Do 21.07.05 11:01

an was könnte es sonst noch liegen, dass der oben genannte Trigger nicht greift??


BenBE - Do 21.07.05 14:18

Wenn Dein Parameter mehrfach in einer SQL-Statement eingebunden wird, musst Du die Parameter-Werte auch mehrfach angeben (in dem Du selber über alle Params iterierst und die Werte bei allen MANR-Objekten setzt). Hatte mal ein witziges Problem mit einer Abfrage, wo ich einen Parameter mit gleichem Namen an mehreren Stellen einsetzen musste und immernur die erste Instanz gegriffen hat.


csigg - Do 21.07.05 14:27

Also 1. Ich hab ja das Problem das schon beim ersten mal die Exception -siehe oben- kommt.
2. Soll ich jetzt 5x hintereinander den gleichen Befehl schreiben?? *g* Sorry, hab nicht wirklich begriffen wie du das gemeint hast.