求教一条sql语句!(是不是paradox的bug?) (100分)

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

jbas

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现这样的功能,要用一句sql语句,不知怎样实现,请指教!
下面两条语句的作用能集成在一条sql语句中吗?
diarydata.tx.SQL.Add('select max(lycs) as lcs from ly'); //1
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values(:ls,:le,:lr)');//2
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
diarydata.tx.parambyname('ls').asinteger:=????/这句怎么写。
第一句用来取的当前ly数据表中的lycs字段的最大值。
第二句是实现插入输入的操作,lytime,lynr可以通过edit控件输入。而lycs需要上面第一句
取出的值,再插入到ly表中。需要一句实现,请指教。
 
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values((select max(lycs) as lcs from ly),:le,:lr)');//2
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
 
同意楼上的写法
 
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values((select max(lycs) as lcs from ly),:le,:lr)');
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
diarydata.tx.Prepare;
try
diarydata.tx.ExecSQL;
application.MessageBox('±£´æ¼Òô³É¹¦!!!','ÐÅÏ¢´°¿Ú');
except
application.MessageBox('±£´æ¼Òô³öÏÖ´íÎó!!!','ÐÅÏ¢´°¿Ú');
end;
这样以后lycs是添加进去了,但lytime,lynr就没有添加进去。why?
 
上面的几位,好人做到底呀!
 
检查你的lytime,lynr的字段类型是否是日期型和字符型。其次检查一下now,oldss是否为空。
如果都没有问题的话那么可能是delphi在运行时建立参数有问题,你可以这样写:
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values((select max(lycs) as lcs from ly),'+DateToStr(now)+oldss+')');
try
diarydata.tx.ExecSQL;
application.MessageBox('±£´æ¼Òô³É¹¦!!!','ÐÅÏ¢´°¿Ú');
except
application.MessageBox('±£´æ¼Òô³öÏÖ´íÎó!!!','ÐÅÏ¢´°¿Ú');
end;




 
试一试:
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values((select max(lycs) as lcs from ly),:le,:lr)');
diarydata.tx.ParamByName('le').asstring:=datetostr(date);
diarydata.tx.ParamByName('lr').Asstring:='test';
diarydata.tx.Prepare;
try
diarydata.tx.ExecSQL;
application.MessageBox('OK!');
except
application.MessageBox('ERROR!');
end;

建议:请注意编程风格!!!
 
字段类型对。这样也不行(编译通过,但没把lytime,lynr写进去),你那样了不行(编译没通过)。
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values( (select max(lycs) from ly),:le,:lr)');
diarydata.tx.ParamByName('le').asdate:=2002-1-18;
diarydata.tx.ParamByName('lr').Asstring:='sssssss';
diarydata.tx.Prepare;
try
diarydata.tx.ExecSQL;
application.MessageBox('保存成功!!!','信息窗口');
except
application.MessageBox('保存出现错误!!!','信息窗口');
end;

dephi6+win2000+paradox7.
 
你在
diarydata.tx.ExecSQL;
前加一句
diarydata.tx.sql.savetofile(d:/debug.txt);
运行一遍,然后打开d:/debug.txt文件看看sql你就会知道为什么错了
 
to lujr,谢谢你的提醒,但总忘,是编程时间短的源故吧。
但那样更不行,”le“ 是date类型。 肯定出错。
 
debug.txt内容:
insert into ly(lycs,lytime,lynr) values( (select max(lycs) from ly),:le,:lr)
怎没把:le,:lr替换掉?
lycs:N(数字类型)
lytime:D
lynr:A
 
是不是真的不能用一句来解决。
但把它去掉就行,难到一定要两句来解决。

diarydata.tx.SQL.Add('insert into ly(lytime,lynr) values(:le,:lr)');
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:='sssssss';
diarydata.tx.Prepare;
try
diarydata.tx.sql.savetofile('d:/debug.txt');
debug.txt内容:insert into ly(lytime,lynr) values(:le,:lr)
也没替换掉,:le,:lr,但能保存成功!
高手们,帮忙了!
 
不是没替换的原因,你查看一下
如果把'insert into ly(lytime,lynr) values(:le,:lr) 换成
'insert into ly(lynr,lytime) values(:lr,:le)
你看lr能否正确负值?
我想应该是事件字段的问题
 
试一下
diarydata.tx.ParamByName('le').value:=now;
 
没有效果,一个样!
 
我想是不是select要用open方法。而insert要用execsql呢?
 
begin
diarydata.tx.close;
diarydata.tx.SQL.clear;
diarydata.tx.SQL.Add('select max(lycs) as lcs from ly'); //1
diarydata.tx.open;//use open for 'select ....'
tmpvalue:= diarydata.tx.fieldbyname('lcs').value;//or ('lcs').asinteger;

diarydata.tx.close;
diarydata.tx.SQL.clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values(:ls,:le,:lr)');//2
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
diarydata.tx.parambyname('ls').asinteger:=tmpvalue;
diarydata.tx.ExecSQL;// use ExecSql for 'delete...' or 'update...'
end;
 
OR:
begin
diarydata.tx.close;
diarydata.tx.SQL.clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) values(:ls,:le,(select max(lycs) as lcs from ly))');//2
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
diarydata.tx.ExecSql;
end;
 
>>我想是不是select要用open方法。而insert要用execsql呢?
当然
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
645
import
I
后退
顶部