Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Parameter für ein ADOCommand

58 views
Skip to first unread message

Michael Broede

unread,
Aug 20, 2001, 4:31:42 AM8/20/01
to
Hi,

wie erzeugt bzw. übergibt man vorschriftsmäßig Parameter an ein
ADOCommand-Objekt. Hier ein Beispiel wie es nicht funktioniert:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
iRowsAffected: integer;
begin
ADOCommand1.CommandText :=
'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
ADOCommand1.CommandType := cmdText;
ADOCommand1.Parameters.CreateParameter('ArtikelName',
ftString, pdInput, 10, 'abc');
ADOCommand1.Execute(iRowsAffected, null);
Edit1.Text := IntToStr(iRowsAffected);
end;

Und auch so gehts nicht:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
iRowsAffected: integer;
p: TParameter;
begin
ADOCommand1.CommandText :=
'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
ADOCommand1.CommandType := cmdText;
p := ADOCommand1.Parameters.AddParameter;
p.Value := 'abc';
p.DataType := ftString;
p.Direction := pdInput;
ADOCommand1.Execute(iRowsAffected, null);
Edit1.Text := IntToStr(iRowsAffected);
end;

Weitere Versionen hätte ich noch.
Und es wird auch stets ein neuer Datensatz in die Tabelle eingefügt. Nur
der Parameter bleibt ohne Auswirkungen, das entsprechende Feld in der
Datenbank ("Artikelname") ist leer.
Kann jemand helfen?

TIA

Michael

Steve Rasch

unread,
Aug 20, 2001, 6:03:27 AM8/20/01
to
Hallo,
On Mon, 20 Aug 2001 10:31:42 +0200, Michael Broede
<"mbr(nospam)"@gecko.de> wrote:

> Hi,
>
> wie erzeugt bzw. uebergibt man vorschriftsmaessig Parameter an ein


> ADOCommand-Objekt. Hier ein Beispiel wie es nicht funktioniert:
>
> procedure TForm1.BitBtn1Click(Sender: TObject);
> var
> iRowsAffected: integer;
> begin
> ADOCommand1.CommandText :=
> 'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
> ADOCommand1.CommandType := cmdText;

ADOCommand1.Parameters.ParamByName('ArtikelName').Value := 'abc';
// ADOCommand1.Parameters.CreateParameter('ArtikelName',
// ftString, pdInput, 10, 'abc');

> ADOCommand1.Execute(iRowsAffected, null);
> Edit1.Text := IntToStr(iRowsAffected);
> end;

Sollte funktionieren...

HTH,
Steve

--
Meine Nachrichten sind lesbar gestaltet. Ich bin für die Unzulänglichkeiten
Ihres Newsreaders nicht verantwortlich. [Lesnar in einem HTML-Posting]

Michael Broede

unread,
Aug 20, 2001, 6:27:21 AM8/20/01
to
Hi,

Steve Rasch wrote:

> > begin
> > ADOCommand1.CommandText :=
> > 'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
> > ADOCommand1.CommandType := cmdText;
>
> ADOCommand1.Parameters.ParamByName('ArtikelName').Value := 'abc';
> // ADOCommand1.Parameters.CreateParameter('ArtikelName',
> // ftString, pdInput, 10, 'abc');
>
> > ADOCommand1.Execute(iRowsAffected, null);
> > Edit1.Text := IntToStr(iRowsAffected);
> > end;
>
> Sollte funktionieren...
>

Das heißt also:
...


begin
ADOCommand1.CommandText :=
'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
ADOCommand1.CommandType := cmdText;
ADOCommand1.Parameters.ParamByName('ArtikelName').Value := 'abc';

ADOCommand1.Execute(iRowsAffected, null);
Edit1.Text := IntToStr(iRowsAffected);
end;

Funktioniert net.
Dies war auch eine meiner o.g. Varianten.
Datensatz wird zwar eingefügt, Artikelname bleibt aber leer.

Ohne Parameter gehts übrigens.
Also etwa so:
...
begin
ADOCommand1.CommandText :=
'INSERT INTO Artikel (Artikelname) VALUES ("ArtikelName")';
ADOCommand1.CommandType := cmdText;


