[Delphi/ADO] Result terugkrijgen uit een ADOCommand?

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

Acties:
  • 0 Henk 'm!

Anoniem: 85524

Topicstarter
Ik ben nu al uren bezig met zoeken hoe je een waarde (resultset toch? :?) terug krijgt uit een SQL statement maar kan eigenlijk alleen maar dingen vinden over Select * From **** statements....

Delphi:
1
2
3
4
5
lvrID:=Format('SELECT leverancier_ID FROM LEVERANCIER WHERE naam LIKE ''%s''',[inlLeverancier]);
datamoduul.SetQry(lvrID);

insLVR:=Format('INSERT INTO ORDER (leverancier_ID) VALUES (%d)',[strtoint(lvrID)]);
datamoduul.SetQry(insLVR);


Op de eerste regel voer ik dus een selectstatement uit, ik moet uit een combobox inlezen wat de naam is van de leverancier en daarvan uitgaande heb ik de leverancier_ID nodig. Dus zou je zeggen zet deze SQL statement in een command... en hij doet wel wat je wilt.

Verder heb ik de volgende procedure geschreven:

Delphi:
1
2
3
4
5
6
7
8
procedure TDatamoduul.SetQry(SQLstr: string);
begin
  with cmd do
  begin
        cmd.CommandText := SQLstr;
        cmd.Execute;
  end;
end;


Het is dus de bedoeling dat de SQLstatement die in SQLstr staat uitgevoerd word. Maar hoe moet ik de uitkomst uitlezen zeg maar????

en uiteindelijk moet het ook ingevoerd worden.. kan dat dan ook met een ADOCommand? Want wat ik gelezen heb ik is dat je met een command alles kan doen...

Acties:
  • 0 Henk 'm!

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

OZ-Gump

terug van weggeweest

Een ADOcommand kan inderdaad een recordset teruggeven...

Uit de Delphi help:
The most convenient way to work with this interface is to assign it to the RecordSet property of an ADO dataset.

For example, the following code uses TADOCommand (ADOCommand1) to execute a SELECT query, which returns a result set. This result set is then assigned to the RecordSet property of a TADODataSet component (ADODataSet1).

with ADOCommand1 do begin
CommandText := 'SELECT Company, State ' +
'FROM customer ' +
'WHERE State = :StateParam';
CommandType := cmdText;
Parameters.ParamByName('StateParam').Value := 'HI';
ADODataSet1.Recordset := Execute;
end;

As soon as the result set is assigned to the ADO dataset's Recordset property, the dataset is automatically activated and the data is available.
Ik weet dat er ook iets is dat een .Open nodig heeft om een recordset terug te kunnen geven, maar dat kan ook goed een stored procedure zijn o.i.d.. Dit komt in ieder geval uit de Delphi help, dus ik neem dan maar aan dat het ook gaat werken... :7

Edit:
Dat met die stored procedure was inderdaad zo... Daar heb je .ExecProc die de procedure alleen uitvoert, terwijl .Open er een recordset bij teruggeeft. Dat even om maar volledig te zijn ;)

Hierover staat in de help:
Tip: If an application is only interested in the result set returned by a stored procedure, call Open method for the TADOStoredProc component or set its Active property to true.

[ Voor 19% gewijzigd door OZ-Gump op 17-06-2003 23:28 ]

My personal website


Acties:
  • 0 Henk 'm!

Anoniem: 85524

Topicstarter
Tja de help had ik al geraadpleegd maar daar kwam ik niet echt verder mee ;)
Maareh heb zelf het een en ander uitgeprobeert het is me dan uiteindlijk gelukt :) Ik zal het ff voor de gezelligheid opschrijven:

Delphi:
1
2
3
4
5
6
7
8
9
procedure SetQry(SQLstr: string);
var id : string;
begin
  with cmd do
  begin
       CommandText := SQLstr;
       execute;
  end;
end;


Dit is dus de procedure welke de sql statement uitvoert...

Delphi:
1
2
sql:=Format('INSERT INTO ORDERT (leverancier_ID,inkoopdatum) VALUES (%d,%s)',[strtoint(inlLeverancier),formatdatetime('dd-mm-yy', Now + 0.125)]);
SetQry(sql);


En hiermee roep je het aan... zo kun je dus met delphi code simpel sql statements uitvoeren...

Acties:
  • 0 Henk 'm!

Anoniem: 42166

Waarom in vredesnaam deze wazige constructie :?

Je was er zó dichtbij met TDBLookupCombobox :
[rml][ Delphi] Waarden uit een tabel in een combobox laden[/rml]

Nogmaals, lees een goed boek over Delphi en er gaat een wereld voor je open :Y)

Acties:
  • 0 Henk 'm!

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

OZ-Gump

terug van weggeweest

Eerlijk gezegd snap ik het verschil met de openingspost niet. Daar vraag je hoe je een recordset terug kunt krijgen van een Command. Met de code die jij hier hebt neergezet krijg je volgens mij nog steeds geen recordset terug. Nou is dat bij een INSERT ook moeilijk :+, maar goed..... als je een ander statement wilt uitvoeren die wel een recordset returnt zul je toch met recordset := moeten gaan werken.

Edit:
Ik zie nu trouwens dat het een oplossing is voor dit specifieke probleem. Maar als je ooit een iets andere constructie tegenkomt....
Daarbij, als dit inderdaad ook met een combobox e.d. werkt, zijn er veel (betere) oplossingen te bedenken dan dit...

[ Voor 22% gewijzigd door OZ-Gump op 18-06-2003 23:48 ]

My personal website