Toon posts:

[Delphi] ADOQuery SQL insert

Pagina: 1
Acties:
  • 560 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allen,

Ik probeer via een SQLQuery een record toe te voegen aan een access database. Ik heb hiervoor de onderstaande code geschreven:

code:
1
2
3
4
5
6
7
8
9
10
11
with ADOQuery1 do
    begin
      if active then close;
      SQL.clear;
      Parameters[1].Value := ComputernameEdt.Text; //List index out of bounds
      Parameters[1].Name := 'Computername';
      Parameters[2].Value := UsernameEdt.Text;
      Parameters[2].Name := 'username';
      SQL.Add ('INSERT INTO Table1(Computername, Username) VALUES(:computername,:username)');
    end;
end;


Op een een of andere manier als ik deze code uitvoer krijg bij de eerste regels parameters "List Index out of bounds (0)". Ik weet wat deze foutmelding inhoud maar toch krijg ik hem niet weg. Heeft iemand enig idee wat ik fout doe?

moet ik soms eerst nog andere paameters van sqlquery zetten?

alvast bedankt!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Je spreekt dan ook een parameter aan die er helemaal niet is..... :/

Probeer dit eens:
Delphi:
1
2
3
4
5
6
7
8
9
10
with ADOQuery1 do
    begin
      if active then close;
      SQL.clear;
      SQL.Add ('INSERT INTO Table1(Computername, Username) 
                                       VALUES (:computername, :username)');
      Parameters.ParamByName('computername').Value := ComputernameEdt.Text;
      Parameters.ParamByName('username').Value     := UsernameEdt.Text;
    end;
end;
Binnen Delphi wordt namelijk in een ADO query iets dat vooraf gegaan wordt door een : automatisch als parameter opgemerkt.

[ Voor 5% gewijzigd door OZ-Gump op 14-06-2004 10:41 . Reden: Lay & typo ]

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:48
Eerst je query 'zetten', en dan pas je parameters toewijzen.
Zie OZ-Gump.
Die parameter is er pas als je de SQL query gezet hebt.

https://fgheysels.github.io/


  • SysRq
  • Registratie: December 2001
  • Laatst online: 17:29
OZ-Gump schreef op 14 juni 2004 @ 10:39:
Delphi:
1
2
3
4
5
6
7
8
9
with ADOQuery1 do
    begin
      if active then close;
      SQL.TEXT := 'INSERT INTO Table1(Computername, Username) 
                                       VALUES (:computername, :username)';
      ParamByName('computername').AsString := ComputernameEdt.Text;
      ParamByName('username').AsString     := UsernameEdt.Text;
    end;
end;
En op deze manier is de query nog wat overzichtelijker :)

-


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

@SysRq: nofi, maar je hebt niets aan de query aangepast? En je hebt parameters. weggehaald voor ParamByName, waardoor de code niet meer klopt. Dus voor de TS: die parameters.ParamByname heb je wel nodig, anders werkt het niet.

SysRq, wat is de meerwaarde van jouw post?

[ Voor 3% gewijzigd door OZ-Gump op 14-06-2004 10:48 ]

My personal website


  • SysRq
  • Registratie: December 2001
  • Laatst online: 17:29
:+ oeps, 'tis een ADOQuery... :)

