untanswerinput.pas

来自「简要说明:对医院幼儿心理情况做的一个调查,统计系统.」· PAS 代码 · 共 726 行 · 第 1/2 页

PAS
726
字号
procedure TfrmAnswerInput.adsQuestionAfterScroll(DataSet: TDataSet);
var
  i: Integer;
  bSelected: Boolean;
begin
  with DataSet do begin
    BitBtn1.Enabled := not Bof;
    BitBtn2.Enabled := not Eof;
  end;
  with FadsSelectItem do begin
    //过滤数据集
    if not Active then exit;
    if Filtered then Filtered := false;
    Filter := 'questioncode='+QuotedStr(DataSet.fieldByName('code').Value);
    Filtered := true;
    //刷新问题选项
    rgItem.Items.Clear;
    rgItem.Columns := RecordCount;
    Sort := 'code';
    First;
    i:=0; bSelected := false;
    while not Eof do begin
      rgItem.Items.Add(FieldByName('selecttag').AsString+'> '+FieldByName('content').AsString);
      if FieldByName('Value').AsInteger = DataSet.FieldByName('score').AsInteger then
        bSelected := True;
      if not bSelected then Inc(i);
      Next;
    end;
    if bSelected then rgItem.ItemIndex := i;
  end;
end;

procedure TfrmAnswerInput.BitBtn1Click(Sender: TObject);
begin
  inherited;
  FadsQuestion.Prior;
  if FadsQuestion.Bof then Exit;

  //触发题目切换事件
  QuestionIndexChange(0, FadsQuestion.FieldByName('XH').AsInteger);
end;

procedure TfrmAnswerInput.BitBtn2Click(Sender: TObject);
begin
  inherited;
  FadsQuestion.Next;
  if FadsQuestion.Eof then Exit;

  //触发题目切换事件
  QuestionIndexChange(0, FadsQuestion.FieldByName('XH').AsInteger);
end;

procedure TfrmAnswerInput.rgItemClick(Sender: TObject);
var
  iResult, i: Integer;
  code, SelectTag: string;
begin
  inherited;
  //得到选择结果分数
  if rgItem.ItemIndex < 0 then Exit;
  with FadsSelectItem do begin
    First;
    i:=0;
    while i<rgItem.ItemIndex do begin
      Next;
      Inc(i);
    end;
    iResult := FieldByName('value').AsInteger;
    code := FieldByName('code').AsString;
    SelectTag := fieldbyname('selecttag').AsString;
  end;
  //触发选项值被改变的事件
  ItemValueChange(0, iResult, code, SelectTag);
end;

procedure TfrmAnswerInput.ItemValueChange(iWay, iResult: Integer;
    code, SelectTag: string);
var
  I: Integer;
  QuestionXH: string;
begin
  //更改SCORE的值
  with FadsQuestion do begin
    if not (State in [dsInsert, dsEdit]) then Edit;
    FieldByName('score').Value := iResult;
    FieldByName('Answer').Value := SelectTag;
  end;
  //通知其他录入方式的控件,做相应的改变
  if iWay <> 0 then begin               //不是通过向导方式,则改变向导的控件
    for I:=0 to rgItem.Items.Count-1 do
      if SelectTag = Copy(rgItem.Items[I], 1, Length(SelectTag)) then
      begin
        rgItem.ItemIndex := I;
        Break;
      end;
  end;
  QuestionXH := GetDBValue(Conn, 'select xh from tquestion where code in (select questioncode from tselectitem where code='+QuotedStr(code)+')');
  if iWay <> 1 then begin
    TEdit(FindComponent('edt2'+QuestionXh)).Text := SelectTag;
  end;

  if iWay <> 2 then begin
    TEdit(FindComponent('edt3'+QuestionXh)).Text := SelectTag;
  end;
end;

