procedure TForm2.Button4Click(Sender: TObject);
var
  Sql:String;
begin
  begin
  if Self.DateTimePicker1.Date < Date then
  begin
    Application.MessageBox('日期不得早于今天','提醒',mb_ok);
    Exit;
  end;
  if Trim(ComboBox1.Text) = '' then
  begin
    Application.MessageBox('工作班组不得为空','提醒',mb_ok);
    Exit;
  end;    if Trim(Edit1.Text) = '' then
  begin
    Application.MessageBox('安排车辆不得为空','提醒',mb_ok);
    Exit;
  end;  //Query2.Close;
  //Query2.SQL.Clear;
  //Query2.SQL.Add('select * from ZW.QU order by NN DESC');
  //Query2.Open;  //tmp := Query2.FieldByName('NN').AsInteger;
  //Inc(tmp);  if Flag = 1 then
    Sql := 'Insert into ZW.BZ(NN,workdate,banzu,car) values(''' + IntToStr(Form1.Query1.FieldByName('NN').AsInteger +''','''+  DateToStr(Self.DateTimePicker1.Date) +  ''',''' + Trim(ComboBox1.Text) + ''',''' + Trim(Edit1.Text) + ''')';  if Flag = 2 then
    Sql := 'update ZW.BZ set workdate = ''' + DateToStr(Self.DateTimePicker1.Date) + ''', BANZU = ''' + Trim(ComboBox1.Text) + ''', car = ''' + Trim(Edit1.Text) +  ''' where  NN = ' + IntToStr(Query2.FieldByName('NN').AsInteger);  Query2.Close;
  Query2.SQL.Clear;  Query2.SQL.Add(Sql);
  Query2.ExecSQL;  Query1.Close;
  Query1.Open;  Edit1.Enabled := False;
  memo1.Enabled := False;
  DateTimePicker1.Enabled := False;
  ComboBox1.Enabled := False;
  memo2.Enabled := False;
  Button1.Enabled := True;
  Button2.Enabled := True;
  Button3.Enabled := True;
  Button4.Enabled := False;
  Button5.Enabled := False;
  if Flag = 2 then
    DBGrid1.Enabled := True;  Flag := 0;
end;
在这里总是提示incompatible types :'String'and 'Integer'的错误 
  if Flag = 1 then
    Sql := 'Insert into ZW.BZ(NN,workdate,banzu,car) values(''' + IntToStr(Form1.Query1.FieldByName('NN').AsInteger +''','''+  DateToStr(Self.DateTimePicker1.Date) +  ''',''' + Trim(ComboBox1.Text) + ''',''' + Trim(Edit1.Text) + ''')';
end.请高手指导  谢谢!!

解决方案 »

  1.   

    Sql := 'Insert into ZW.BZ(NN,workdate,banzu,car) values(''' + IntToStr(Form1.Query1.FieldByName('NN').AsInteger ~这里少个括号~  +''','''+  DateToStr(Self.DateTimePicker1.Date) +  ''',''' + Trim(ComboBox1.Text) + ''',''' + Trim(Edit1.Text) + ''')';
      

  2.   

    首先你要确定NN 这个字段是不是字符型,如果是,则才会如你所写的语句一样 如果不是,而是整形
    则: if Flag = 1 then
        Sql := 'Insert into ZW.BZ(NN,workdate,banzu,car) values(' + IntToStr(Form1.Query1.FieldByName('NN').AsInteger +','''+  
    不过我不赞成你用这样的方式,因为’即是字符串的引用符号,也是转义字符。经常会出错,
    采用参数吧
    我把你的写法转换一下:
    with Query2 do
    begin
        close;
        Sql := 'Insert into ZW.BZ(NN,workdate,banzu,car) values(:NN,:workdate,:banzu,:car)';
      Parameters.ParamByName('NN').Value:=Query1.FieldByName('NN').AsInteger ;
      Parameters.ParamByName('workdate').Value:=DateTimePicker1.Date;
      Parameters.ParamByName('banzu').Value:=Trim(ComboBox1.Text) ;
      Parameters.ParamByName('car').Value:=Trim(Edit1.Text) ;
      SQL.Add(Sql);
      ExecSQL;end;
      

  3.   

    楼上rocxu比较老道! 佩服! 这是基本的数据库操作方式,参数避免了使用‘符号的混淆,同时也增加了安全性,例如,在文本字段中加如’1=1 or 之类的字符值,会让你的验证代码形同虚设。还有text字段对于word或html字段的保存也会有问题,因为里面有一些数据库的保留字,、用参数是比较好的,给rocxu007鼓掌!