一个窗体下查询数据库代码如下:procedure Tinquiry.Button1Click(Sender: TObject);
begin
   if(Edit18.Text<>'') then
  begin
   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Text:= 'select * from data where 制单号 ='''+trim(edit18.text)+'''';
   Query1.Open;
     edtdate.Text :=Query1.Fieldbyname('日期').AsString;
     edtsn.Text := Query1.Fieldbyname('编号').AsString;
     end;end;根据Edit18里输入的制单号查询出对应的日期,编号
现在我想修改查询的日期,并通过点击一个button使修改过的日期、编号代替原来的记录存入数据库,请问该怎么写?“
“制单号”是表关键字

解决方案 »

  1.   

    写个update语句就行了。~~
    update data set 日期 ='2009-01-01',编号='newnum' where 制单号= 'qwwqeqeqw'
      

  2.   

    Query1.Edit;
    Query1.FieldByName('字段名').AsString := 'xxxx';
    Query1.Post;
      

  3.   


    begin
       Query1.Close;
       Query1.SQL.Clear;
       Query1.SQL.Text:= 'update data set 日期='''+edtdate.Text+''' and 编号='''+edtsn+''' from data where 制单号 ='''+trim(edit18.text)+'''';
       Query1.Open;
    end;
      

  4.   

    谢谢大家,我用的是Access,如果我一条记录中间包括很多列(项),但我只每次可能都只需要修改其中固定的几项,请问只update那固定的几项可以吗?
      

  5.   

    可以
    Update 表名 set 列名1=X1,列名2=X2.. where 条件
      

  6.   

    Query1.Edit; 
    Query1.FieldByName('字段1').AsString := 'x1'; 
    Query1.FieldByName('字段2').AsString := 'x2';
    Query1.FieldByName('字段3').AsString := 'x3';
    Query1.FieldByName('字段4').AsString := 'x4';
    Query1.Post;
      

  7.   


    procedure Tinquiry.Button2Click(Sender: TObject);   begin
       Query1.Close;
       Query1.SQL.Clear;
       Query1.SQL.Text:= 'update data set 日期='''+edtdate.Text+''' and 批量='''+Edit9.Text+''' from data where 制单号 ='''+trim(edit5.text)+'''';
       Query1.Open;
    end;
    编译没有问题,
    点击按键执行修改记录时提示:
    Project Project1.exe raised exception class EOleException with message
    '语法错误(操作符丢失)在查询表达式''a' and 批量='b0' from data中。'
    请问是怎么回事呢
      

  8.   

    请问里面的x1,x2,x3,x4 是什么?
    完整的写法是什么?
      

  9.   


    当然是要赋的值了~~可以改成这样 
    Query1.Edit;
    Query1.FieldByName('字段1').AsString := x1;
    Query1.FieldByName('字段2').AsString := x2;
    Query1.FieldByName('字段3').AsString := x3;
    Query1.FieldByName('字段4').AsString := x4;
    Query1.Post;x1,x2,x3,x4在这里是字符变量~~
      

  10.   

    我写错了 把中间的and改成,
      

  11.   

    对不起,我的问题全是小菜级的,
    x1,x2,x3,x4全是要赋的值的话,那我在写代码的时候并不知道我要改成什么值啊,我是要实现修改的功能啊,要以后要edtdate 里面修改日期,在edtsn里修改编号。
    我前面的界面有一个将记录存入数据库的过程:procedure TForm4.N3Click(Sender: TObject);
    var  str2,str,t1, t2,t3: String;begin
     Query3.SQL.Text:= 'select * from PM where 编号 ='''+trim(Form5.Edit1.text)+'''';
         Query3.Open;
         t1:= Query1.fieldbyname('安规认证').asstring;
         t2:= Query1.fieldbyname('商标').asstring;
         t3:= Query1.fieldbyname('规格').asstring;
    with Query2 do
    begin
           close;
           sql.Clear;
           str := 'insert into data(制单号,日期,批量,入库日期,编号,品名规格,制品尺寸,脚径,脚长,安规认证,商标,内芯,外壳,熔丝,铜帽,玻璃管,陶瓷管,外箱,内盒,胶袋,双铜帽,Y值参数,成品电阻范围,米电阻范围,规格,焊锡丝,引脚方向,引线,备注)';
           str2 := 'values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o,:p,:q,:r,:s,:t,:u,:v,:w,:x,:y,:z,:1,:2,:3)';
            sql.Text := str + str2;
            parameters.ParamByName('a').Value := Trim(Edit5.Text);
            parameters.ParamByName('b').Value := Trim(FormatDateTime('yyyy-mm-dd',dtp1.Date));
            parameters.ParamByName('c').Value := Trim(Edit9.Text);
            parameters.ParamByName('d').Value := Trim(FormatDateTime('yyyy-mm-dd',dtp2.Date));
            parameters.ParamByName('e').Value := Trim(edtsn.Text);
            parameters.ParamByName('f').Value := Trim(edtps.Text);
            parameters.ParamByName('g').Value := Trim(Edit4.Text);
            parameters.ParamByName('h').Value := Trim(Edit3.Text);
            parameters.ParamByName('i').Value := Trim(edtfl.Text);
            parameters.ParamByName('j').Value := t1;
            parameters.ParamByName('k').Value := t2;
            parameters.ParamByName('l').Value := Trim(Edit6.Text);
            parameters.ParamByName('m').Value := Trim(Edit2.Text);
            parameters.ParamByName('n').Value := Trim(Edit7.Text);
            parameters.ParamByName('o').Value := Trim(Edit1.Text);
            parameters.ParamByName('p').Value := Trim(Edit8.Text);
            parameters.ParamByName('q').Value := Trim(Edit19.Text);
            parameters.ParamByName('r').Value := Trim(Edit15.Text);
            parameters.ParamByName('s').Value := Trim(Edit16.Text);
            parameters.ParamByName('t').Value := Trim(Edit17.Text);
            parameters.ParamByName('u').Value := Trim(Edit21.Text);
            parameters.ParamByName('v').Value := Trim(Edit13.Text);
            parameters.ParamByName('w').Value := Trim(Edit14.Text);
            parameters.ParamByName('x').Value := Trim(Edit12.Text);
            parameters.ParamByName('y').Value := t3;
            parameters.ParamByName('z').Value := Trim(Edit20.Text);
            parameters.ParamByName('1').Value := Trim(Edit11.Text);
            parameters.ParamByName('2').Value := Trim(Edit10.Text);
            parameters.ParamByName('3').Value := Trim(Memo2.Text);
            execsql;end;
        end;我不知道怎么用update语句来修改已存储的记录,我试着用前面几位大哥的方法,可是会出现9楼的错误procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text:= 'update data set 日期='''+edtdate.Text+''' and 批量   ='''+Edit9.Text+'''where 制单号 ='''+trim(edit5.text)+'''';
      Query1.Open;end;
      

  12.   

    Prince大哥,我把and 改成,之后,依旧是能编译成功,但点“修改”时弹出错误提示:
    当前提供程序不支持从单一执行返回多个记录集还有问题
      

  13.   

    procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text:= 'update data set 日期=QuotedStr(edtdate.Text), 批量=QuotedStr(Edit9.Text) where 制单号 =QuotedStr(trim(edit5.text))';
      Query1.Open;end;
      

  14.   

    procedure Tinquiry.Button2Click(Sender: TObject); begin 
    Query1.Close; 
    Query1.SQL.Clear; 
    Query1.SQL.Text:= 'update data set 日期=QuotedStr(edtdate.Text), 批量=QuotedStr(Edit9.Text) where 制单号 =QuotedStr(trim(edit5.text))'; 
      Query1.ExecSQL; //当增加或修改数据时,要用ExecSQL,查询数据时用openend;
      

  15.   

    错误提示:表达式中'QuotedStr'未定义 
    少了什么东西吗?
      

  16.   

    回de410大哥,我按照您的回复改成:procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
      Query1.SQL.Clear;
     Query1.SQL.Text:='update data set 日期=QuotedStr(edtdate.Text), 批量=QuotedStr(Edit9.Text) where 制单号 =QuotedStr(trim(edit5.text))';
     Query1.ExecSQL;end;
    编译能过,但执行修改操作时会提示‘QuotedStr’未定义
      

  17.   

    呵呵~~那就Princezhouf的吧procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text:= 'update data set 日期='''+edtdate.Text+''',批量   ='''+Edit9.Text+'''where 制单号 ='''+trim(edit5.text)+'''';
      Query1.ExecSQL;end;
      

  18.   


    procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
      Query1.SQL.Clear;
     Query1.SQL.Text:='update data set 日期='''+edtdate.Text+''', 批量='''+Edit9.Text+''' from data where 制单号 ='''+trim(edit5.text)+'''';
     //Query1.SQL.Text:='update data set 日期=QuotedStr(edtdate.Text), 批量=QuotedStr(Edit9.Text) where 制单号 =QuotedStr(trim(edit5.text))';
     Query1.ExecSQL;end;我前面也用他的试过了,出现问题:Project Project1.exe raised exception class EOleException with message ‘语法错误(操作符丢失)在查询表达''b00'from data'中’ 
    怎么办啊,
    我快崩溃了,不知道是不是程序其他的部分的错误,
    估计大哥你也要被我问得崩溃了
      

  19.   

    不好意思,我没有认真看他的语句procedure Tinquiry.Button2Click(Sender: TObject); begin
     Query1.Close;
      Query1.SQL.Clear;
     Query1.SQL.Text:='update data set 日期='''+edtdate.Text+''', 批量='''+Edit9.Text+''' where 制单号 ='''+trim(edit5.text)+'''';//他的语句多了from data,去掉即可
      Query1.ExecSQL;end;