procedure TfrmAnswerInput.QuestionIndexChange(iWay, iXH: Integer);
begin
  if iWay <> 0 then begin
    FadsQuestion.Locate('Xh',FXHList.Values['TAG'+IntToStr(iXh)], []);
  end;
  //刷新快速录入里面的选项
  mmoQuestion.Clear;
  mmoQuestion.Text:=FadsQuestion.FieldByName('content').asstring;
  memItem.Lines.Clear;

  with FadsSelectItem do begin
    First;
    while not Eof do begin
      if memItem.Text = '' then
        memItem.Text := FieldByName('SelectTag').Value + '> ' + FieldByName('content').Value
      else
        memItem.Text := memItem.Text+#13+#10+#13+#10
              +FieldByName('SelectTag').Value + '> ' + FieldByName('content').Value;
      Next;
    end;
  end;
end;

function TfrmAnswerInput.GetSelectTagByScore(AScore: Integer): string;
begin
  Result := '';
  with FadsSelectItem do begin
    if Locate('value', AScore, []) then
      Result := FieldByName('SelectTag').Value;
  end;
end;

procedure TfrmAnswerInput.edt3Enter(Sender: TObject);
begin
  inherited;
  QuestionIndexChange(2, TEdit(Sender).Tag);
end;

procedure TfrmAnswerInput.edt2Enter(Sender: TObject);
begin
  QuestionIndexChange(1, TEdit(Sender).Tag);
end;

{procedure TfrmAnswerInput.edt2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  iResult: Integer;
  Code: string;
begin
  if Key = VK_RETURN then begin
    if not CheckInput(TEdit(Sender).Tag, Trim(TEdit(Sender).Text), iResult, code) then
    begin
      MsgOK('输入问题选项的代号不正确!');
      Exit;
    end;
    //触发选项值被改变的事件
    ItemValueChange(1, iResult, code, Trim(TEdit(Sender).Text));
  end;
end;

procedure TfrmAnswerInput.edt3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  iResult: Integer;
  Code: string;
begin
  if Key = VK_RETURN then begin
    if not CheckInput(TEdit(Sender).Tag, Trim(TEdit(Sender).Text), iResult, code) then
    begin
      MsgOK('输入问题选项的代号不正确!');
      Exit;
    end;
    //触发选项值被改变的事件
    ItemValueChange(2, iResult, code, Trim(TEdit(Sender).Text));
  end;
end;}

function TfrmAnswerInput.CheckInput(QuestionXh: Integer;
  SelectTag: string; var iResult: Integer; var Code: string): Boolean;
var
  strSQL: string;
  ads: TADODataSet;
begin
  strSQL := 'select * '
          + 'from tSelectItem '
          + 'where questioncode in ( '
          + '           select code from tQuestion '
          + '           where xh='+QuotedStr(FXhList.Values['TAG'+IntToStr(QuestionXh)])
          + '             and grpcode in (select grpcode from tquestion where code='+QuotedStr(FadsQuestion['code'])+') '
          + '                      ) '
          + '  and selectTag = '+QuotedStr(SelectTag);
  ads := GetDataSet(Conn, strSQL);
  Result := ads.RecordCount > 0;
  if not Result then begin
    ads.Free;
    Exit;
  end;
  iResult := ads['value'];
  Code := ads['code'];
  ads.Free;
end;

procedure TfrmAnswerInput.edt2Exit(Sender: TObject);
var
  iResult: Integer;
  Code: string;
begin
  if Trim(TEdit(Sender).Text) = '' then Exit;
  if not CheckInput(TEdit(Sender).Tag, Trim(TEdit(Sender).Text), iResult, code) then
  begin
    MsgOK('输入问题选项的代号不正确!');
    TEdit(Sender).SetFocus;
    Exit;
  end;
  //触发选项值被改变的事件
  ItemValueChange(1, iResult, code, Trim(TEdit(Sender).Text));
end;

procedure TfrmAnswerInput.edt3Exit(Sender: TObject);
var
  iResult: Integer;
  Code: string;
