2016-05-26 16 views
2
procedure TForm1.Button1Click(Sender: TObject); 
begin  
    ADOQuery1.close;  
    ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
            VALUES (:par0,:par1,:par2,:par3)';  
    ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text;  
    ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;  
    ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;  
    ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;  
    ADOQuery1.Open;  
    ADOQuery1.ExecSQL; 
end; 

und ich bekomme diese Fehlermeldung:Adoquery1: Command kein Ergebnis zurück gesetzt

Adoquery1: Commandtext nicht wieder ein Ergebnis gesetzt

Warum ich diesen Fehler und wie kann ich es reparieren?

+2

Wegen 'ADOQuery1.Open'.Entfernen Sie es. –

+0

Ja, Sie sollten Open verwenden (Sie können DataSet-Ergebnis erhalten) oder ExecSQL (kein DataSet-Ergebnis) – Zam

+0

Danke für den Vorschlag Ich entfernte adoquery1.open aber db Grid Show nichts passieren. Aber ich schaue auf Tabelle letzte Änderung erscheinen, zeige ich dies in Youtube Video –

Antwort

7

Rufen Sie ExecSQL auf, um die SQL-Anweisung auszuführen, die derzeit der SQL-Eigenschaft zugewiesen ist. Verwenden Sie ExecSQL, um Abfragen auszuführen, die keinen -Cursor an Daten zurückgeben (z. B. INSERT, UPDATE, DELETE und CREATE TABLE).

ExecSQL gibt einen ganzzahligen Wert zurück, der die Anzahl der von der ausgeführten SQL-Anweisung betroffenen Zeilen widerspiegelt. Hinweis: Für SELECT-Anweisungen rufen Sie Öffnen statt ExecSQL oder setzen Sie die Eigenschaft Active auf True. Um Geschwindigkeit Leistung, sollte eine Anwendung in der Regel die Abfrage durch Festlegen der vorbereiteten Eigenschaft auf True vor dem ersten Aufruf ExecSQL für vorzubereiten.

Quelle: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ADODB_TADOQuery_ExecSQL.html

Um Werte in der Tabelle Verwendung einfügen:

ADOQuery1.close;  
    ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
            VALUES (:par0,:par1,:par2,:par3)';  
    ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text;  
    ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;  
    ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;  
    ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;  
    ADOQuery1.ExecSQL; 

Um Werte aus der Tabelle Verwendung zu erhalten:

ADOQuery1.close;  
    ADOQuery1.SQL.text:='select * from veresiye';  
    ADOQuery1.Open; 
4

Sie sollten einfach den Anruf an

ADOQuery1.Open; 

Open verwendet entfernen wird der Datensatz von der Abfrage zurückgegeben zu öffnen. Dies entspricht auch der Einstellung ADOQuery1.Active := true. In diesem Fall gibt eine INSERT-Anweisung kein Dataset zurück, sodass nichts geöffnet werden muss.

ExecSQL wird verwendet, um Anweisungen auszuführen, die kein Ergebnis-Dataset zurückgeben, so dass Sie hier nichts mehr benötigen.

1

Um Werte in Tabelle einfügen:

ADOQuery1.Close; 
ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
           VALUES (:par0,:par1,:par2,:par3)'; 
ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text; 
ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;  
ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;  
ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;  
Try 
    ADOQuery1.ExecSQL; 
except on E: Exception do 
    MessageDlg(E.Message,mtError,[mbOK],0); 
End; 
Verwandte Themen