query 的参数不能找到,请指教!急!急!急!!(100分)

  • 主题发起人 主题发起人 jinhy
  • 开始时间 开始时间
J

jinhy

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是这样的:
procedure TForm1.BitBtn1Click(Sender:TObject);
begin
Query1.ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
Query1.ParamByName('YQGS').Asstring:='edit2.text';
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into YQGS_CODE (YQGS,YQGS_MC)');
SQL.Add('Values (:YQGS,:YQGS_MC)');
Open;
end;
end;
执行的时候的错误总是:Query1.YQGS paramer not fount 同时这个程序就不能响应了。
请各位高手指教!!
 
procedure TForm1.BitBtn1Click(Sender:TObject);
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into YQGS_CODE (YQGS,YQGS_MC)');
SQL.Add('Values (:YQGS,:YQGS_MC)');
Open;
end;
Query1.ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
Query1.ParamByName('YQGS').Asstring:='edit2.text';
end;
 
I think :
The params of Query should be put before the method of open
and affter the method of SQL.ADD,just like so

SQL.Add(‘’);
Query1.Params...
Open;

Give me the mark!
 

with query1 do
begin
close;
unprepare;
sql.clear;
sql.add;
parambyname(...)...
parambyname(..)...
open;
end;
 
sorry,漏写了。
open 前加个prepare;
 
>sorry,漏写了。
>open 前加个prepare;
不写问题也不大,会自动处理的;
 
这不废话嘛! SQL.Clear之后params当然也被clear了.
 
for jinhy:
procedure TForm1.BitBtn1Click(Sender:TObject);
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into YQGS_CODE (YQGS,YQGS_MC)');
SQL.Add('Values (:YQGS,:YQGS_MC)');
ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
ParamByName('YQGS').Asstring:='edit2.text';

Open;
end;
end;
这样应该行.
 
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into YQGS_CODE (YQGS,YQGS_MC)');
SQL.Add('Values (:YQGS,:YQGS_MC)');

ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
ParamByName('YQGS').Asstring:='edit2.text';
ExecSQL;
end;
1.Insert 不能用Open
2.SQL.Clear会清除Param
3.在Open或ExecSQL之前要先给Param赋值
 
明白了,谢谢各位
 
如果你的后臺是sql server.
不如直接使用sql語句. 如下
procedure TForm1.BitBtn1Click(Sender:TObject);
var
ls_sql:string;
begin
ls_sql:='insert into YQGS_CODE (YQGS,YQGS_MC) Values ("' +
edit2.text + '","'+ zhongedit1.text +'")'
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add(ls_sql);
ExecSQL;
end;
end;
 
原因很简单,你要先添加SQL语句,比如SQL.Add('Values (:YQGS,:YQGS_MC)')
然后再处理参数, 只有先添加了SQL语句,然后才会有参数,因为参数是根据SQL语句
由自动生成的.
因此你要把
Query1.ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
Query1.ParamByName('YQGS').Asstring:='edit2.text'
这两行放到后面
 
将Open换成Execute就可以了
 
参数一定要放在语句后面, open前面, 才有效!
 
好象应该是
ParamByName('YQGS_MC').Asstring:=zhongedit1.text;
ParamByName('YQGS').Asstring:=edit2.text;
而不是:

ParamByName('YQGS_MC').Asstring:='zhongedit1.text';
ParamByName('YQGS').Asstring:='edit2.text';

 
接受答案了.
 
后退
顶部