ADOCommand1.Execute(iRowsAffected, null);
Edit1.Text := IntToStr(iRowsAffected);
end;

Jetzt gibts jetzt einen neuen Artikeldatensatz mit dem Artikelnamen
"ArtikelName".
<Grübel>

Michael

Steve Rasch

unread,
Aug 20, 2001, 7:18:04 AM8/20/01
to
Hallo,

On Mon, 20 Aug 2001 12:27:21 +0200, Michael Broede
<"mbr(nospam)"@gecko.de> wrote:
> begin
> ADOCommand1.CommandText :=
> 'INSERT INTO Artikel (Artikelname) VALUES (:ArtikelName)';
> ADOCommand1.CommandType := cmdText;
> ADOCommand1.Parameters.ParamByName('ArtikelName').Value := 'abc';
> ADOCommand1.Execute(iRowsAffected, null);
> Edit1.Text := IntToStr(iRowsAffected);
> end;

So mache ich es immer, und bei mir funktioniert es...
Was bedeutet "Null" bei Execute gleich nochmal?
ev. "AsString" testen...

Bye,
Steve

--
Bad command. Bad, bad command! Sit! Stay! Staaay..

Michael Broede

unread,
Aug 20, 2001, 8:00:33 AM8/20/01
to
Hi,

Steve Rasch wrote:

> So mache ich es immer, und bei mir funktioniert es...
> Was bedeutet "Null" bei Execute gleich nochmal?

Es gibt eine dreifach überladene Version von Execute. Die, die auch
"RowsAffected" wiedergibt, hat als zweiten Parameter noch einen
OleVariant "Parameters". Hierbei handelt es sich um ein variantes Array,
das ebenso zur Parameterübergabe genutzt werden kann. Es ermöglicht
jedoch nur Input-Parameter. Ich will ggf. auch mal einen
Output-Parameter einer StoredProc auswerten. Kommt also nicht in Frage
(obwohl es funktioniert!).

> ev. "AsString" testen...

Wie?
Ich erinnere mich, daß ich beim *Lesen* eines Parameters .AsString
angeben kann, aber beim Setzen?
Dies geht doch nur über die DataType-Zuweisung entweder beim Create,
etwa wie hier

... Parameters.CreateParameter('Artikelname', ftString, ...);

oder am expliziten Parameter, etwa wie hier

p := TParameter.Create(ADOCommand1.Parameters);


p.Value := 'abc';
p.DataType := ftString;
p.Direction := pdInput;

...

Oder?

Wohl gemerkt, alles im ADO-Umfeld!

Übrigens: Ich verwende derzeit zum Test sowohl eine
MS-Acces-Datenbankdatei als auch eine MS-SQL-Server-Tabelle. Bei beiden
der gleiche Mißerfolg. Kann das sein? Irgendwo mache ich doch was
falsch.

Ich habe das alles auch schon ohne Coding ausprobiert. Also alle Daten
für Connection- und Command-Objekt sauber in den OE eingetragen.
Inklusive Parameter! Mit Wert, Datentyp usw.
Immer wieder das Gleiche: Satz wird eingefügt, ohne Berücksichtigung des
Parameterwertes.
<grübel, grübel>

Michael

--
D5 Enterprise (Update Pack 1, ADOExpress Update2)
NT4.0 SP5
ADO 2.6

Robert Wachtel

unread,
Aug 20, 2001, 10:51:22 AM8/20/01
to
Hallo Michael!

"Michael Broede" <"mbr(nospam)"@gecko.de> schrieb im Newsbeitrag
news:3B80FBE1...@gecko.de...
> [...] Immer wieder das Gleiche: Satz wird eingefügt, ohne
> Berücksichtigung des Parameterwertes.

Nur eine Vermutung: ist TADODataSet.ParamCheck = true?

Grüße aus Köln

Robby


Michael Broede

unread,
Aug 21, 2001, 3:08:07 AM8/21/01
to
Hi,

Robert Wachtel wrote:

>
> Nur eine Vermutung: ist TADODataSet.ParamCheck = true?
>

Ja

0 new messages