[求助] 关于delphi访问数据库发生了错误 !!!急!!!急!!!急!!!
project project2.exe raised exception class eoleexception with message ''在此上下文中不允许使用''c1999001999001999001999001''。此处只允许使用常量、表达式或变量。不允许使用列名。''.process stopped.use step or run to continue.while not adoqxiaoban.Eof
do
begin
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );
strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;
strcode:=strlinban+strxiaoban;
adoqs.SQL.Clear ;
adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
adoqs.Prepared ;
try
adoqs.Open ;
adoqxiaoban.Next ;
except
showmessage(''出错!'');
exit;
end;
end;
adoqlinban.Next ;
这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了 <P>我估计是这句的问题adoqs.Open ;
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P> <P>好的 我给你全部的代码吧</P><P>unit Unit1;</P><P>interface</P><P>uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;</P><P>type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQlinchang: TADOQuery;
ADOQyinglinqu: TADOQuery;
ADOQzuoyequ: TADOQuery;
ADOQlinban: TADOQuery;
ADOQxiaoban: TADOQuery;
ADOQs: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;</P><P>var
Form1: TForm1;</P><P>implementation</P><P>{$R *.dfm}</P><P>procedure TForm1.Button1Click(Sender: TObject);
var
strlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;
begin
adoqlinchang.Close ;
adoqyinglinqu.Close ;
adoqzuoyequ.Close ;
adoqlinban.Close ;
adoqxiaoban.Close ;
adoqs.Close ;
adoqlinchang.SQL.Clear ;
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');
adoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;
adoqlinchang.Prepared ;
adoqlinchang.Open ;
strlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
adoqyinglinqu.SQL.Clear ;
adoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
adoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
adoqyinglinqu.Prepared ;
adoqyinglinqu.Open ;
while not adoqyinglinqu.Eof
do
begin
stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
strcodeying:=strlinchang+'999'+stryinglinqu;
ADOQZuoYeQu.SQL.Clear;
ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;
ADOQZuoYeQu.Prepared;
ADOQZuoYeQu.Open ;
while not adoqzuoyequ.Eof
do
begin
strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ; <a>file://逐</A>个作业区的代码
strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;
ADOQLinBan.SQL.Clear;
ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');
ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;
ADOQLinBan.Prepared;
ADOQlinBan.Open;
while not adoqlinban.Eof
do
begin
strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
adoqxiaoban.SQL.Clear ;
adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');
adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;
adoqxiaoban.Prepared ;
adoqxiaoban.Open ;
while not adoqxiaoban.Eof
do
begin
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
strcode:=strlinban+strxiaoban;
adoqs.SQL.Clear ;
adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
adoqs.Prepared ;
try
adoqs.Open ;
adoqxiaoban.Next ;
except
showmessage('出错!');
exit;
end;
end;
adoqlinban.Next ;
end;
adoqzuoyequ.Next;
end;
adoqyinglinqu.Next ;
end;
adoqlinchang.Close ;
adoqyinglinqu.Close ;
adoqzuoyequ.Close ;
adoqlinban.Close ;
adoqxiaoban.Close ;
adoqs.Close ;
end;</P><P>end.</P> 拜托拜托了 你的程序我读起来不太明白,没有数据库我也调试不了,但是从错误看应该是SQL语句的问题,你应该跟踪一下,看看每个生成的SQL语句是不是正确! 怎么跟踪亚 因为我的delphi没学多久 我开始也以为是sql语句错 但试了下好像没什么问题 <P>而且 每次用delphi向sql server里插入字符串时 如 001 到了数据库里面都是 1 </P><P>数据库里的数据类型是char型的 </P> 你确认存入数据库的语句没有问题吗?001变成了1应该当作整型处理的原因,我一般喜欢用varchar的类型! <P>那是个实现从数据库中提取各级单位的编码 然后再编成最底一级的单位的编码 以表示它们间的上下级的关系 很简单的 </P><P>这个很急 搞了一个5.1 都没弄出来 下面的工作都没法做了 拜托拜托了</P><P>至于 001 变为 1的 程序在下面</P><P>procedure TForm1.Button1Click(Sender: TObject);
var
str1,str2:string;
begin
str1:='001';
str2:='002';
adoquery1.Close ;
adoquery1.SQL.Clear ;
adoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
adoquery1.Prepared ;
adoquery1.ExecSQL ;
end;</P><P>我觉得我的程序没有错呀 </P><P>还有 varchar 和 char 有什么区别亚</P><P>万分感谢!!! </P> <P>晕,你的SQL语句写的不对!字符串数据添加是两边要有',否则就按数字处理了!</P><P>adoquery1.SQL.Add('insert into test1 values('''+str1+''','''+str2+''')');</P><P>这句改成上面的就对了!</P>
页:
[1]
2