en dan werkt de aanpassing .Value -> .AsString misschien ook niet? (Ik werk zelf eigenlijk nooit met ADOQuery.
en verder:
.clear en .add heb ik aangepast in .text :=

[ Voor 7% gewijzigd door SysRq op 14-06-2004 10:51 ]

-


Verwijderd

Topicstarter
Ik heb nu de onderstaande code geschreven, maar er wordt helemaal geen record toegevoegd aan de database. Wel is het zo dat ik een veld nog niet heb toegewezen. Zou het daar mee te maken hebben, of moet ik eerst nog iets op active stellen of zo?

code:
1
2
3
4
5
6
7
8
9
10
begin
    with ADOQuery1 do
    begin
      if active then close;
      SQL.clear;
      SQL.Add ('INSERT INTO Table1(Computername, Username) VALUES(:computername,:username)');
      Parameters.ParamByName('computername').Value := ComputernameEdt.Text;
      Parameters.ParamByName('username').Value     := UsernameEdt.Text;
    end;
end;

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:20

Creepy

Tactical Espionage Splatterer

SysRq schreef op 14 juni 2004 @ 10:51:
:+ oeps, 'tis een ADOQuery... :)

en dan werkt de aanpassing .Value -> .AsString misschien ook niet? (Ik werk zelf eigenlijk nooit met ADOQuery.
Die werkt prima, en is ook een vooruitgang. Je weet zelf prima wat voor type je parameter is. Maar waarom het de query duidelijker maakt?
en verder:
.clear en .add heb ik aangepast in .text :=
Waarom heb je dat gedaan? Als je een gigantische query hebt lijkt mij het overzichtelijker deze in losse stukken te voeren m.b.v. .Add en niet rechtstreeks de .text aan te spreken.

Edit:

SecurityRisc: Je *ZOU* de help eens kunnen lezen over TTable en TADOTable. Dan HAD je namelijk gelezen dat je je query nog moet laten uitvoeren (.exec).

[ Voor 16% gewijzigd door Creepy op 14-06-2004 10:55 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:48
Je moet je query natuurlijk ook nog uitvoeren....

(En wat bedoel je met, ik heb een veld nog niet toegewezen?)

[ Voor 40% gewijzigd door whoami op 14-06-2004 10:55 ]

https://fgheysels.github.io/


  • SysRq
  • Registratie: December 2001
  • Laatst online: 17:29
Verwijderd schreef op 14 juni 2004 @ 10:52:
Ik heb nu de onderstaande code geschreven, maar er wordt helemaal geen record toegevoegd aan de database. Wel is het zo dat ik een veld nog niet heb toegewezen. Zou het daar mee te maken hebben, of moet ik eerst nog iets op active stellen of zo?
ADOQuery1.ExecSQL toevoegen

\edit

@Creepy: ik bedoelde de code, niet de query

[ Voor 7% gewijzigd door SysRq op 14-06-2004 10:56 ]

-


Verwijderd

Topicstarter
het werkt nu >:)

ik moest er nog ffe een sqlexecute achter zetten

thanks!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:20

Creepy

Tactical Espionage Splatterer

SysRq schreef op 14 juni 2004 @ 10:55:
[...]
@Creepy: ik bedoelde de code, niet de query
Om eerlijk te zijn vindt ik jouw aanpassingen voor de leesbaarheid van de code niks uitmaken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • SysRq
  • Registratie: December 2001
  • Laatst online: 17:29
Creepy schreef op 14 juni 2004 @ 11:51:
[...]

Om eerlijk te zijn vindt ik jouw aanpassingen voor de leesbaarheid van de code niks uitmaken.
Een .value naar een .AsString omzetten vindt jij niet leesbaarder? Nou ja, ieder zijn meug.. ;)

-


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:20

Creepy

Tactical Espionage Splatterer

SysRq schreef op 14 juni 2004 @ 12:03:
[...]


Een .value naar een .AsString omzetten vindt jij niet leesbaarder? Nou ja, ieder zijn meug.. ;)
Leg eens uit wat het leesbaarder maakt in dit geval?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Het werkte, maar nu krijg ik ineens de melding

EOleException with message "Read-only property value was not set

Deze melding komt als ik de Connected Property van de ADOConnection op True probeer te zetten.

Ik heb gezocht op deja, maar kan niet echt iets concreete hierover vinden. Ik kan ook nergens een "read only" property vinden.

weet iemand toevallig wat het probleem hietr is?

  • SysRq
  • Registratie: December 2001
  • Laatst online: 17:29
Als je hetzelfe sql statement nog hebt zijn de parameters in je query nog niet gevuld. Bijv: een "select * from table1" zal wel werken

-

Pagina: 1