penguin 发表于 2005-5-6 10:09

[求助] 关于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那 哪位大虾帮帮忙 很急了

ilikenba 发表于 2005-5-6 10:35

<P>我估计是这句的问题adoqs.Open ;
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>

penguin 发表于 2005-5-6 13:11

<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>

penguin 发表于 2005-5-6 13:15

拜托拜托了

ilikenba 发表于 2005-5-6 16:00

你的程序我读起来不太明白,没有数据库我也调试不了,但是从错误看应该是SQL语句的问题,你应该跟踪一下,看看每个生成的SQL语句是不是正确!

penguin 发表于 2005-5-6 21:32

怎么跟踪亚 因为我的delphi没学多久 我开始也以为是sql语句错 但试了下好像没什么问题

penguin 发表于 2005-5-6 21:53

<P>而且 每次用delphi向sql server里插入字符串时 如 001 到了数据库里面都是 1 </P><P>数据库里的数据类型是char型的 </P>

ilikenba 发表于 2005-5-7 01:52

你确认存入数据库的语句没有问题吗?001变成了1应该当作整型处理的原因,我一般喜欢用varchar的类型!

penguin 发表于 2005-5-7 11:27

<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>

ilikenba 发表于 2005-5-7 18:08

<P>晕,你的SQL语句写的不对!字符串数据添加是两边要有',否则就按数字处理了!</P><P>adoquery1.SQL.Add('insert into test1 values('''+str1+''','''+str2+''')');</P><P>这句改成上面的就对了!</P>
页: [1] 2
查看完整版本: [求助] 关于delphi访问数据库发生了错误 !!!急!!!急!!!急!!!