delphi中使用Database和Query做数据插入时出错,希望能有达人给出意见,以下是具体代码
数据库是用的access,数据库名cpsystem,表名cpmessage,连接没有问题,在程序运行时也没有问题,就是在按钮点击时间时对数据库增加数据系统报错,另外还想问...
数据库是用的access,数据库名cpsystem,表名cpmessage,连接没有问题,在程序运行时也没有问题,就是在按钮点击时间时对数据库增加数据系统报错,另外还想问个问题,是否只有ado的组件可以放在DataModule里面去被引用呢?BDE的好象引用不了?
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit3, StdCtrls, Grids, DBGrids, DB, DBTables, Menus;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
proname: TEdit;
Label2: TLabel;
price: TEdit;
Button1: TButton;
Button2: TButton;
DBGrid1: TDBGrid;
Database1: TDatabase;
Query1: TQuery;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
database1.StartTransaction;
try
with query1 do
Begin
self.Close;
sql.Clear;
query1.SQL.Add('insert cpmessage values(:a,:b)');
query1.parambyname('a').AsString:=trim(proname.Text);
query1.ParamByName('b').AsFloat:=strtofloat(trim(price.Text));
query1.ExecSQL;
end;
database1.Commit;
showmessage('增加成功');
query1.SQL.Clear;
except;
Begin
Database1.Rollback;
showmessage('增加失败');
end;
end;
end;
end. 展开
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit3, StdCtrls, Grids, DBGrids, DB, DBTables, Menus;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
proname: TEdit;
Label2: TLabel;
price: TEdit;
Button1: TButton;
Button2: TButton;
DBGrid1: TDBGrid;
Database1: TDatabase;
Query1: TQuery;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
database1.StartTransaction;
try
with query1 do
Begin
self.Close;
sql.Clear;
query1.SQL.Add('insert cpmessage values(:a,:b)');
query1.parambyname('a').AsString:=trim(proname.Text);
query1.ParamByName('b').AsFloat:=strtofloat(trim(price.Text));
query1.ExecSQL;
end;
database1.Commit;
showmessage('增加成功');
query1.SQL.Clear;
except;
Begin
Database1.Rollback;
showmessage('增加失败');
end;
end;
end;
end. 展开
2个回答
展开全部
是在query1.ExecSQL;时出错吗?错误是什么?cpmessage 表中只有2列吗?可能是sql语句出错,可以在access里测试一下。
BDE也是可以放在datamod中。区别是ADO用的是Microsoft提供的数据驱动,BDE用的是Borland提供的。ADO比较好用,大部分的需求都有了。
BDE也是可以放在datamod中。区别是ADO用的是Microsoft提供的数据驱动,BDE用的是Borland提供的。ADO比较好用,大部分的需求都有了。
更多追问追答
追问
错误是在提交sql语句的时候出现的,就是说sql错误,并没有什么别的提示,cpmessage表只有两列,本来之前有三列的,我为了测试删掉了自动生成ID的列,只有两列了,我还不知道sql可以直接放access里面运行,一会试试!好怀念java啊。。。至少有后台可以看的。。。
不知道为什么我吧BDE的组件放到datamodule里面好像不能被别的from引用。。只能直接放到form里面了
追答
哦,对了,你的sql的确有错,应该是:
INSERT INTO cpmessage VALUES(:a,:b)
你漏掉了INTO。
还有为什么要用BDE呢?ADO可以完成所有BDE的功能,而且更方便阿!
2011-06-03
展开全部
你的sql语句还是到网上去找一下插入方面的如何写吧,你的好像不对,直接使用这个就可以了
qry1.open;
qry1.append;
qry1.FieldByName('a').AsString:=trim(proname.Text);
qry1.post;
qry1.open;
qry1.append;
qry1.FieldByName('a').AsString:=trim(proname.Text);
qry1.post;
追问
Fieldbyname的方法也可以,我之前已经查过很多资料了,用query我现在知道的就是parambyname的和fieldbyname两种方法,前者的方法好像相对灵活一些,用传参数的方法做的插入操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询