在使用checkbox时。我要把他表示的状态插入到数据库中或修改。
我先定义了(var m1:integer)作为变量使用如下代码:
procedure TForm3.CheckBox1Click(Sender: TObject);
begin
    if checkbox1.Checked=true then
       begin
        m1:=1;
       end
    else
        m1:=0;
end;
procedure TForm3.Button3Click(Sender: TObject);
var s:string;
begin   
    if ty=1 then
      begin
       s:='insert into jqjs (syzt) values (m1)';
       dm1.ADO1.Execute(s);
      end
    else
      begin
       s:='update jqjs set syzt=m1 where bh='''+trim(edit1.Text)+'''';
       dm1.ADO1.Execute(s);
      end;
end;
可是运行的时候出错说不允许使用m1.只能使用常/变量或表达式。
怎么解决这个问题。希望大哥门帮忙指点一下。。

解决方案 »

  1.   

    把s:='insert into jqjs (syzt) values (m1)';改为
    s:='insert into jqjs (syzt) values (' + m1 + ')';
      

  2.   

    把s:='insert into jqjs (syzt) values (m1)';改为
    s:='insert into jqjs (syzt) values (' + m1 + ')';
    这样是不行的。
      

  3.   

    呵呵,写错了,应该改成这样试试:
    s:='insert into jqjs (syzt) values (' + IntToStr (m1) + ')';
      

  4.   

    在使用checkbox时。我要把他表示的状态插入到数据库中或修改。
    我先定义了(var m1:integer)作为变量使用如下代码:
    procedure TForm3.CheckBox1Click(Sender: TObject);
    begin
        if checkbox1.Checked=true then
           begin
            m1:=1;
           end
        else
            m1:=0;
    end;
    procedure TForm3.Button3Click(Sender: TObject);
    var s:string;
    begin   
        if ty=1 then
          begin
           s:='insert into jqjs (syzt) values (m1)';
           dm1.ADO1.Execute(s);
          end
        else
          begin
           s:='update jqjs set syzt=m1 where bh='''+trim(edit1.Text)+'''';
           dm1.ADO1.Execute(s);
          end;
    end;
    可是运行的时候出错说不允许使用m1.只能使用常/变量或表达式。
    怎么解决这个问题。等待大哥们的指点。。
      

  5.   

    只看程序的话别的错误似找不到,不过这一点是肯定的,就是用到ml的字符串不可以直接把m1放在字符串中,所有的字符串应作如下修改:
    'test str1' + inttostr(m1) + 'test str2';
    你可以在dm1.ADO1.Execute(s);之前把S显示出来看看,如
           s:='update jqjs set syzt=m1 where bh='''+trim(edit1.Text)+'''';
           showmessage(s);
           dm1.ADO1.Execute(s);
    确认你所生成的SQL语句是否正确。
      

  6.   

    1. 你给出的代码要进行如下的修改:
    procedure TForm3.CheckBox1Click(Sender: TObject);
    begin
        if checkbox1.Checked=true then
           begin
            m1:=1;
           end
        else
            m1:=0;
    end;
    procedure TForm3.Button3Click(Sender: TObject);
    var s:string;
    begin   
        if ty=1 then
          begin
           s:='insert into jqjs (syzt) values (' + IntToStr(m1) + ')';
           dm1.ADO1.Execute(s);
          end
        else
          begin
           s:='update jqjs set syzt=' + IntToStr(m1) + ' where bh='''+trim(edit1.Text)+'''';
           dm1.ADO1.Execute(s);
          end;
    end;2. 你没给出的代码是否有错, 我们不得而知, 因为在procedure TForm3.CheckBox1Click(Sender: TObject);和procedure TForm3.Button3Click(Sender: TObject);中使用到的变量ml, 我们看不出是在哪里定义的, 在这两个procedure是否能使用到这个变量ml, 我们不得而知.
      

  7.   

    楼上大哥的方法我已经试过了。仍然出错
    我定义m1位置如下 
    var
      Form3: TForm3;
      m1:integer;
    implementation
    uses
      jfgl,_dm1;
    {$R *.dfm}
    再帮我看看那里有错啊
      

  8.   

    编译的时候都上面的代码都没有问题。就是运行的时候
    出错
    。message'将截断字符窜或二进制数据'
      

  9.   

    出错是发生在 ty=1 时还是 ty<>1 时?如果是 ty <> 1时, 那么 edit1.Text 是什么内容?
      

  10.   

    edit1.Text 表示编号。
    错误在ty=1 时还是 ty<>1 时都有发生。
      

  11.   

    我在sql数据库中定义的chexkbox是bit类型的。
    使用
    s:='insert into jqjs (syzt) values ('+''''+IntToStr(m1)+''''+')'出错
    提示;;;将varchar值'+inttostr(m1)+'转化为bit列时发生语法错误。。
    小弟我是初学者。请大哥指点
      

  12.   

    bit在delphi里对应的是true 和 false,所以根据m1的值,s:='insert into jqjs (syzt) values (true)'或者s:='insert into jqjs (syzt) values (false)'。
    给分吧!!!!!!!!
      

  13.   

    楼上的说的bit在delphi里对应的是true 和 false,所以根据m1的值,s:='insert into jqjs (syzt) values (true)'或者s:='insert into jqjs (syzt) values (false)'。
    实在是太离谱了吧。这也对啊
      

  14.   

    procedure TForm3.CheckBox1Click(Sender: TObject);
    begin
        if checkbox1.Checked=true then
           begin
            m1:=1;
           end
        else
            m1:=0;
    end;
    这个事件可以不用写的
    SQL语句改成
    s:='Insert into jqjs (syzt) values('+booltostr(checkbox1.checked)+')'试试
      

  15.   

    。message'将截断字符窜或二进制数据'
    多半是你的数据库定义的字段大小或类型不匹配,你看看你数据库里的数据类型是什么和你传过去的值是否匹配!