begin
  if Trim(TEdit(Sender).Text) = '' then Exit;
  if not CheckInput(TEdit(Sender).Tag, Trim(TEdit(Sender).Text), iResult, code) then
  begin
    MsgOK('输入问题选项的代号不正确!');
    TEdit(Sender).SetFocus;
    Exit;
  end;
  //触发选项值被改变的事件
  ItemValueChange(2, iResult, code, Trim(TEdit(Sender).Text));
end;

procedure TfrmAnswerInput.btnOKClick(Sender: TObject);
var
  str:string;
  ResultID:Integer;
begin
  inherited;
  //保存每个问题的分数
  ADOdsQuestionDa.SQL.Text:='select ResultID,ChildRenID,Code,XH,DA from tQuestionDa';
  ADOdsQuestionDa.Open;
  with FadsQuestion do
  begin
    first;
    while not eof do
    begin
      if Fields[7].AsString<>'' then
      begin
         ADOdsQuestionDa.Append;
         ADOdsQuestionDa.Fields[0].AsInteger:=PatientID;
         ADOdsQuestionDa.Fields[1].AsInteger:=PatientID;
         ADOdsQuestionDa.Fields[2].AsString:=Fields[0].AsString;
         ADOdsQuestionDa.Fields[3].AsString:=Fields[1].AsString;
         ADOdsQuestionDa.Fields[4].AsString:=Fields[7].AsString;
         ADOdsQuestionDa.Post;
       end;

       Next;
    end;
    First;
  end;
  CalcResult;
end;

procedure TfrmAnswerInput.CalcResult;
begin
  LoadMeasureItem;
  if Calc then ModalResult := mrOk;
end;

procedure TfrmAnswerInput.LoadMeasureItem;
var
  strSQL: string;
  I: Integer;
begin
  //创建结果数据集结构
  with FadsResult do begin
    with FieldDefs do begin
      Add('code', ftString, 10);
      Add('name', ftString, 50);
      Add('formula', ftString, 800);
      Add('score', ftFloat);
    end;
    CreateDataSet;
  end;
  //初始化数据
  strSQL := ' select code,name,formula,score=0 '
          + ' from tMeasure_Item '
          + ' where MeasureCode='+QuotedStr(MeasureCode)
          + '   and NeedFormula=1 and ltrim(rtrim(formula))<>''''';
  with GetDataSet(Conn, strSQL) do begin
    try
      First;
      while not Eof do begin
        adsResult.Append;
        for i:=0 to adsResult.FieldCount-1 do
          adsResult.Fields[i].Value := Fields[i].Value;
        adsResult.Post;
        Next;
      end;
    finally
      Free;
    end;
  end;
end;

function TfrmAnswerInput.Calc: Boolean;
var
  args: array of Extended;
  i: Integer;
begin
  Result := false;
  try
    FCalcExpress := TCalcExpress.Create(Self);
    SetLength(args, FadsQuestion.RecordCount);
    with FCalcExpress do begin
      FadsQuestion.First;  i:=0;

      while not FadsQuestion.Eof do begin
         Variables.Add(FadsQuestion['VarTag']);
        //分数初始化为-1,要判断该问题是否得分
        if FadsQuestion.fieldbyname('score').Value<>-1 then
           args[i] := FadsQuestion.fieldbyname('score').Value
        else  args[i]:=0;
        FadsQuestion.Next;
        Inc(i);
      end;
    end;
    with adsResult do begin
      First;
      while not Eof do begin
        Edit;
        FCalcExpress.Formula := FieldByName('formula').AsString;
        FieldByName('score').Value := FCalcExpress.calc(args);
        Post;
        Next;
      end;
    end;
  except
    MsgOK('公式计算出错!');
    Exit;
  end;
  Result := true;
end;

procedure TfrmAnswerInput.pgc1Change(Sender: TObject);
begin
  inherited;
  if pgc1.ActivePageIndex=2   then
     QuestionIndexChange(2,FadsQuestion.FieldByName('XH').AsInteger);

end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?