起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 315|回复: 14

【结贴】[请求]怪问题,有没有别的解决办法**

[复制链接]
发表于 2009-1-12 15:32:16 | 显示全部楼层 |阅读模式
GETTBNRGLBlist('TBLX=''用电最高负荷''');      
其中 FILTER就是  TBLX=''用电最高负荷''                    

stringUtils.Pos('负荷',FILTER) 是大于11,可是老是执行了else
                           if  stringUtils.Pos('负荷',FILTER) > 0  then
                             begin
                              FieldByName('DW').AsString :='MW' ;
                             end
                           else
                             begin
                              FieldByName('DW').AsString :='万KWh';
                             end;
回复

使用道具 举报

发表于 2009-1-12 15:41:27 | 显示全部楼层
重新编译一下呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-12 15:45:56 | 显示全部楼层
一样的
ss := stringUtils.Pos('负荷',FILTER);
后面ctrl+f7 是11,可是看ss时 就是0 晕了
回复 支持 反对

使用道具 举报

发表于 2009-1-12 15:49:08 | 显示全部楼层
if  stringUtils.Pos('负荷',FILTER) > 0  then
                             begin
                              FieldByName('DW').AsString :='MW' ;
                             end
                           else
                             begin
                              FieldByName('DW').AsString :='万KWh';
                             end;
放到按钮里执行看是不是正常的,贴一下完整的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-12 15:53:15 | 显示全部楼层
stringUtils.Pos('负荷',FILTER)  是11 ,stringUtils.Pos('负荷',FILTER) > 0 也是true 可是执行了else
回复 支持 反对

使用道具 举报

