query的插入记录问题(100分)

  • 主题发起人 主题发起人 chen66
  • 开始时间 开始时间
C

chen66

Unregistered / Unconfirmed
GUEST, unregistred user!
with query1 do
begin
if active then close;
sql.Clear ;
sql.Add('insert into mytable ') ;
sql.ad('values( :vname,:vtablename)');
ParamByName('vname').asstring:= edit1.text;
ParamByName('vtablename').asstring:= edit2.text;
open;
end;
这是我程序的一部分,对此我有以下说明
1、我的表字段有10个,对应的参数也有10个,我没有一一列出。
2:程序报错为error creating cursor handle
 
把open该为execute
 
query可以用OPEN执行查询 BUT必须用EXECUTE执行INSERT,UPDATE等
 
经典问题。
 
没什么说的呢
 
使用query1.execsql替代query1.open!
 
还是不行?
谁能给个例子,很感谢!!
 
with query1 do
begin
close;
sql.Clear ;
sql.Add('insert into mytable(field1,field2) ');
sql.add('values( :vname,:vtablename)');
ParamByName('vname').asstring:= edit1.text;
ParamByName('vtablename').asstring:= edit2.text;
prepare;
execute;
end;
 
数据操纵语句不能用 Open 方法的,应该用 Execute,来晚了,:(
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;

type
TForm1 = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Table1: TTable;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
with query1 do
begin
close;
sql.Clear ;
sql.Add('insert into querytest(q_name,a_tablename) ');
sql.add('values( :vname,:vtablename)');
ParamByName('vname').asstring:= edit1.text;
ParamByName('vtablename').asstring:= edit2.text;
prepare;
execute;
end;
end;

end.
不让编译,认为execute,没定义?
 
把execute去掉,改为ExecSql。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with query1 do
begin
close;
sql.Clear ;
sql.Add('insert into querytest(q_name,a_tablename) ');
sql.add('values( :vname,:vtablename)');
ParamByName('vname').asstring:= edit1.text;
ParamByName('vtablename').asstring:= edit2.text;
prepare;
execsql
end;
end
 
我用了你们说的方法,可以写入,但我把该query连到dbgrid上想打开看看
用open还是报错error creating cursor handle?
1:为什么会报上诉错误?
2:在什么情况下用execsql?是否在添加、删除、记录时?
3:谢谢帮助!!
 
凡是select * from xxx,就能用open,不能用Execsql。就是说返加结果集,只能
用open。不返回结果集只能用Execsql,比如:insert into 、delete和update。
如果是这样:
with query1 do
begin
close;
sql.clear;
sql.add('insert into table1(f1) select f1 from table2');
open;
end;

这样肯定会出现错误:error creating cursor handle。
 
insert后重写sql,再open
 
接受答案了.
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部