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

  • 主题发起人 主题发起人 jbas
  • 开始时间 开始时间
假如你的数据库是sql server试试将
'select max(lycs) as lcs from ly'
'insert into ly(lycs,lytime,lynr) values(:ls,:le,:lr)
改为
'insert into ly(lycs,lytime,lynr) select max(lycs) as lcs ,:le,:lr from ly'
 
to yhaochuan,谢谢关注!
你的第一种方法:好想不行。执行提示类型不对!tmpvalue设为integer;数据库中字段就是N型
你的第二中方法:还是不行。我以前试过,又重新试过一次,还是不行。编译没有错误,还提示
保存成功,但只保存那个lycs,其余没有保存进去。
 
to llh_lily,数据库是paradox7,
 
“数据库中字段就是N型”是什么型?
应该是数字的吧,
你要注意insert中前一个()中的数据类型要和后一个()中的数据类型要匹配。
不如把表结构和字段类型摆出来看看吧。
 
数据库结构:
fieldname type size key
lycs N
lytime D
lynr A 40
paradox7数据库
大家的方法都试了,我哪里错了?谢谢关注!
 
这个问题,我又加了100分。http://www.delphibbs.com/delphibbs/dispq.asp?lid=867640
谢谢大家的关注。我那里错了呢?
 
to jbas:我刚试了,paradox7里确实是你说的那样;SQLSERVER7.0下SQL语句报错。
 
begin
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.ExecSql;
end;
 
to yhaochuan大侠,我早就改过来了。可是还是老样子。这不会是paradox的bug吧!
 
我在测试中。(知道问题是什么了)
 
sql.add('insert into ly (lycs, lytime, lynr)
select max(lycs),:lytime,,:lynr from ly')
 
再次感谢yhaochuan大侠的诲人不倦。
 
上句好象还是有问题(在程序运行中的时候),
我在SQL explorer中输入那句是可以的。
insert into ly (lycs, lytime, lynr)
select max(lycs),'3/3/2001','4' from ly
我看看程序中要怎么做。
 
to yhaochuan大侠,我刚才在试,调了好多还是不行,不用加values,加了也不行。
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.add('insert into ly(lycs,lytime,lynr) select max(lycs),:le,:lr from ly');
diarydata.tx.ParamByName('le').asdate:=now;
diarydata.tx.ParamByName('lr').Asstring:=oldss;
diarydata.tx.Prepare;
try
diarydata.tx.sql.savetofile('d:/debug.txt');
diarydata.tx.ExecSQL;
application.MessageBox('保存录音成功!!!','信息窗口');
except
application.MessageBox('保存录音出现错误!!!','信息窗口');
end;
end;
我想实现的是把lytime和lyrn通过now和oldss保存到数据表ly中,同时把lycs也保存进这个表中,
但这个字段的值要不能相同。要1,2,3这样的连续数,主要是用来保存这些数,而且在同一天中这些数不能相同。
我曾经用注册表想保存这些数,但我在win2000下怎么也写不进数去注册表。所以该用数据库,反正程序也用到了
数据库,所以有这样的一个问题。同过两句sql语句我也没有成功。谢谢大侠的关注!


 
既然query有那么多难题,那换就不要在query的SQL中做insert吧,
先用query把max值查出来,然后用query查出lynr=''的记录(目的是打开个空记录,速度快)
然后用query.insert,然后逐个为字段赋值,然后再query.post。
这样问题反而少些。
程序能用了后再追查SQL不能成功的原因。
 
这样试试(要保证oldss是字符变量哦):
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('insert into ly(lycs,lytime,lynr) select getdate(),'''+oldss+''',max(lycs) as lcs from ly'
try
ExecSQL;
except on e:exception do
showmessage('ERROR:'+e.message);
end;
这样就不要任何参数了!一定会行的,请联系!
 
对不起,刚才去考试去了。
to 子斌,不行呀!编译通过,但执行时出现错误!
capability not supported
谢谢关注!
 
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.Add('select (max(lycs)+1) as lcs from ly');
diarydata.tx.Open;
ld:=diarydata.tx.fieldbyname('lcs').AsInteger;
diarydata.tx.Close;
diarydata.tx.FieldByName('lycs').AsInteger:=ld;
diarydata.tx.FieldByName('lytime').AsDateTime:=now;
diarydata.tx.FieldByName('lynr').AsString:=oldss;
diarydata.tx.Post;
怎么也不行呀!提示没找到lycs,lytime,lynr,明明有吗?


 
diarydata.tx.Close;
diarydata.tx.SQL.Clear;
diarydata.tx.SQL.add('insert into ly(lycs,lytime,lynr) select max(lycs),'''+strdate+''', '''+strlr +''' from ly');
diarydata.tx.Prepare;
strdate要注意日期格式
 
测试通过的。
procedure TForm1.Button1Click(Sender: TObject);
var
strdate,strlr:string;
begin
strdate:=edit1.text;//text is 1/1/2002;
strlr := edit2.text;//test is edit2;
query1.SQL.Clear;
query1.SQL.Add('insert into ly(lycs,lytime,lynr) select max(lycs),'''+strdate+''', '''+strlr +''' from ly');
query1.ExecSQL;
end;
 

Similar threads

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