发表于 2009-1-12 15:56:18 | 显示全部楼层
if  stringUtils.Pos('负荷',FILTER) > 0  then
上设置断点看看每次“FILTER”的值都是什么?
或者把完整代码贴出来看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-12 16:05:51 | 显示全部楼层
aaStr := filter.replace('=','').replace('''','')

filter.replace('=','').replace('''','')可以得到TBLX='用电最高负荷
可以查看        aaStr是空字符串
回复 支持 反对

使用道具 举报

发表于 2009-1-12 16:10:12 | 显示全部楼层
贴一下完整代码吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-12 16:14:19 | 显示全部楼层
unit ZCT;

interface

uses
  Business.System, Business.Model, Business.Forms, Business.Data;

type
  TZCT = class(TForm)
    FuncBroker: TFuncBroker;
    InfoBrokerDD_LS_BBXX: TInfoBroker;
    ControlBar: TControlBar;
    DataNavigator: TDataNavigator;
    DocViewBar: TDocViewBar;
    Panel1: TPanel;
    Panel5: TPanel;
    Panel4: TPanel;
    Panel3: TPanel;
    Panel2: TPanel;
    DataSetLC: TSQLDataSet;
    DSB_LC: TDataSource;
    DataGrid1: TDataGrid;
    DataGrid1INST_ID: TDataGridColumn;
    DataGrid1TBNR: TDataGridColumn;
    DataGrid1TBSZ: TDataGridColumn;
    DataGrid1DW: TDataGridColumn;
    DataGrid1TBR: TDataGridColumn;
    DataGrid1TBDW: TDataGridColumn;
    DataGrid1TBSJ: TDataGridColumn;
    DataGrid1TBDSRQ: TDataGridColumn;
    DataGrid1KSSJ: TDataGridColumn;
    DataGrid1JSSJ: TDataGridColumn;
    DataGrid1TBLX: TDataGridColumn;
    DataGrid1TBDWLX: TDataGridColumn;
    DataGrid1TBNRLX: TDataGridColumn;
    DataGrid1GLID: TDataGridColumn;
    DateTimePicker1: TDateTimePicker;
    BitBtn4: TBitBtn;
    dsb220SJ: TDataSetBroker;
    dsb220NR: TDataSetBroker;
    procedure BizFormCreate(Sender: TObject);
    procedure Panel2Click(Sender: TObject);
    procedure Panel3Click(Sender: TObject);
    procedure Panel4Click(Sender: TObject);
    procedure Panel5Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
     FDQRQ: TDateTime;
     procedure GETSTARTTASKINF(FILTER:STRING);
     procedure GETTBNRGLBlist(FILTER:STRING);
     function SumData(TBDSRQ:String;INST_ID:String;TBNR:String;BZ:String):String;
     function SumData1(TBDSRQ:String;INST_ID:String;TBNR:String;BZ:String):String;
    {private declarations}
  public
    property DQRQ: TDateTime read FDQRQ write FDQRQ;
    {public declarations}
  end;

implementation

function TZCT.SumData1(TBDSRQ:String;INST_ID:String;TBNR:String;BZ:String):String;
Var
StrZdm,StrSql,StrY,StrM,StrD : string;
qry2 : TQuery;

begin
     StrY:= SysUtils.FormatDateTime('yyyy',SysUtils.StrToDate(TBDSRQ));
     StrM:= SysUtils.FormatDateTime('mm',SysUtils.StrToDate(TBDSRQ));
     StrD:= SysUtils.FormatDateTime('dd',SysUtils.StrToDate(TBDSRQ));
     if BZ='D' then
     StrSql :=' to_char(TBDSRQ,''YYYY'')= '+StrY+' and to_char(TBDSRQ,''MM'')= '+StrM+' and to_char(TBDSRQ,''DD'')= '+StrD+''
     else if  BZ='Y' then
     StrSql :=' to_char(TBDSRQ,''YYYY'')= '+StrY+' and to_char(TBDSRQ,''MM'')= '+StrM+' and to_char(TBDSRQ,''DD'')<= '+StrD+''
     else if  BZ='N' then
     StrSql :=' (TBDSRQ between to_date('''+StrY+'-01-01'',''yyyy-mm-dd'') and to_date('''+TBDSRQ+''',''yyyy-mm-dd''))' ;//to_char(TBDSRQ,''YYYY'')= '+StrY+'

     qry2:=TQuery.Create(nil);
     qry2.ConnectionString:=BizObjConsts.cSysDatabaseConnectionString;
     try

        if TBNR<>'' then
        begin
           qry2.CommandText:='SELECT count(*) as TBSZ FROM TBSJB where '+StrSql+' and glid='+INST_ID+' and tbnr like ''%'+TBNR+''' order by inst_id desc';
        end
        else
        begin
         qry2.CommandText:='SELECT count(*) as TBSZ FROM TBSJB where '+StrSql+' and glid='+INST_ID+' order by inst_id desc';
        end;
        qry2.Open;
        qry2.First;
        if not qry2.IsEmpty then
             begin
                 StrZdm := qry2.FieldByName('TBSZ').AsString;
             end
        else
            begin
                 StrZdm := '0';
            end;
        finally
               qry2.Free;
        end;
        if StrZdm='' then
        StrZdm := '0';
        Result := StrZdm;
end;

function TZCT.SumData(TBDSRQ:String;INST_ID:String;TBNR:String;BZ:String):String;
Var
StrZdm,StrSql,StrY,StrM,StrD : string;
qry2 : TQuery;

begin
     StrY:= SysUtils.FormatDateTime('yyyy',SysUtils.StrToDate(TBDSRQ));
     StrM:= SysUtils.FormatDateTime('mm',SysUtils.StrToDate(TBDSRQ));
     StrD:= SysUtils.FormatDateTime('dd',SysUtils.StrToDate(TBDSRQ));
     if BZ='D' then
     StrSql :=' to_char(TBDSRQ,''YYYY'')= '+StrY+' and to_char(TBDSRQ,''MM'')= '+StrM+' and to_char(TBDSRQ,''DD'')= '+StrD+''
     else if  BZ='Y' then
     StrSql :=' to_char(TBDSRQ,''YYYY'')= '+StrY+' and to_char(TBDSRQ,''MM'')= '+StrM+' and to_char(TBDSRQ,''DD'')<= '+StrD+''
     else if  BZ='N' then
     StrSql :=' (TBDSRQ between to_date('''+StrY+'-01-01'',''yyyy-mm-dd'') and to_date('''+TBDSRQ+''',''yyyy-mm-dd''))' ;//to_char(TBDSRQ,''YYYY'')= '+StrY+'

     qry2:=TQuery.Create(nil);
     qry2.ConnectionString:=BizObjConsts.cSysDatabaseConnectionString;
     try

        if TBNR<>'' then
        begin
           qry2.CommandText:='SELECT sum(TBSZ) as TBSZ FROM TBSJB where '+StrSql+' and (TBSZ is not null) and glid='+INST_ID+' and tbnr like ''%'+TBNR+''' order by inst_id desc';
        end
        else
        begin
         qry2.CommandText:='SELECT sum(TBSZ) as TBSZ FROM TBSJB where '+StrSql+' and (TBSZ is not null) and glid='+INST_ID+' order by inst_id desc';
        end;
        qry2.Open;
        qry2.First;
        if not qry2.IsEmpty then
             begin
                 StrZdm := qry2.FieldByName('TBSZ').AsString;
             end
        else
            begin
                 StrZdm := '0';
            end;
        finally
               qry2.Free;
        end;
        if StrZdm='' then
        StrZdm := '0';
        Result := StrZdm;//SysUtils.FormatFloat('0.00',SysUtils.StrToFloat(StrZdm));
end;

procedure TZCT.GETSTARTTASKINF(FILTER:STRING);
VAR sqltext:STRING;
BEGIN

   sqltext := 'SELECT * FROM TBSJB WHERE TBDSRQ = :TBDSRQ and '+FILTER+'' ;

         datasetLC.Active:=false;
         datasetLC.SQL.Text:=sqltext;
         datasetLC.Params.ParamByName('TBDSRQ').AsDate := FDQRQ;
         datasetLC.Active:=true;

END;
procedure TZCT.GETTBNRGLBlist(FILTER:STRING);
VAR
sqltext,cCL,aaStr:STRING;
isStr: boolean;
ss : integer;
lQuery: TQuery;
arrStr : array of string;
BEGIN


   TSQLDataSet(dsb220NR.DataSet).Close;
   TSQLDataSet(dsb220NR.DataSet).SQL.Text := 'SELECT * FROM TBNRGLB WHERE '+FILTER+' ' ;
   TSQLDataSet(dsb220NR.DataSet).Open;
   if not TSQLDataSet(dsb220NR.DataSet).IsEmpty then
   begin
       TSQLDataSet(dsb220NR.DataSet).First ;
       while not TSQLDataSet(dsb220NR.DataSet).Eof do
       begin
               if StrUtils.AnsiContainsText(FILTER,'出力') or StrUtils.AnsiContainsText(FILTER,'小水电电量') then
               begin
                                    if StrUtils.AnsiContainsText(FILTER,'出力') then
                                       cCL := '出力'
                                    else
                                       cCL := '小水电电量';
                                    lQuery := TQuery.Create(nil);
                                    try
                                      lQuery.Close;
                                      lQuery.ConnectionString := 'DATABASEURL=Biz:\DMIS\DMISSJK.DATABASE';
                                      lQuery.CommandText := ' SELECT FCONTENT FROM BDXXB WHERE FSCOPE ='''+cCL+''' ORDER BY FCONTENT';
                                      lQuery.Open;
                                      lQuery.First;
                                      While not lQuery.Eof do
                                      begin
                                        with TSQLDataSet(dsb220SJ.DataSet) do
                                        begin
                                        if SumData1(sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time)),dsb220NR.DataSet.FieldByName('INST_id').AsString,lQuery.Fields[0].AsString,'D')<>'0' then
                                          edit
                                        else
                                          Append;
                                        FieldByName('TBNR').AsString := dsb220NR.DataSet.FieldByName('TBNR').AsString+lQuery.Fields[0].AsString;
                                        FieldByName('TBDW').AsString := dsb220NR.DataSet.FieldByName('TBDWMC').AsString;
                                        FieldByName('TBLX').AsString :=dsb220NR.DataSet.FieldByName('TBLX').AsString;
                                        FieldByName('TBNRLX').AsString :=dsb220NR.DataSet.FieldByName('TBNR').AsString;
                                        FieldByName('GLID').AsInteger :=dsb220NR.DataSet.FieldByName('INST_id').AsInteger;
                                                      if(lQuery.Fields[0].AsString='水位')then
                                                          begin
                                                          FieldByName('DW').AsString :='米';
                                                          end
                                                      else if(lQuery.Fields[0].AsString='库容')then
                                                          begin
                                                          FieldByName('DW').AsString :='千立方米';
                                                          end
                                                      else if(StrUtils.AnsiContainsText(FILTER,'用电最高负荷'))then
                                                          begin
                                                          FieldByName('DW').AsString :='MW';
                                                          end
                                                      else if(StrUtils.AnsiContainsText(lQuery.Fields[0].AsString,'值'))then
                                                          begin
                                                          FieldByName('DW').AsString :='MW';
                                                          end
                                                      else
                                                          begin
                                                          FieldByName('DW').AsString :='万KWh';
                                                          end;
                                         FieldByName('TBDSRQ').AsDateTime:=DateUtils.DateOf(DateTimePicker1.Time);
                                         FieldByName('TBSZ').AsString := SumData(sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time)),dsb220NR.DataSet.FieldByName('INST_id').AsString,lQuery.Fields[0].AsString,'D');
                                        Post;
                                        end; //with
                                        lQuery.Next;
                                      end;
                                    finally
                                      lQuery.Free;
                                    end;
                                        TSQLDataSet(dsb220SJ.DataSet).Filter :='TBDSRQ='+sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time))+'  and '+FILTER+' ';
                                        TSQLDataSet(dsb220SJ.DataSet).Filtered := True;
                                        TSQLDataSet(dsb220SJ.DataSet).Open;
                                        DataGrid1.DataSource:=dsb220SJ;
               end
               else
               begin
                      with TSQLDataSet(dsb220SJ.DataSet) do
                      begin
                                        if SumData1(sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time)),dsb220NR.DataSet.FieldByName('INST_id').AsString,'','D')<>'0' then
                                          edit
                                        else
                                          Append;
                           FieldByName('TBNR').AsString :=dsb220NR.DataSet.FieldByName('TBNR').AsString;
                           FieldByName('TBDW').AsString := dsb220NR.DataSet.FieldByName('TBDWMC').AsString;
                           aaStr := FILTER.Replace('=','').Replace('''','').ToString;
                           ss := stringUtils.Pos('负荷',aaStr);
                           if  stringUtils.Pos('负荷',FILTER) > 0  then
                             begin
                              FieldByName('DW').AsString :='MW' ;
                             end
                           else
                             begin
                              FieldByName('DW').AsString :='万KWh';
                             end;


                           FieldByName('TBLX').AsString :=dsb220NR.DataSet.FieldByName('TBLX').AsString;
                           FieldByName('TBDWLX').AsString :=dsb220NR.DataSet.FieldByName('TBDWLX').AsString;
                           FieldByName('GLID').AsInteger :=dsb220NR.DataSet.FieldByName('INST_id').AsInteger;
                           FieldByName('TBDSRQ').AsDateTime:=DateUtils.DateOf(DateTimePicker1.Time);
                           FieldByName('TBSZ').AsString := SumData(sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time)),dsb220NR.DataSet.FieldByName('INST_id').AsString,'','D');
                           post;
                      end;//with
                                        TSQLDataSet(dsb220SJ.DataSet).Filter :='TBDSRQ='+sysutils.DateToStr(dateutils.DateOf(DateTimePicker1.Time))+' and '+FILTER+' ';
                                        TSQLDataSet(dsb220SJ.DataSet).Filtered := True;
                                        TSQLDataSet(dsb220SJ.DataSet).Open;
                                        DataGrid1.DataSource:=dsb220SJ;

               end;
         TSQLDataSet(dsb220NR.DataSet).Next ;
       end;
    end;




