將上一筆資料給下一筆用 |
尚未結案
|
chengwenlien
一般會員 發表:11 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|
chengwenlien
一般會員 發表:11 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
您好:
procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet); begin if form1.Active then AA:= ADOQuery1.fieldbyname('姓名').AsString; end; procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet); begin if form1.Active then begin ADOQuery1.Edit; ADOQuery1.fieldbyname('姓名').AsString:= AA; end; end;參考看看!! |
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
procedure cp_field_val(sour: TQuery); var i: Integer; ds: Variant; begin if not(sour.Active) then exit; ds := VarArrayCreate([0,sour.FieldCount -1], varVariant); for i := 0 to sour.FieldCount - 1 do if (sour.Fields[i].DataType <> ftDataSet) and (sour.Fields[i].FieldKind = fkData) then ds[i] := sour.Fields.Fields[i].Value; sour.Append; for i:= 0 to sour.FieldCount -1 do if (sour.Fields[i].DataType <> ftDataSet) and (sour.Fields[i].FieldKind = fkData) then sour.Fields[i].Value := ds[i]; end;Delphi follower
------
Delphi |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
var i:integer; s:string; v:Variant; begin with DataSet do begin //先取得所有欄位名稱, 並以;間隔 for i := 0 to (FieldCount-1) do s := s ';' Fields[i].FieldName; Delete(s, 1, 1); v:=DataSet[s]; //取得Current Record所有欄位值,存入v //會自動將v create成variant array append; DataSet[s]:=v; //寫入所有欄位 post; end; end; |
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 在輸入資料時,可能上一筆資料與下一筆大致相似 需要將上一筆資料給下一筆用,請教該如何寫呢? 謝謝指導以下兩段程序是我常使用的方法 除了你要的功能外,亦可把它當做記錄的暫存陣列(比陣列好用因為可用Strings.Value['FieldName']方式很明確的指定欄位值) // 將tDataSet目前資料錄依FldSave參數描述儲存到TStrings // FldSave := ' Fld1;Fld2;Fld3...' ; // 要儲存的欄位 //FldSave := 'Fld1;Fld2;Fld3...' ; // 同上功能 // FldSave := '-Fld1;Fld2;Fld3...' ; // 不要儲存的欄位 Procedure RecSave(DataSet:TDataSet;Var Strings:TStringList;FldSave:String); Var i,nLen:Integer; FldName:String; nMethod : Integer ; Begin If DataSet.Eof Then Exit; FldSave := UpperCase(FldSave); nMethod := 0 ; If Length(FldSave) > 0 Then Begin If Copy(FldSave,1,1)='-' Then nMethod := -1 Else nMethod := 1 ; End; Strings.Clear ; With DataSet Do Begin nLen := FieldCount ; For i:= 0 To nLen-1 Do Begin FldName := UpperCase(Fields[i].FieldName); Case nMethod of -1: If Pos(FldName,FldSave) >0 Then Continue ; 1: If Pos(FldName,FldSave) =0 Then Continue ; End; If Strings.IndexOf(FldName) = -1 Then Begin Strings.Add(FldName '=' FieldByName(FldName).AsString ); End; End; End; End; // 將TStrings儲存的記錄值回存到記錄 Procedure RecRestore(DataSet:TDataSet;Strings:TStringList); Var i,nLen:Integer; FldName:String; Begin If not (DataSet.State IN [dsEdit,dsInsert]) Then Exit; With DataSet Do Begin nLen := Strings.Count ; For i:= 0 To nLen-1 Do Begin FldName := Strings.Names[i]; If FindField(FldName)<> nil Then Begin FieldByName(FldName).AsString := Strings.Values[FldName]; End; End; End; End; // 使用方式如下 procedure TForm1.BitBtn1Click(Sender:TObject); Var Strings : TStrings ; begin Strings := TStringList.Create ; DataSet.First; RecSave(DataSet,Strings,''); // '' 代表全部的欄位皆要儲存 DataSet.Insert; // 將TStrings儲存的記錄值回存到記錄 RecRestore(DataSet,Strings); //或是 如下用法 DataSet.FieldByName('AAA').AsString := Strings.Values['AAA'] ;//AAA為欄位名稱 DataSet.Post; Strings.Free; End; 參考看看!!!!!!!!!!!!!!!!!! |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言:這招倒沒玩過,好好學起來 !!var i:integer; s:string; v:Variant; begin with DataSet do begin //先取得所有欄位名稱, 並以;間隔 for i := 0 to (FieldCount-1) do s := s ';' Fields[i].FieldName; Delete(s, 1, 1); v:=DataSet[s]; //取得Current Record所有欄位值,存入v //會自動將v create成variant array append; DataSet[s]:=v; //寫入所有欄位 post; end; end; |
chengwenlien
一般會員 發表:11 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |