Autor Beitrag
sendman
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 15.01.05 22:38 
Schönen guten Abend zusammen,

ich habe meine bisher gut funktionierende DB auf das Datenmodell moit ADO-Komponenten umgestellt (bisher einzelne DataSet-Verbindungen). Da ich zwei Formularen die Werte mittels Parameter übergebe, treten bei mir nun folgende Probleme auf:

ausblenden Delphi-Quelltext
1:
DM.AqryUserAnzeigen.ParamByName('varUser').AsInteger := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;					


Fehlermeldung: Undefinierter Bezeichner: 'ParamByName'

Da ich im Forum schon eineige Beiträge zu diesem Fehler gefunde habe, habe ich meinen Code auf den empfohlenen umgestellt:

ausblenden Delphi-Quelltext
1:
DM.AqryUserAnzeigen.ParamByName[0].AsValue := 'varUser';					


Doch leider erhalte ich hierbei die gleiche Fehler-Meldung.

Ist hier mein Code für die Datenübergabe schuld, oder habe ich den Parameter in dem Datenmodell falsch definiert?

Für Eure Hilfe danke ich Euch im Voraus

Gruß Stefan

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Sa 15.01.05 22:49 
hallo sendman!

zeig mal die SQL-abfrage, welche du mit parametern füllen willst, vielleicht liegt dort der hund begraben...

oder willst du einfach felder in der tabelle befüllen, dann solltest du:

ausblenden Delphi-Quelltext
1:
DM.AqryUserAnzeigen.FieldByName('varUser').AsInteger:= DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;					

verwenden.

Zitat:

habe ich meinen Code auf den empfohlenen umgestellt:
DM.AqryUserAnzeigen.ParamByName[0].AsValue := 'varUser';


wer empfiehlt denn sowas :?:

ein indiziertes ParamByName kann sehr schnell ins auge gehen, sobald du die reihenfolge der parameter änderst,
und da du den feldtypen kennst rate ich von der varianten zuweisung 'asValue' ab, da die dbEngine bei jedem eintrag die variable ins richtige format konvertieren muss. falls du mal mit grossen datenmengen hantieren musst, stellt dieser vorgang unweigerlich eine bremse dar...

mfg, stefan
sendman Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 16.01.05 00:21 
Hallo grayfox,

folgendem Beitrag entnahm ich die Empfehlung:
Suche in: Delphi-Forum, Delphi-Library ADOQUERY KANN NICHT MIT PARAMETERN ARBEITEN ?

Zu meinem Problem:
mit dieser Abfrage suche ich in dem Form "frmUserSuche" einen User, den ich über den Primärschlüssel "TUSRNR" erkenne:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    DM.AqryUserSuchen.Close;
    DM.AqryUserSuchen.SQL.Clear;
    DM.AqryUserSuchen.SQL.Add('SELECT TUSRNName, TUSRVName, TUSRUserID, TUSRTelD, TUSRNR FROM TUSR');
    DM.AqryUserSuchen.SQL.Add('WHERE (TUSRNName like "' + Input_NName.Text + '%")');
    DM.AqryUserSuchen.SQL.Add('ORDER BY TUSRNName');
    DM.AqryUserSuchen.Open;
    s:= IntToStr(DM.AqryUserSuchen.RecordCOUNT);
    StatusBar1.SimpleText := s + (' Datensatz / Datensätze gefunden');
    varUser := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;


Nach Click auf einen Button wechseln ich in die Detailansicht "frmUserAnzeigen", und der vorher gesuchte User wird mittels der TUSRNR, bzw. varUser aufgerufen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
DM.AqryUserAnzeigen.Close;
        DM.AqryUserAnzeigen.SQL.Clear;
        DM.AqryUserAnzeigen.SQL.Add('SELECT * FROM TUSR WHERE TUSRNR LIKE :varUser');
        DM.AqryUserAnzeigen.ParamByName('varUser').AsInteger := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;
        DM.AqryUserAnzeigen.Open;
        Label2.Caption := ('     Anzeigen von Benutzer-Daten von ' + DM.AqryUserAnzeigen.FieldByName('TUSRVName').AsString + ' ' + DM.AqryUserAnzeigen.FieldByName('TUSRNName').AsString);


Ich habe auf dem Datemmodell DM für beide SQL-Abfragen eine eigene TADOQuery-Komp und TDataSource-Komp angelegt. In beiden ist auch die Variable "varUser" deklariert.

Ich hoffe, diese Angaben nützen Dir etwas.

Gruß Stefan

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: So 16.01.05 09:23 
hallo stefan!

ausblenden Delphi-Quelltext
1:
2:
  DM.AqryUserAnzeigen.SQL.Add('SELECT * FROM TUSR WHERE TUSRNR <span style="font-weight: bold">LIKE</span> :varUser');
  DM.AqryUserAnzeigen.ParamByName('varUser').<span style="font-weight: bold">AsInteger</span> := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;


integer & like vertragen sich nicht...
nachdem du den UserId kennst, reicht ja ein vergleich mit = vollkommen.

mich würde jetzt noch interessieren, wie dein prog reagiert, wenn im ersten teil deines quellcodes kein user gefunden bzw wenn mehrere gefunden werden...

mfg, stefan

ps: langsam gewinnen die stefans im forum mengenmäßig die oberhand ;)
sendman Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 16.01.05 12:28 
Hallo Stefan,

stimmt, die LIKE-Funktion macht bei der Übergabe wirklich keinen Sinn, da ich die ID ja schon "gefunden" habe. Ich habe meine Code nun umgeschrieben, und siehe da:

Es funktioniert immer noch nicht :(

Habe ich in meinem Datenmodell evt. einen Denkfehler gemacht, oder warum folgt immer noch die Fehlermeldung: Undefinierter Bezeichner "ParamByName"???

ausblenden Delphi-Quelltext
1:
2:
DM.AqryUserAnzeigen.SQL.Add('SELECT * FROM TUSR WHERE TUSRNR = :varUser');
DM.AqryUserAnzeigen.ParamByName('varUser').AsInteger := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;


Habe ich die Var "varUser" richtig deklariert, oder liegt hier evt. der Fehler.

Zu Deiner Frage: wenn ich als Suchergebnis mehr Treffer habe, wähle ich ihn in dem DBGrid aus, und diese ID aus dieser Zeile wird in das Anzeige-Form übergeben. Bei keinem Treffer drückt (hoffentlich) keiner den Knopf für eine Einzelsatz-Anzeige.

Gruß Stefan

PS: Ich kenne leider noch nicht soviele im Forum
sendman Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 17.01.05 21:04 
Hallo zusammen,

leider habe ich immer noch das Problem, das bei einer ADO-Connection die Parameter-Übergabe mit ParamByName nicht richtig funktioniert.

ausblenden Delphi-Quelltext
1:
2:
DM.AqryUserAnzeigen.SQL.Add('SELECT * FROM TUSR WHERE TUSRNR = :varUser');  
DM.AqryUserAnzeigen.ParamByName('varUser').AsInteger := DM.AqryUserSuchen.FieldByName('TUSRNR').AsInteger;


Frage an die Fachleute: Kann ADO mit der Funktion Parameter hier nicht mehr leisten, oder ist es ratsam, einen SQL-Server auf eine andere Art anzusprechen (ohne BDE)?

Danke für Eure Hilfe

Gruß Stefan