請問我的程式那裡錯了呢??? |
尚未結案
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
以下是我的程式為什麼我只能建立第一筆自動編號後要建第二筆就出現錯誤訊息請問我那裡錯了呢??? procedure TForm1.SpeedButton2Click(Sender: TObject); VAR
aaa:string;
begin
adoQuery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('select * from 通訊錄 order by 編號 desc');
AAA:=COPY(adoquery1.Fields[0].AsString,2,4);
adoquery1.Open;
if adoQuery1.isempty then
begin
adoquery1.Insert;
adoquery1.fields[0].AsString:=(aaa);
adoquery1.Fields[0].asstring:='F' '0001';
end
else
begin
adoQuery1.insert;
aaa:=inttostr((StrToInt(aaa) 1));
adoquery1.Fields[0].asstring:='F' aaa; end
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 將您的程式碼稍改動如下(紅色處):
procedure TForm1.SpeedButton2Click(Sender: TObject); Var aaa, bbb, ccc:string; I : Integer; //以上增加的宣告下面會用到, 請見步驟中的解釋 begin adoQuery1.Close; adoquery1.sql.Clear; adoquery1.SQL.add('select * from 通訊錄 order by 編號 desc'); adoquery1.Open; if adoQuery1.isempty then begin adoquery1.Insert; adoquery1.fields[0].AsString:=aaa; //以上紅色這句應該刪掉, 因為之前的判斷, 如果資料表是空的話, 那這句是要找何筆資料呢? adoquery1.fields[0].asstring:='F0001'; //以上紅色處可直接寫為'F0001'即可 adoquery1.Post; //您還沒有把新增的資料存入資料表中, 所以加上Post end else begin aaa := Copy(adoquery1.field[0].asstring,2,4); adoQuery1.insert; aaa:=inttostr((StrToInt(aaa) 1)); 以上紅色的這句, 比如說字串孌數aaa取得的是'0001', 當使用StrToInt(aaa)轉成數值形態1, 再加上1后得值為2, 所以最后用IntToStr(2)再將其轉回字串形態, 得值為字串形態2, 而不是'0002', 所以要改寫為如下(以上Var處增加的bbb,ccc,I的變數宣告就派上用處了): For I:=1 to Length(aaa) do if aaa[I]='0' then begin bbb := bbb aaa[I]; end else begin Break; end; //以上幾句, 主要用作判斷字串變數aaa中第一個值不為'0'的字元之前有幾個'0', 并指定給字串變數bbb ccc:= 'F' bbb IntToStr(StrToInt(aaa) 1); //以上這句是將字元'F'加上字串變數bbb加上已經增值1的字串變數aaa, 并指定給字串變數ccc if Length(ccc)>5 then begin ccc:= ccc[1] Copy(ccc, Length(ccc)-3,4); end; //以上的if判斷式主要是針對當從資料表中取出的字串值為'F0009'的特殊情況, 因為加上1之后, 字串值就會出現'F00010'的現象, 所以要去除多余的'0', 直接取字串中的第一個字元'F'和最后四個字元, 并組成新的字串 adoquery1.Fields[0].asstring:=ccc; //將字串變數ccc指定給新增的Fields[0]做為其值 adoquery1.post; //您還沒有把新增的資料存入資料表中, 所以加上Post end; end; end.參考看看! P.S 感謝mike519兄的查証﹗ 如上程式碼此句已修正﹒ <><>===================== 努力,相信會獲得美麗! 忻晟>> 發表人 -
------
忻晟 |
mike519
一般會員 發表:2 回覆:6 積分:11 註冊:2003-07-13 發送簡訊給我 |
這一段有點問題...
: :
adoquery1.SQL.add('select * from 通訊錄 order by 編號 desc');
AAA:=COPY(adoquery1.Fields[0].AsString,2,4);
adoquery1.Open;
: :
取得 AAA 時, adoquery1 尚未 Open, 那每次取的 AAA 會是什麼呢 ? 另外, 建議不要這樣用...
: :
adoQuery1.insert;
aaa:=inttostr((StrToInt(aaa) 1));
adoquery1.Fields[0].asstring:='F' aaa;
: :
改成 aaa := Format('%4.4d', [StrToInt(aaa) 1]);
這樣才能保證格式正確. 當然超過 9999 的狀況必須另外檢查 !
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |