Zitat von
shmia:
[...] Deine Konstruktion mit IF ist so höchstens als Stored Procedure zulässig. [...]
Ich denk nicht...
Schleifen, If-Abfragen, Case-Anweisungen, aufruf von Proceduren, verwendung von Variablen..... Kann man auch so verwenden und nicht nur in Stored Procedure...
Das ist ein Punkt, warum ich lieber einen
MSSQL nehm als so ein
MySQL Dinge... Man ist einfach flexiler...
Zitat von
dataspider:
IMHO muss man die Parameter nicht erzeugen. Ein Prepare erzeugt diese automatisch.
Korrekt
Ich denke ich hab den Fehler...
ADOQry.Parameters.ParamValues['Benutzer']:='Test2';
Du verwendest mehr als einmal den Parameter!
Wahrscheinlich wird er mehrmals hinzugefügt und nur einer mit einem Wert bespielt...
Entweder du läufst einfach über alle Parameter und vergleichst sie mit dem Namen und weist dennen dann den entsprechenden Wert zu...
Example:
Delphi-Quellcode:
Procedure ResolveParameter(
Const Parameter: TParameter );
Begin
If SameText( Parameter.
Name, '
Benutzer' )
Then Parameter.Value := '
TestUser'
Else If SameText( Parameter.
Name, '
BenutzerID' )
Then Parameter.Value := 325
Else If SameText( Parameter.
Name, '
GruppenId' )
Then Parameter.Value := 7667
Else Raise Exception.Create( '
Unknown parameter: "' + Parameter.
Name + '
"' );
End;
Procedure ResolveParameters(
Const Parameters: TParameters )
Var i: Integer;
Begin
For i := 0
To Parameters.Count - 1
Do ResolveParameter( Parameters[ i ] );
End;
Procedure SqlMachwas;
Var Qry: TADOQuery;
Begin
Qry := TADOQuery.Create(
Nil );
Try
Qry.Connection :=
{ Eine Connection };
Qry.Prepared := True;
Qry.SQL.Text := '
Select * From TabelleBenutzer '#13#10
+ '
Where User = :Benutzer '#13#10
+ '
Or Id = :BenutzerId '#13#10
+ '
Or Group = :GruppenId ';
ResolveParameters( Qry.Parameters );
Qry.Open;
{ ... }
Finally
FreeAndNil( Qry );
End;
End;
oder du machst sowas:
Code:
Declare @Benutzer Varchar( 255 )
Set @Benutzer = :Benutzer
/*
/* Dein
SQL Code :Benutzer dann ersetzt mit @Benutzer */
If NOT EXISTS( SELECT * FROM ADMN WHERE ADKNN>''USRRG'' AND ADDAT=@Benutzer )
INSERT ADMN VALUES(''USRRG1'',@Benutzer )
*/
Delphitechnisch dann pie mal daumen so:
Delphi-Quellcode:
Const
cSQL = 'Declare @Benutzer Varchar( 255 ) '#13#10
+ 'Set @Benutzer = :Benutzer '#13#10
+ 'If NOT EXISTS( SELECT * FROM ADMN WHERE ADKNN>''USRRG'' AND ADDAT=@Benutzer ) '#13#10
+ 'INSERT ADMN VALUES(''USRRG1'',@Benutzer ) ';
{ * * * }
ADOQry.Close;
ADOQry.SQL.Clear;
ADOQry.SQL.Text := cSQL
ADOQry.Prepared := True; // erstellt Parameter
ADOQry.Parameters.ParamValues[ 'Benutzer' ]:='Test2';
ADOQry.ExecSQL;
Ich weiss jetzt auch nicht, ob die
Exception Serverseitig oder Clientseitig kommt, wenn sie Serverseitig kommt, hilft dir dein Freund, und zwar ms.
SQL Server Profiler, sofern du die entsprechenden Berechtigungen auf die
DB hast..
Bye Christian