procedure TfrmExcel.CreateTmpTable;
begin
    with tblTmp do
    begin
      Active := False;
      TableName := MakeTempFileName;
      with FieldDefs do
      begin
        Clear;
        Add('CONTENT', ftString, 254, False);
        Add('MEMO', ftString, 254, False);
      end;
      CreateTable;
      Open;
    end;end;//////////////// with qrySMSExs do   //利用query
          begin
            DatabaseName := DM.Database1.DatabaseName;
             Sql.Clear;
             Sql.Add('insert into SMS(ID, INX, CONTENT,MEMO)');
             Sql.Add('values (:ID, :INX , :CONTENT, :MEMO)');
             ParamByName('ID').AsString :=  CATALOG_ID ;
             ParamByName('INX').AsInteger := INX    ;            showmessage(tblTmp.FieldByName('CONTENT').AsString);
            showmessage(tblTmp.FieldByName('MEMO').AsString);
            ParamByName('CONTENT').AsString :=  tblTmp.FieldByName('CONTENT').AsString;
            ParamByName('MEMO').AsString :=  tblTmp.FieldByName('CONTENT').AsString;
          
            // ParamByName('CONTENT').AsString := tblTmp.FieldValues['CONTENT'] ;
            // ParamByName('MEMO').AsString :=   tblTmp.FieldValues['MEMO'];
      
            ExecSQL;
          end ;ExecSQL时 为何提示类型不匹配,而下边这段代码又可以正常插入数据
 with tblFromExcel  do  //利用表
          begin
            DatabaseName := DM.Database1.DatabaseName;
            TableName := 'SMS' ;
            Open;
            Append;
            FieldValues['ID'] := CATALOG_ID ;
            FieldValues['INX'] := INX;
            FieldValues['CONTENT'] :=  tblTmp.FieldValues['CONTENT'] ;;
            FieldValues['MEMO'] :=  tblTmp.FieldValues['MEMO'] ; ;
            //try
            Post;
          end ;

解决方案 »

  1.   

    ParamByName('CONTENT').value:=  tblTmp.FieldByName('CONTENT').AsString;
    ParamByName('MEMO').value:=...... 不用asstring
      

  2.   

    Sql.Add('insert into SMS(ID, INX, CONTENT,MEMO)');
    Sql.Add('values (:ID, :INX , :CONTENT, :MEMO)');
    ParamByName('ID').DataType := ftString;
    ParamByName('ID').ParamType := ptInput;
    ParamByName('INX').DataType := ftInteger;
    ParamByName('INX').ParamType := ptInput;
    ParamByName('CONTENT').DataType := ftString;
    ParamByName('CONTENT').ParamType := ptInput;
    ParamByName('MEMO').DataType := ftString;
    ParamByName('MEMO').ParamType := ptInput;
    ....