一段有错的delphi代码,大家帮忙分析。。。(50分)

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

chys

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into dl(xm,mm,qx)values('
+edit1.Text+','+edit2.Text+','+edit3.Text+')' );

adoquery1.ExecSQL;

end;
这段代码中的SQL语句有问题,请高手指点:在添加SQL语句时怎么书写才是正确的?
上面的字符串怎样连接才是正确的?
 
注意一下引号问题就可以

可以用SHOWMESSAGE(ADOQUERY1.SQL.TEXT);
来展示你的SQL语句到底是什么
 
上面说得有理,如果是数字,不需加引号,是字符串那必须要加
另外insert是一个没有返回结果的SQL语句,不能用adoquery1.Open;
再去掉这句就OK了
 
还是没有解决。出现insert into 语法错误。请高手把改好的程序写出来。
 
如果是数字,需要StrToInt(Edit1.text)
如果是字符串,需要QuotedStr(Edit1.text)
 
有这方面的实例吗?比如用户登录的例子给传一个,我的邮箱是:wanjun1212@163.com
 
楼主:adoquery1.Open;
adoquery1.ExecSQL;
这是什么意思??????????这里你好好看一下?
 
adoquery1.Open;
adoquery1.ExecSQL;
Insert不能用Open!没有返回数据集的SQL语句,只能ExecSQL;
如果提示insert into 语法错误,那必然是你的SQL句子写的有问题,最常见的是没加引号
比如 Insert into dl(Name,Code) values('abc','9914EF5')
在赋值时要这样写:adoquery1.SQL.Add('insert into dl(Name,Code) values('''+Edit1.text+''','''+Edit2.text+''')';
 
各位谁有这方面的资料?关于delphi中SQL语句的书写方法,我真的被搞晕了。。。
 
aql语句的写法,你可以找点数据库的书看看,基本原则就是你写出的哪个句子要能在数据库里运行,缺少引号和数据类型不对是最常见的,你可以按wp231957的办法把它打出来,或者你直接把它赋值给memo1.append(XXXX)然后你在memo里复制出来,到数据库里看看能不能执行。
 
经过好几个小时的研究,终于出答案了。
总结起来是这样的:字符串用单引号括起来,字符串里的单引号用双引号表示,字符串之间用加号连接。
所以这个问题的标准答案是:
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into dl(xm,mm,qx)values("'+edit1.Text+'","'+edit2.text+'","'+edit3.text+'")');
adoquery1.ExecSQL;
edit1.text:='';
edit2.text:='';
edit3.Text:='';
showmessage(adoquery1.sql.text);

end;
 
有个很简单的用法
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(Format('insert into dl(xm,mm,qx)values("%s","%s","%s")',[edit1.text,edit2.text,edit3.text]));
adoquery1.ExecSQL;
edit1.text:='';
edit2.text:='';
edit3.Text:='';
showmessage(adoquery1.sql.text);

end;
 
楼上的这个方法牛。。。。。。
 
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into dl(xm,mm,qx)values(:xm,:mm,:qx);
adoquery1.parameters.parambyname('xm').value:= edit1.text ;
//如果是integer则strtoint(edit1.text);
adoquery1.parameters.parambyname('mm').value:= edit2.text ;
adoquery1.parameters.parambyname('qx').value:= edit3.text ;


adoquery1.ExecSQL;
 
问题解决,散粉
 
后退
顶部