END;

procedure TZCT.BizFormCreate(Sender: TObject);
begin
DateTimePicker1.DateTime:=SysSrv.SysService.Time;
if not dsb220SJ.DataSet.Active then dsb220SJ.DataSet.Open ;
if not dsb220NR.DataSet.Active then dsb220NR.DataSet.Open ;
end;

procedure TZCT.Panel2Click(Sender: TObject);
begin
Panel2.Color:=$FAF8F6;
Panel3.Color:=$0e9b297;
Panel4.Color:=$0e9b297;
Panel5.Color:=$0e9b297;
  FDQRQ := DateUtils.DateOf(DateTimePicker1.Time);
  //GETSTARTTASKINF('TBLX=''电量''');
   GETTBNRGLBlist('TBLX=''电量''');
end;

procedure TZCT.Panel3Click(Sender: TObject);
begin
Panel2.Color:=$0e9b297;
Panel3.Color:=$FAF8F6;
Panel4.Color:=$0e9b297;
Panel5.Color:=$0e9b297;
  FDQRQ := DateUtils.DateOf(DateTimePicker1.Time);
  //GETSTARTTASKINF('TBLX=''出力''');
  GETTBNRGLBlist('TBLX=''出力''');
end;

procedure TZCT.Panel4Click(Sender: TObject);
begin
Panel2.Color:=$0e9b297;
Panel3.Color:=$0e9b297;
Panel4.Color:=$FAF8F6;
Panel5.Color:=$0e9b297;
  FDQRQ := DateUtils.DateOf(DateTimePicker1.Time);
  GETTBNRGLBlist('TBLX=''小水电电量''');
  //GETSTARTTASKINF('TBLX=''小水电电量''');
end;

procedure TZCT.Panel5Click(Sender: TObject);
begin
Panel2.Color:=$0e9b297;
Panel3.Color:=$0e9b297;
Panel4.Color:=$0e9b297;
Panel5.Color:=$FAF8F6;
  FDQRQ := DateUtils.DateOf(DateTimePicker1.Time);
  //GETSTARTTASKINF('TBLX=''用电最高负荷''');
//GETTBNRGLBlist('用电最高负荷');
  GETTBNRGLBlist('TBLX=''用电最高负荷''');
end;

procedure TZCT.BitBtn4Click(Sender: TObject);
begin
FDQRQ := DateUtils.DateOf(DateTimePicker1.Time);
{GETSTARTTASKINF('TBLX=''电量''');
GETSTARTTASKINF('TBLX=''出力''');
GETSTARTTASKINF('TBLX=''小水电电量''');
GETSTARTTASKINF('TBLX=''用电最高负荷'''); }
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-12 16:27:14 | 显示全部楼层
三条记录,全是负荷 就是第一次那个有问题

后面两条不会进入else
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 20:55 , Processed in 0.042417 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表