我在一个包含2列的数据库中创建了一个表,并用1和0填充了这两列。在前端,我有tdbgrid,它显示数据库中的那些值。当我点击按钮时
这是我编写的代码,但它没有在网格中显示。
procedure TForm1.Button1Click(Sender: TObject);
begin
i := ADODataSet1.FieldByName('id').AsInteger;
j := ADODataSet1.FieldByName('id2').AsInteger;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
if (i = j) and (i<>j) then
begin
ShowMessage('true');
// Exit;
end
Else
ShowMessage('false');
//Exit;
ADODataSet1.Next;
end;
end;
如何编写该代码。
答案 0 :(得分:0)
如果要实现OR门:
if (i = 1) or (j = 1) then
ShowMessage('true')
else
ShowMessage('false');
如果你想实现AND门:
if (i = 1) and (j = 1) then
ShowMessage('true')
else
ShowMessage('false');
你的逻辑也存在缺陷,i和j永远不会更新:
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
i := ADODataSet1.FieldByName('id').AsInteger;
j := ADODataSet1.FieldByName('id2').AsInteger;
// Magic happens here
ADODataSet1.Next;
end;
接下来,您可以使用布尔变量来清理代码:
var
A,B,C : Boolean;
begin
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
A := ADODataSet1.FieldByName('id').AsInteger = 1;
B := ADODataSet1.FieldByName('id2').AsInteger = 1;
// OR
C := A or B;
// AND
C := A and B;
// Do something with C.
ShowMessage(BoolToStr(C));
ADODataSet1.Next;
end;
end;
并且不要忘记处理任何错误(例如,如果在字段中找到2,该怎么办。
答案 1 :(得分:0)
您的第三列必须是计算字段(将其命名为结果),您应该将此字段添加到数据集中,否则您无法在其中显示网格。
为数据集ADODataSet1.OnCalcFields
Programming a Calculated Field
procedure TYourForm.ADODataSet1CalcFields(DataSet: TDataSet);
begin
if ( DataSet['id'] = 1 ) and ( DataSet['id2'] = 1 ) then
DataSet['Result'] := 1
else
DataSet['Result'] := 0;
end;