
表格名為DD
希望把DBgird 表里面的a01+a02+a03+a04如果不是中文的合計到 完成項里面,請問有什么方法?
找到很多例子都沒結果,謝謝各位大大
困擾了很久!
uj5u.com熱心網友回復:
tryfieldbyname('完成').asinteger:=fieldbyname('a01').asinteger+fieldbyname('a02').asinteger+fieldbyname('a03').asinteger+fieldbyname('a04').asinteger
except
fieldbyname('完成').asinteger:=0;
//非數字,即相加失敗,所以不用計算
end;
您這個問題太高端了,我小學剛畢業,不知回答對不對。
uj5u.com熱心網友回復:
在資料源處理會簡單些,如果是ADOQuery的話,就在SQL中處理,MSSQL可以用case isnumeric(a01) when 1 then convert(int,a01) else 0 end + case isnumeric(a02) when 1 then convert(int,a02) else 0 end + case isnumeric(a03) when 1 then convert(int,a03) else 0 end + case isnumeric(a04) when 1 then convert(int,a04) else 0 end AS '完成'uj5u.com熱心網友回復:

兄弟,請指教,一運行就出錯了!
應該放在那里運行,還是怎么樣?
uj5u.com熱心網友回復:
先查詢,再相加。uj5u.com熱心網友回復:
with adoquery1 dobegin
...查詢陳述句
try
fieldbyname('完成 ').asinteger:=fieldbyname('a01').asinteger+fieldbyname('a02').asinteger+fieldbyname('a03').asinteger+fieldbyname('a04').asinteger
except
fieldbyname('完成').asinteger:=0;
//非數字,即相加失敗,所以不用計算
end;
end;//with adoquery1 do
uj5u.com熱心網友回復:
with adoquery1 dobegin
if (fieldbyname('完成').asinteger <>'查件')and(fieldbyname('完成').asinteger <>'采購中') then
try
fieldbyname('完成 ').asinteger:
=fieldbyname('a01').asinteger+fieldbyname('a02').asinteger+fieldbyname('a03').asinteger+fieldbyname('a04').asinteger
except
fieldbyname('完成').asinteger:=0;
end;
end;
uj5u.com熱心網友回復:
with adoquery1 do
begin
close;
sql.text :='select * from 表名 where ISNUMERIC(a01+a02+a03+a04)>0';
open;
try
fieldbyname('完成 ').asinteger:
=fieldbyname('a01').asinteger+fieldbyname('a02').asinteger+fieldbyname('a03').asinteger+fieldbyname('a04').asinteger
except
fieldbyname('完成').asinteger:=0;
end;
end;
uj5u.com熱心網友回復:
with adoquery1 dobegin
First;
while not Eof do
begin
Edit;
FieldByName('未完成').AsInteger :=StrToIntDef(FieldByName('a1').AsString,0) +
StrToIntDef(FieldByName('a2').AsString,0) +
StrToIntDef(FieldByName('a3').AsString,0);
Next;
end;
end;
uj5u.com熱心網友回復:
上面代碼的欄位名和你的對不上,下面應該是你想要的代碼with adoquery1 do
begin
First;
while not Eof do
begin
Edit;
FieldByName('完成').AsInteger :=StrToIntDef(FieldByName('a01').AsString,0) +
StrToIntDef(FieldByName('a02').AsString,0) +
StrToIntDef(FieldByName('a03').AsString,0) +
StrToIntDef(FieldByName('a04').AsString,0);
Next;
end;
end;
uj5u.com熱心網友回復:
能請教一下,如果是a02-a100有方法嗎?謝謝!
uj5u.com熱心網友回復:
vari,AValue:Integer;
AFieldName,AStr:WideString;
//..........................//
with adoquery1 do
begin
First;
while not Eof do
begin
Edit;
AValue := 0;
for i:= 0 to Fields.Count -1 do
begin
AFieldName := Fields[i].FieldName;
Astr := Copy(AFieldName,2,Length(AFieldName) -1);
//a02~~a100
if (Pos('a',AFieldName) = 1) and (StrToIntDef(Astr,0) >= 2) and (StrToIntDef(Astr,0) <= 100) then
AValue := AValue + StrToIntDef(FieldByName(AFieldName).AsString,0);
end;
if AValue <> 0 then
FieldByName('完成').AsInteger := AValue;
Next;
end;
end;
uj5u.com熱心網友回復:
用計算欄位即可,不要寫那么多代碼~~~uj5u.com熱心網友回復:
//------------------------------
AValue和AFieldName 出錯,沒有定義,怎么辦?請指導一下!謝謝!
uj5u.com熱心網友回復:
按了,感覺有讀取,但數字沒變動,沒反應!求指導一下!
uj5u.com熱心網友回復:
用計算欄位即可,不要寫那么多代碼~~~
請指導一下!謝謝!
uj5u.com熱心網友回復:
在sql陳述句中完成就可以了。花費那么多時間寫代碼不麻煩嗎。。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/25972.html
標籤:語言基礎/算法/系統設計
上一篇:要用delphi做個上位機,求助
下一篇:mysql
