Delphi中文数据及查询语句问题,江湖告急,请大侠们援助!!!(100分)

  • 主题发起人 主题发起人 i2346
  • 开始时间 开始时间
I

i2346

Unregistered / Unconfirmed
GUEST, unregistred user!
以下语句在DELPHI中会出现错误
strSQL:='select * from resulttable WHERE [业务员] Like "王亚飞"';
提示为:“Invalid column name'王亚飞'”
如果在ADODataset的Commandtext中写入:select * from resulttable where [业务员] like '王亚飞',可以执行
但,把这句照搬到strSQL中,把strSQL赋值给ADODataset的Commandtext,执行后,会出现如下错误:
“Illegal character in input file:'王'($CDF5)”
江湖告急,请大侠们援助!!!
 
把"王亚飞"改为''王亚飞'' ok!("->'')
 
中文查询好象没有,我用过好象没有问题。我一直用中文查询,不知你的数据库是什么类型?
请看我的一个例子,在edit 中输入关键字查询
begin
qryquestion.Close;
qryquestion.SQL.Clear;
qryquestion.SQL.Add('select * from letters ');
qryquestion.SQL.Add('where parent=0 ');
if edit1.Text<>'' then
begin
edit1.Items.Add(edit1.text);
qryquestion.SQL.Add('and [subject] like ');
qryquestion.SQL.Add('"*'+edit1.Text+'*"');
end;
 
用单引号,
在字符串中使用,需要用两个单引号表求一个双引号
 
to:jianping()
我的问题上已经说过了,改了''还是有问题(看我第二段),
我的数据库是SQL SERVER2000的,我也觉得不应该出现这个问题.
郁闷!!!
 
多谢jianping(),htw.
如果我把'王亚飞'这个字符串从EDIT上拾取,又如何呢?我是这么写的:
if edtAgent.Text='全部' then strAgent:='%'
else strAgent:=edtAgent.Text;
strSQL:='select * from resulttable WHERE [业务员] Like '+edtAgent.Text;
dsquerydo.Active:=False;
dsquerydo.CommandText:=strSQL;
dsquerydo.Active:=True;
对吗?
 
对不起,先前的代码有一个地方是错的:
if edtAgent.Text='全部' then strAgent:='%'
else strAgent:=edtAgent.Text;
strSQL:='select * from resulttable WHERE [业务员] Like '+strAgent;
dsquerydo.Active:=False;
dsquerydo.CommandText:=strSQL;
dsquerydo.Active:=True;
我在edtAgent中填入"王亚飞"或者是"%",就出错,但我在填入字符时加上单引号,就象
"'王亚飞'"就可以了,于是我把上面的代码第三行改为:
strSQL:='select * from resulttable where [业务员] Like '+'''+strAgent+''';
错误倒是没了可结果一个记录都没有返回???
 
改为这个试试:
strSQL:='select * from resulttable where [业务员] Like ''%'+strAgent+'%''';
 
i2346:
你可以加一行代码:
ShowMessage(strSQL); //看一下是否是你想要的SQL语句
或者直接进入调试状态,直接看strSQL的值
 
上面的问题都解决了,要给分了,但后面又出了个问题,麻烦大侠们再援助一下:
我的代码如下
if edtOutDateBegin.Text='' then strOutDateBegin:='发货日期>=(select distinct min(发货日期) from resulttable)'
else stroutdatebegin:='发货日期 >='+edtoutdatebegin.Text;
if edtOutDateEnd.Text='' then stroutdateend:='发货日期<=(select distinct max(发货日期) from resulttable)'
else stroutdateend:='发货日期<='+edtoutdateend.Text;
if edtpayDateBegin.Text='' then strpayDateBegin:='回款日期>=(select distinct Min(回款日期) from resulttable)'
else strpaydatebegin:='回款日期 >='+edtpaydatebegin.Text;
if edtpayDateEnd.Text='' then strpaydateend:='回款日期<=(select distinct max(回款日期) from resulttable)'
else strpaydateend:='回款日期<='+edtpaydateend.Text;
strSQL:='select * from resulttable WHERE '
+stroutdatebegin
+' AND '+stroutdateend
+' AND '+strpaydatebegin
+' AND '+strpaydateend;
问题出现了,运行不出错,但不能得出在限制日期范围内的数据。WHY???
 
你的语句实现的是什么功能,

日期的输入你是用什么格式的,请留意你的日期格式,
好datetime 和date是不同的
 
我的建议把SQL语句显示出来,在SQL中运行,看看结果!!

呵呵,应该没有问题的!
 
因为日期输入是用EDIT实现的,而在加入SQL语句时,是做为语句的一部分,如果日期的类型
错误,在执行查询时应该会出现错误.
而且我的日期用日期拾取窗体实现日期输入,输入的日期为'2001-6-18'.
再次郁闷!
 
我觉得是应该把计算机的日期格式设为:yyyy-MM-dd
默认好像是M-d-yy
 
日期值要用单引号引起来的比如'2000-01-25'
 
我搞定了,应该在日期前后加两个单引号!多谢各位
 
后退
顶部