我用ADO连接了一个SQL数据库,使用了ADOConnection连接,其他的使用了ADOTable和ADOQuery组件连接到ADOConnection,但我打开一个表时如AT_user.open时出现了“参数类型不正确,或在不可接受的范围之内或与其他参数冲突.”使得无法对该表进行操作!
哪位高手能帮忙解决这个问题!谢谢!

解决方案 »

  1.   

    看看ADOConnection的connected属性是否设为true了。
      

  2.   

    是不是ado版本太低或用的delphi5没有打补丁,记得以前遇见过,不知道和你的是不是一样
      

  3.   

    http://search.csdn.net/Expert/topic/2452/2452721.xml?temp=.5908625
    看看
      

  4.   

    我用的是DELPHI7,同学用的是2005,另外connected已经设置为TRUE了,但是问题依然存在!关于ADOConnection的连接使用的是connectionstring连接到数据库的,这个上面没有什么问题!
      

  5.   

    procedure TForm4.i_idChange(Sender: TObject);
    begin
     with DM3 do
     begin 
     AT_user_2.Filter:='ID='''+i_id.text+'''';
     AT_user_2.Filtered:=true;
     AT_user_2.open;    //在这里出现了错误!
     AT_change_list.filter:='员工号='''+i_id.text+'''';
     AT_change_list.filtered:=true;
     AT_change_list.open;
     end;
    end;好多地方都有同样的错误。
      

  6.   

    是不是把字段直接加入fieldlist里面了
    这之间你又修改了数据库
      

  7.   

    procedure TForm4.i_idChange(Sender: TObject);
    begin
     with DM3 do
     begin 
     AT_user_2.open;    //在这里出现了错误!
     AT_user_2.Filter:='ID='''+i_id.text+'''';
     AT_user_2.Filtered:=true;
     AT_change_list.open;
     AT_change_list.filter:='员工号='''+i_id.text+'''';
     AT_change_list.filtered:=true;
     end;
    end;
      

  8.   

    procedure TForm4.i_idChange(Sender: TObject);
    begin
     with DM3 do
     begin 
     AT_user_2.open;    //在这里出现了错误!
     AT_user_2.Filter:='ID='''+ReplaceStr(i_id.text, '''', '''''')+'''';
     AT_user_2.Filtered:=true;
     AT_change_list.open;
     AT_change_list.filter:='员工号='''+ReplaceStr(i_id.text, '''', '''''')+'''';
     AT_change_list.filtered:=true;
     end;
    end;
      

  9.   

    filter我倒从来没用过,基本情况下我都是把条件转成SQL来执行,而不是取全部数据然后在本地进行过滤。
      

  10.   

    procedure TForm4.i_idChange(Sender: TObject);
    begin
     with DM3 do
     begin 
     AT_user_2.Filter:='ID='''+ReplaceStr(i_id.text, '''', '''''')+'''';
     AT_user_2.Filtered:=true;
     AT_change_list.open;
     AT_change_list.filter:='员工号='''+ReplaceStr(i_id.text, '''', '''''')+'''';
     AT_change_list.filtered:=true;
     end;
    end;再试试看
      

  11.   

    改了很久还是不对估计是数据库连接方面出了问题,哪位高手有空加我QQ69914261,我把源程序给你帮我看看。上面的问题莫名其妙的没了,有一断总是有问题。我贴出来:
    unit Unit5;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DBCtrls, ExtCtrls, Mask;type
      Tform5 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        i_passwd: TEdit;
        i_user: TDBEdit;
        i_name: TDBEdit;
        i_bitthday: TDBEdit;
        i_sex: TDBRadioGroup;
        i_specialty: TDBEdit;
        i_address: TDBEdit;
        i_tel: TDBEdit;
        i_email: TDBEdit;
        i_re: TDBMemo;
        i_department: TDBLookupComboBox;
        i_job: TDBLookupComboBox;
        i_edu_level: TDBLookupComboBox;
        Button1: TButton;
        Button3: TButton;
       procedure AddInit;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button3Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      form5: Tform5;implementationuses Unit1, Unit2, Unit3, Unit4;{$R *.dfm}procedure Tform5.AddInit;
    var
      counter:integer;
      id:string;
    begin
      with DM3 do
      begin
        AT_counter.Filter:='ID=''P''';
        AT_counter.Filtered:=true;
        AT_counter.Open;
        counter:=AT_counter['计数值'];
        AT_counter.Close;
        id:='00000'+IntToStr(counter);
        id:='P'+Copy(id,length(id)-4,5);
        AT_add_user.Open;   //出问题的地方
        AT_add_user.Append;
        AT_add_user['ID']:=id;
        AT_add_user['性别']:='男';
        AT_add_user['当前状态']:='T';
        i_user:=id;    i_passwd.Text:=id;
        end;
    end;procedure Tform5.Button1Click(Sender: TObject);
    var
      passwd:String;
      counter:Integer;
      begin
        if length(i_name.Text)>0 then
        passwd:=i_passwd.text;
        with DM3 do
        begin
          AT_counter.Filter:='ID=''P''';
          AT_counter.Filtered:=true;
          AT_counter.Open;
          AT_counter.Edit;
          AT_counter['计数值']:=AT_counter['计数值']+1;
          AT_counter.Post;
          AT_counter.Close;
          AT_add_user.Edit;
          AT_add_user['密码']:=passwd;
          AT_add_user.Post;
          AT_counter.Filter:='ID=''C''';
          AT_counter.Filtered:=true;
          AT_counter.Open;
          counter:=AT_counter['计数值'];
          inc(counter);
          AT_counter.Edit;
          AT_counter['计数值']:=counter;
          AT_counter.Post;
          AT_counter.Close;
          AT_change.Open;
          AT_change.Append;
          AT_change['ID']:=counter;
          AT_change['员工号']:=i_user.Text;
          AT_change['变更代码']:='2';
          AT_change['变更时间']:=Now;
          AT_change['详细记录']:='加入公司';
          AT_change.Post;
          AT_change.Close;
          end;
          AddInit;
    end;procedure Tform5.FormCreate(Sender: TObject);
    begin
     with DM3 do
     begin
     if not AT_department.Active then AT_department.Open;
     if not AT_job.Active then AT_job.Open;
     if not AT_edu_level.Active then AT_edu_level.Open;
     end;
     AddInit;
    end;procedure Tform5.Button3Click(Sender: TObject);
    begin
      form5.Close;
      form2.Show;
    end;end.
      

  12.   

    问题解决了,不过到现在具体怎么解决的现在还有点说不清楚,把我解决的一些方法介绍如下:
    1、重写出错的ADOTABLE或QUERY组件。
    2、有时候加入空格也可以处理,这是为什么我也不理解。
    3、找到里面相同的代码替换后在改写。
    希望对大家有点帮助!