InsertMeterIDQuery.Close;
在这后面你要加入
InsertMeterIDQuery.SQL.ADD(SQL语句);----->这里不能少!
InsertMeterIDQuery.ParamByName('StartMeterID').AsString:=strStartMeterID;
InsertMeterIDQuery.ParamByName('EndMeterID').AsString:=strEndMeterID;
        
        
        

解决方案 »

  1.   

    tempWaterRecord表结构如下:
    Field Name  Type  Size  Key  Required filed
    ItemID      +            *    yes
    MeterID      A      20
    MonthNum    S
    RotateNum    N
    YearNum      S
    RecordDate  D
    WaterNum    S
      

  2.   

    InsertMeterIDQuery.Close;
    在这后面你要加入
    InsertMeterIDQuery.SQL.clear;);----->这里不能少!
    InsertMeterIDQuery.SQL.ADD(SQL语句);----->这里不能少!
    InsertMeterIDQuery.ParamByName('StartMeterID').AsString:=strStartMeterID;
    InsertMeterIDQuery.ParamByName('EndMeterID').AsString:=strEndMeterID;
            
            
            
      

  3.   

    但是我的SQL属性已经事先写在SQL属性中了,怎么还需要动态修改?
      

  4.   

            InsertMeterIDQuery.Close;
            InsertMeterIDQuery.Params.Clear();
            InsertMeterIDQuery.Params.CreateParam(ftString,'StartMeterID',ptInput);
            InsertMeterIDQuery.Params.CreateParam(ftString,'EndMeterID',ptInput);
            InsertMeterIDQuery.ParamByName('StartMeterID').AsString:=strStartMeterID;
            InsertMeterIDQuery.ParamByName('EndMeterID').AsString:=strEndMeterID;
            if InsertMeterIDQuery.prepared=false then
                InsertMeterIDQuery.Prepare;
            InsertMeterIDQuery.ExecSQL;
            InsertMeterIDQuery.close;
      

  5.   

    to blucecat(我真笨~编了20几年了还赶不上盖茨)兄:
    还是不行啊。
      

  6.   

    各位,我把整个单元贴出来,请帮帮忙再看看,谢了。unit ReadMeter;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Mask, Grids, DBGrids, ComCtrls;type
      TReadMeterForm = class(TForm)
        GroupBox1: TGroupBox;
        Label1: TLabel;
        txtStartMeterID: TEdit;
        Label2: TLabel;
        txtEndMeterID: TEdit;
        GroupBox2: TGroupBox;
        Label3: TLabel;
        txtYearNum: TMaskEdit;
        txtMonthNum: TComboBox;
        Label4: TLabel;
        Button1: TButton;
        Button2: TButton;
        DBGrid1: TDBGrid;
        txtRecordDate: TDateTimePicker;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      ReadMeterForm: TReadMeterForm;implementation
    uses
        DataModule,DB;{$R *.DFM}procedure TReadMeterForm.Button1Click(Sender: TObject);
    var
        strStartMeterID,strEndMeterID:string;
        SaveChoice:word;
    //    intYear,intMonth,intDay:word;
    begin
    if Button1.caption='开始录入' then  //edit mode
        begin
        //check input
        if txtYearNum.text='' then //invalid input
            begin
            showmessage('请输入年份!');
            txtYearNum.SetFocus();
            exit;
            end;
        if txtMonthNum.text='' then
        begin
            showmessage('请输入月份!');
            txtMonthNum.SetFocus();
            exit;
        end;
    (*    if pos(' ',txtRecordDate.text)<>0 then
        begin
            showmessage('请输入日期!');
            txtRecordDate.SetFocus();
            exit;
        end;
    *)    //form start and end meterid
        if txtStartMeterID.text='' then
            begin
            //get min meterid in table instead
            with WaterDM.MinMeterIDQuery do
            begin
                if prepared=false then
                    prepare;
                open;
                strStartMeterID:=FieldByName('MinMeterID').AsString;
                close;
            end;
            end;
        if txtEndMeterID.text='' then
        begin
            //get min meterid in table instead
            with WaterDM.MaxMeterIDQuery do
            begin
                if prepared=false then
                    prepare;
                open;
                strEndMeterID:=FieldByName('MaxMeterID').AsString;
                close;
            end;
        end;    //empty temp table
        with WaterDM.tempWaterRecordTable do
        begin
            if active=true then
                close;
            EmptyTable;
        end;    //generate new data
        with WaterDM do
        begin
            //generate meterid
            InsertMeterIDQuery.Close;
            InsertMeterIDQuery.ParamByName('StartMeterID').AsString:=strStartMeterID;
            InsertMeterIDQuery.ParamByName('EndMeterID').AsString:=strEndMeterID;
            showmessage(InsertMeterIDQuery.SQL.Strings[0]);
            if InsertMeterIDQuery.prepared=false then
                InsertMeterIDQuery.Prepare;
            InsertMeterIDQuery.ExecSQL;
            InsertMeterIDQuery.close;        //generate other data
            UpdatetempWaterRecordQuery.close;
            UpdatetempWaterRecordQuery.ParamByName('MonthNum').AsInteger:=StrToInt(txtMonthNum.text);
            UpdatetempWaterRecordQuery.ParamByName('YearNum').AsInteger:=StrToInt(txtYearNum.text);
            UpdatetempWaterRecordQuery.ParamByName('RecordDate').AsDate:=txtRecordDate.date;
            if UpdatetempWaterRecordQuery.prepared=false then
                UpdatetempWaterRecordQuery.prepare;
            UpdatetempWaterRecordQuery.ExecSQL;
            UpdatetempWaterRecordQuery.close;        //active input grid
            with WaterDM do
            begin
                if tempWaterRecordQuery.prepared=false then
                    tempWaterRecordQuery.prepare;
                tempWaterRecordQuery.open;
            end;
        end;    //change button caption
        button1.caption:='结束录入';
        end
    else    //save mode
        begin
            //confirm save input
            SaveChoice:=messagedlg('是否保存修改?',mtConfirmation,[mbYes,mbNo],0);
            //save or restore
            if SaveChoice=mrYes then    //save
                begin
                    with WaterDM do
                    begin
                        //apply updates in query
                        tempWaterRecordQuery.ApplyUpdates;                    MigrateQuery.close;
                        if MigrateQuery.prepared=false then
                            MigrateQuery.prepare;
                        MigrateQuery.ExecSQL;
                        MigrateQuery.close;
                    end;
                end
            else    //no save
                begin
                end;
            //empty temp table
            WaterDM.tempWaterRecordTable.EmptyTable();
            //change button caption
            button1.caption:='开始录入';        //close related tables
            if WaterDM.tempWaterRecordQuery.active=true then
                WaterDM.tempWaterRecordQuery.close;
        end;
    end;procedure TReadMeterForm.Button2Click(Sender: TObject);
    begin
        close;
    end;end.
      

  7.   

    to tikkypeng(千两狂死郎)兄:
    我试过了,还是不行。问题根本不出在这里,关键是为什么第二次执行时会出错呢?
      

  8.   

    是不是这个UpdatetempWaterRecordQuery报错??
      

  9.   

    很简单的错误,哈哈,第二次运行后发现字段重复,你进行Query操作前先删除对应记录看看。
      

  10.   

    也许这里也要创建参数(因为提示是:"Invalid Parameter",一定是参数的问题)
            UpdatetempWaterRecordQuery.close;
            UpdatetempWaterRecordQuery.ParamByName('MonthNum').AsInteger:=StrToInt(txtMonthNum.text);
            UpdatetempWaterRecordQuery.ParamByName('YearNum').AsInteger:=StrToInt(txtYearNum.text);
            UpdatetempWaterRecordQuery.ParamByName('RecordDate').AsDate:=txtRecordDate.date;
            if UpdatetempWaterRecordQuery.prepared=false then
                UpdatetempWaterRecordQuery.prepare;
            UpdatetempWaterRecordQuery.ExecSQL;
            UpdatetempWaterRecordQuery.close;