[Delphi] Parameterized query geeft foutmelding

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 19:34

Tomatoman

Fulltime prutser

Topicstarter
Via een TADOCommand component stuur ik het volgende commando naar een Access database:
SQL:
1
ALTER DATABASE PASSWORD nieuw oud
Prima, het database-wachtwoord wordt netjes veranderd van 'oud' naar 'nieuw'. Ook met rechte haken om de wachtwoorden heen werkt het. Dit heeft als voordeel dat je ook een leeg wachtwoord kunt gebruiken, bijvoorbeeld om het wachtwoord te wissen:
SQL:
1
ALTER DATABASE PASSWORD [] [oud]

Nu hetzelfde scenario met dezelfde component, maar met een parameterized query:
SQL:
1
ALTER DATABASE PASSWORD :NewPassword :OldPassword

Delphi:
1
2
3
4
5
6
procedure TMainForm.Button1Click(Sender: TObject);
begin
  DataMod.CmdChangeDBPassword.Parameters[0].Value := 'nieuw';
  DataMod.CmdChangeDBPassword.Parameters[1].Value := 'oud';
  DataMod.CmdChangeDBPassword.Execute;
end;
Resultaat:

Afbeeldingslocatie: http://img210.echo.cx/img210/1233/sqlfout2px.jpg

Ook als ik de wachtwoorden tussen rechte haken [ en ] zet, bakt de parameterized query er niets van. Zelfde resultaat bij de wachtwoorden tussen enkele aanhalingstekens ' of dubbele aanhalingstekens ": de syntaxis wordt ongeldig genoemd. Ander testje:
SQL:
1
ALTER DATABASE PASSWORD [:NewPassword] [:OldPassword]

Nu verandert Delphi automatisch de namen van de parameters naar NewPassword] en OldPassword]. Als je de namen netjes terugverandert naar NewPassword en OldPassword werkt de query nog steeds niet, telkens komt dezelfde foutmelding terug.

Ik heb inmiddels ongeveer alles geprobeerd wat ik kan verzinnen. Heeft iemand een idee hoe ik de query toch parameterized kan maken?

Een goede grap mag vrienden kosten.


Verwijderd

Delphi kan niet overal zomaar parameters neerkwakken.

Een query als
code:
1
SELECT :parameter, a,b,c from table
werkt bijvoorbeeld ook niet. De beste oplossing is ouderwets de wachtwoorden in de SQL string te plaatsen. Zo erg is dat waarschijnlijk niet. Een alter password actie is hopelijk niet iets waarbij optimalisaties van belang zijn. :)

[ Voor 4% gewijzigd door Verwijderd op 18-06-2005 16:56 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 19:34

Tomatoman

Fulltime prutser

Topicstarter
Hé, dat wist ik helemaal niet. Ik begon al aan mezelf te twijfelen. Het ging me niet om een eventuele optimalisatie, maar ik vond het gewoon vreemd dat iets wat normaal altijd werkt opeens een foutmelding gaf. Gewoon de SQL string zelf maar maken dan.

Een goede grap mag vrienden kosten.


  • whoami
  • Registratie: December 2000
  • Laatst online: 06-05 15:36
Verwijderd schreef op zaterdag 18 juni 2005 @ 16:54:
Delphi kan niet overal zomaar parameters neerkwakken.

Een query als
code:
1
SELECT :parameter, a,b,c from table
werkt bijvoorbeeld ook niet.
Dit werkt bij de meeste (alle ? ) talen trouwens niet.

https://fgheysels.github.io/


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 19:34

Tomatoman

Fulltime prutser

Topicstarter
Logisch dat die geparametriseerde SELECT statement niet werkt, want een compiler kan geen veldinformatie voor de parameter genereren. Bij mijn ALTER DATABASE statement is dat geen probleem, vandaar dat ik zo verbaasd was dat ik die obscure foutmelding kreeg.

Een goede grap mag vrienden kosten.