当前位置:主页>仓库管理软件> 列表

在delphi中执行SQL语句会报错,但我不知道怎么修改? 找进销存excel表格

记账软件版1楼: 如下句:
sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' where beactive=''否'''';
这时会报错说''否''这里有错误,应该怎么修改?

2楼: sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' and beactive=''否'''';
如果beactive不是字符型,应该改为beactive=0 如进销存月报表

3楼: 否为字符串,改为''''''否''''''
语句改为:
sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' where beactive=''''''否'''''''';

4楼: sql:=''select * from sparc where zjm like %''+form1.Edit3.Text+''% and beactive=quotedstr(否)'';

5楼: sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' and beactive=''''''否'''''''';

6楼: TO 楼上的大哥们:
我代码是:
sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' where beactive=''''''否'''''''';


可是还是报错:
Build
[Error] MAIN.PAS(261): Illegal character in input file: ''否'' ($B7F1)

记账软件版7楼: 赌东道

8楼: 数据----库---不---支持---中文字符

9楼: 我是说你的数据库版本不支持,不是所有的啊!

10楼: 先在查询分析器调试一下

11楼: to 楼上大哥
既然你说数据库不支持中文
那我改成:
sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' and beactive=''''''fou'''''''';
可是这样也不行?
报错:
Build
[Error] MAIN.PAS(261): Missing operator or semicolon
还有你说不支持中文,那怎么样才行?打补丁吗???
我是数据库是SQL server 2000

12楼: to SiWeiLiuLang,
在查询分析器里肯定没有问题:
select * from sparc where zjm like ''%DE%'' and beactive=''fou''
或者:select * from sparc where zjm like ''%DE%'' and beactive=''否''
都绝对没有问题, 如零售记账软件

13楼: 用查询分析器一步一步调

记账软件版14楼: to ivy1982
在查询分析器里绝对没有问题
我说的这个问题不是特例,就是很平常你们用delphi时,添加SQL语句时有条件判断怎么办?
比如随便举个列子:
在SQL查询分析器里执行:
select * from table where tiaojian=''ON0001''(肯定没有问题都正常能显示结果)
然后把它添加到DELPHI中:
sql:=''select * from table where tiaojian=''ON0001'''';
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add(sql);
adoquery3.Open;
adoquery3.ExecSQL;
编译时就报错!! 但如果改动不加条件时就能正常通过:
把sql:=''select * from table where tiaojian=''ON0001'''';改成:sql:=''select * from table'';就可以了
可是这不是我要的效果呀,我要正常用SQL语句呀
各位大哥,明白小弟的意思了吗???

15楼: 引号没用好!
正确:
sql:=''select * from sparc where zjm like ''+''''''%''+form1.Edit3.Text+''%''''''+'' where beactive=''''否'''''';

或者用format

16楼: to zgj_gd,
你的方法我试了,可以通过,
可是有个问题:如果将以下在查询分析器中通过的语句添加到DELPHI中怎么改?
if not exists(select * from sparc where dspcode=''ON0012'' and xtype=''TR'')
begin
declare @sql nvarchar(255)
set @sql=@sql + ''declare @edate char(10)''+char(13)
set @sql=@sql + ''set @edate=convert(char(10),getdate(),120)''+char(13)
set @sql=@sql + ''UPDATE sparc SET beactive=''''否'''' where @edate>''''2006-01-06''''''
exec(@sql)
end(查询分析器编译能通过)
如何添加到delphi中?
我试了,可是报错:
sql:=''if not exists(select * from sparc where dspcode=''ON0012'' and xtype=''TR'') ''
+''begin''
+''declare @sql nvarchar(255)''
+'' set @sql=@sql + ''declare @edate char(10)''+char(13)''
+''set @sql=@sql + ''set @edate=convert(char(10),getdate(),120)''+char(13)''
+'' set @sql=@sql + ''UPDATE sparc SET beactive=''''否'''' where @edate>''''2006-01-06''''''''
+'' exec(@sql)''
+''end'';
怎么样修改?
如果这个行了,我另外开贴送分给你们!

17楼: 这个不能用ADOquery 控件,存储过程不能这样调用的。
可以写一个存储过程,然后用ADOquery 执行 SQL来执行存储过程:
sql := ''Exec 存储过程名''

其实,上述代码可以写成一个SQL

18楼: to zgj_gd
可以写成SQL?
给个提示??
触发器好象只能在写在表头,这好象和条件判断有点冲突吧? 贴出来!!

19楼: 呵!你的目的是不是:当当前系统时间大于 2006-01-06 时,将
dspcode<>''ON0012'' and xtype<>''TR'' 的 记录的 beactive 更新为 否?

UPDATE sparc SET beactive=''否'' where getdate()>''2006-01-06''
and dspcode<>''ON0012'' and xtype<>''TR''

你自己再在delphi中调用吧!

20楼: to zgj_gd
我的这个例子也许是可以写成SQL
可是我想能把:
if not exists(select * from sysobjects where name=''trigger_logtb'' and xtype=''TR'')
begin
declare @sql nvarchar(255)
set @sql=''CREATE TRIGGER trigger_logtb ON logtb''+ char(13)
set @sql=@sql + ''FOR insert ''+ char(13)
set @sql=@sql + ''AS''+ char(13)
set @sql=@sql + ''declare @edate char(10)''
set @sql=@sql + ''set @edate=convert(char(10),getdate(),120)''
set @sql=@sql + ''UPDATE sparc SET beactive=''否'' where @edate>''2006-01-06''''


exec(@sql)
end
这个触发器添加到delphi中,可是不知道怎么添加?

记账软件版21楼: sql:=''select * from sparc where zjm like ''''%''+form1.Edit3.Text+''%'''' and beactive=''''否'''' ''

22楼: 我很少用 到触发器,不太了解!
建议你另外开贴吧。因为很多人不知道你问题中还有问题。。。。。 如进销存excel表格

23楼: 呵呵 算了 结贴吧
谢谢各位了

24楼: 多人接受答案了。