我写了这个语句提示有错,请问应该怎么改,请高手赐教
unit storeinedt;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, DB, StdCtrls, ComCtrls, ExtCtrls, Grids, DBGrids, Mask,
  DBCtrls;type
  Tfrmstoreinedt = class(TForm)
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    ADOQuery1: TADOQuery;
    Button1: TButton;
    DataSource1: TDataSource;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmstoreinedt: Tfrmstoreinedt;
  rt:string;implementation{$R *.dfm}procedure Tfrmstoreinedt.Button1Click(Sender: TObject);
begin
rt:=edit1.Text;
with  ADOQuery1 do
 begin
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into 入库信息表 (入库物料代码) values (:rt)');
  //ADOQuery1.Parameters.ParamByName('rt').Value:=trim(edit1.Text);  ADOQuery1.Open;
  ADOQuery1.ExecSQL;
 end;
end;end.
出错:无法将NULL值插入列'入库物料代码',表'库存管理.dbo.入库信息表';改列不允许空值。insert失败。

解决方案 »

  1.   

    ADOQuery1.Open;//怎么还用open?
      ADOQuery1.ExecSQL;
      

  2.   

    我把ADOQuery1.Open去掉了还是出一样的问题 不知道这到底应该怎么写 格式也不清楚对不对 请教高手 谢谢!!!!!!!!!!
      

  3.   

    怎么把这句取消了?
     //ADOQuery1.Parameters.ParamByName('rt').Value:=trim(edit1.Text);
      

  4.   

    楼主你那写入也太麻烦了吧...告诉你个简单的..
    rt:=trim(edit1.Text);
    with  ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('insert into 入库信息表 (入库物料代码) values ('''+rt+''')');
        ExecSQL;
      end;
      

  5.   

    procedure Tczyglfm.xgeditClick(Sender: TObject);
    begin
      if xmedit.Text='' then
        begin
          showmessage('姓名不能为空!');
          exit;
        end;
      try
        with adoquery do
          begin
            close;
            sql.Clear;
            sql.Add('update czyb set 权限=:qx,密码=:mm where 姓名=:xm');
            Parameters.ParamByName('xm').Value:=trim(xmedit.Text);
            Parameters.ParamByName('qx').Value:=trim(qxbox.Text);
            Parameters.ParamByName('mm').Value:=trim(mmedit.Text);
            execsql;
            showmessage('修改成功!');
            xmedit.Text:='';
            mmedit.Text:='';
            qxbox.Text:='';
          end;
        except
          showmessage('修改失败!');
      end;
      with adoquery do
        begin
          close;
          sql.Clear;
          sql.Add('select * from czyb');
          open;
        end;
    end;这样删除的时候即使是数据库里面没有的纪录也会显示删除成功 怎样改才能查询完后显示该数据库中不存在这条纪录 请教高手!!!!!!!!!!!! 谢谢
      

  6.   

    楼上的,你那语句有问题吧...应该是
    if 条件  then
      begin
      end
    else
      begin
      end;
      

  7.   

    select * from table where  条件if(dataset.recordcout>0)
    .....
      

  8.   

    如果要删除,就在删除之前进行一次查询
    其实只要是修改的(查询不是)都要查一下的懂我意思了吧
    比如用adoquery
    就先执行一次查询
    判断存不存在然后再执行那个删除
      

  9.   

    mypath:=extractfilepath(paramstr(0));
      ADOquery.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+mypath+'data\kcgl.mdb;Persist Security Info=False';
      ADOquery.active:=true;我想我知道你大概什么意思了 我再努力试试  谢谢我想请问一下这段中的第一句是什么意思 我不太懂
      

  10.   

    extractfilepath(paramstr(0))是用来获取当前程序所在文件夹路径的
      

  11.   

    是不是这样获取文件夹路径的就不用配置odbc了
      

  12.   

    procedure Tfrmrkcx.btncxClick(Sender: TObject);
    var
    //str:string;
    begin
      if (rbtnwlmc.Checked=false) and (rbtnwlbh.Checked=false) and (rbtnjhrq.Checked=false) then
        begin
          showmessage('请选择查询条件!');
          exit;
        end;  with adoquery do
        begin
          close;
          sql.Clear;
          case checked of
            1:
              begin
                sql.Add('select * from rukub where 物料名称=:wlmc');
                Parameters.ParamByName('wlmc').Value:=cmbwlmc.Text;
                if cmbwlmc.Text='' then
                  showmessage('请输入物料名称!')
              end;
            2:
              begin
                sql.Add('select * from rukub where 物料编号 =:wlbh');
                Parameters.ParamByName('wlbh').Value:=edtwlbh.Text;
                if edtwlbh.Text='' then
                  showmessage('请输入物料编号!')
              end;
            3:
              begin
                sql.Add('select * from rukub where 进货日期>=:jhrq1 and 进货日期<=:jhrq2');
                Parameters.ParamByName('jhrq1').Value:=datetostr(dtpjhrq1.Date);
                Parameters.ParamByName('jhrq2').Value:=datetostr(dtpjhrq2.Date);          end;
            end;
        open;
      end;
    end;我想在条件2或3查询的时候能够实现模糊查询 但是不会写具体的代码 总是出现错误 请高手指教 非常感谢啦
      

  13.   

    只要条件2能实现模糊查询就可以 
    2:
              begin
                sql.Add('select * from rukub where 物料编号 like wlbh');
                Parameters.ParamByName('wlbh').Value:=edtwlbh.Text;
                if edtwlbh.Text='' then
                  showmessage('请输入物料编号!')
              end;
    请高手指点!!!!!!!!!