注册 登录
编程论坛 Delphi论坛

[求助]有关Delphi方面的问题,新手问题,大家都会

初学Delphi 发布于 2006-04-04 20:44, 1791 次点击

我是刚学delphi的一名学生

遇到一个问题:
就是一个充值系统,要求充值成功的时候要把本次充值记录到“交费登记表中”,然后在“消费表”里把相应的充值额加进去。。

ADOQuery1.Close ;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.text :='select * from 交费登记表';
ADOQuery1.Open ;
ADOQuery1.Append ;
ADOQuery1.FieldByName('卡号').AsString :=trim(Edit1.Text );
ADOQuery1.FieldByName('交款人').AsString :=trim(Edit2.Text );
ADOQuery1.FieldByName('交款额').AsString :=trim(Edit3.Text );
ADOQuery1.FieldByName('身份').AsString :=trim(ComboBox1.Text );
ADOQuery1.FieldByName('交款时间').Asdatetime :=DateTimePicker1.Date;

ADOQuery2.Close ;
ADOQuery2.SQL.Clear ;
ADOQuery2.SQL.text :='update 消费表 set 余额=余额+'''+Edit3.text+''' where 卡号='''+Edit1.text+'''';
ADOQuery2.Open ;

在下感激不禁,,,,

11 回复
#2
初学Delphi2006-04-04 20:56
用的是ACCESS数据库
#3
初学Delphi2006-04-04 21:03

为了测试一下,我在ADOQuery2的SQL属性里输入update 消费表 set 余额=100
再将ADOQuery2的Action设计为Ture 结果居然报错,但是我去表中察看,余额已经全部被改成了100了

为什么?

#4
ysp_19842006-04-05 01:21

ADOQuery2.Close ;
ADOQuery2.SQL.Clear ;
ADOQuery2.SQL.text :='update 消费表 set 余额=余额+'''+Edit3.text+''' where 卡号='''+Edit1.text+'''';
ADOQuery2.Open ;
ADOQuery2.Open ;这句代码不对,应该为ADOQuery2.ExecSQL;因为执行update语句,ADOQuery2没有返回值.ADOQuery2.Open;一般用于select语句.
把上面的红色几句该为:
在开始的时候定义两个局部变量
var
sum,x: float;


with ADOQuery2 do
begin
close;
SQL.clear;
SQL.text:='select * from 消费表';
prepared;
open;
if not locate('卡号',trim(edit1.text),[]) then
begin
showmessage('该卡号不存在');
end
else
begin
x:=strtofloat(FieldByName('余额').AsString);
sum:=x+strtofloat(trim(edit3.text));
FieldByName('余额').AsString :=floattostr(sum);
close;
end;
end;
你看看行不行.我没有测试过.

[此贴子已经被作者于2006-4-5 16:47:28编辑过]

#5
初学Delphi2006-04-05 13:45
Delphi好深奥,要好好学。。多谢斑竹赐教,我去试试看
#6
ysp_19842006-04-05 16:53

ADOQuery2.SQL.text :='update 消费表 set 余额=余额+'''+Edit3.text+''' where 卡号='''+Edit1.text+'''';
这里的SQL语句中edit3.text 和edit1.text应该换为两个变量。你在为他们赋值。这样应该可以。比上面更简单。
#7
初学Delphi2006-04-05 18:14


直接这样运行
运算结果跟字符串相加似的,
余额=100 冲值50 结果数据库中边成了10050
我把 余额设成的int 怎么不能直接运算
Edit1的可以不用换吧?
谢谢斑竹。。。斑竹就是尽责。。
我是昨天在网上搜搜看怎么解决的,就进了这论坛。。
没想到斑竹这么尽责,哈哈 这里的会员肯定也都很热情了。
以后有问题就来这论坛请教。。
再次谢谢老乡,俺也是山东人

[此贴子已经被作者于2006-4-5 19:48:42编辑过]

#8
makebest2006-04-06 12:41

如果给 sql.text 赋值,不需要 sql.clear。
余额当然得是数值型的,你加的时候,为什么要用 单引号 呢?

#9
初学Delphi2006-04-06 12:53
那个clear是习惯写法,可以不用

我以前都写sql.Add(……);

单引号你说的是这里最后吧
ADOQuery2.SQL.text :='update 消费表 set 余额=余额+'''+Edit3.text+''' where 卡号='''+Edit1.text+'''';

那里是我从程序上直接贴过来的 多复制了一个单引号

ADOQuery2.SQL.text :='update 消费表 set 余额=余额+'''+Edit3.text+''' where 卡号='''+Edit1.text+''';
ADOQuery2.perpared;
ADOQuery2.execsql;
我这样就能直接想加 结果也对
不是说Edit.text里面的是字符型 必须转换类型才能相加么?
我的不知道为什么可以

[此贴子已经被作者于2006-4-6 12:57:33编辑过]

#10
bbkjsu2006-04-07 07:55
各位高手好:请问如何实现在主窗体中点击一个按钮后,弹出一个子窗体---------------------新手的徒弟
#11
ysp_19842006-04-09 17:06

procedure Tfrmmain.createformClick(Sender: TObject);

begin
Application.CreateForm(Tform2,form2);
form2.ShowModal;

end;

#12
yuxue19852006-04-13 11:17

嘿嘿俺也是山东人

今天是也随便的一搜索就找到这个论坛了

可是还没有发展起来

问的问题有的根本就没有办法回答

有的问题都是一些只要看书就能够知道是那里错了

个人建议还是多看书!~

1