全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1538
推到 Plurk!
推到 Facebook!

請問如何用簡單的方法將目前的這筆資料,再複製一筆!!

答題得分者是:rovi
小蚊子
中階會員


發表:55
回覆:267
積分:94
註冊:2002-06-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-01 19:40:18 IP:210.64.xxx.xxx 未訂閱
例如 : table 中有一筆資料 ,欄位很多 FF01 FF02 FF03 FF04 FF05 (欄位名稱) A0001 張大德 桃園縣 龍潭鎮 男 ........... (實體資料) 現在要輸入新的資料,除了人名外,其他資料都雷同 我想是否可以做一快速 "複製" 按鍵,按下後,馬上複製這一筆 USER 只要修改人名(FF02)及編號(FF01) 即可以. A0002 李小龍 桃園縣 龍潭鎮 男 ........... (實體資料) 謝謝您!! 發表人 - 小蚊子 於 2004/04/01 19:41:46
rovi
一般會員


發表:2
回覆:10
積分:12
註冊:2002-05-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-01 20:03:52 IP:211.75.xxx.xxx 未訂閱
剛好昨天補了Dos時代的舊功能: 增加"拷貝此筆記錄","貼上記錄內容"功能 Bcd1 也可使用 TTable Bcd1: TBDEClientDataSet; private { Private declarations } vRec: variant; sRecFields: string; procedure TFmDataDic.miCopyRecClick(Sender: TObject); var i: integer; s: string; begin s := ''; for i := 0 to bcd1.FieldCount-1 do s := s bcd1.Fields[i].FieldName ';'; if s<>'' then Delete(s, Length(s), 1); sRecFields := s; vRec := bcd1[sRecFields]; end; procedure TFmDataDic.miPasteRecClick(Sender: TObject); begin try bcd1.Edit; bcd1[sRecFields] := vRec; except end; end;
rovi
一般會員


發表:2
回覆:10
積分:12
註冊:2002-05-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-01 20:16:25 IP:211.75.xxx.xxx 未訂閱
procedure TFmDataDic.miInsertSameRecClick(Sender: TObject); var i: integer; s: string; v: variant; begin s := ''; for i := 0 to bcd1.FieldCount-1 do s := s bcd1.Fields[i].FieldName ';'; if s<>'' then Delete(s, Length(s), 1); sRecFields := s; v := bcd1[sRecFields]; bcd1.Insert; bcd1[sRecFields] := v; end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-01 21:36:05 IP:218.32.xxx.xxx 未訂閱
小蚊子 你好:    我是將 TDataSet.AppendRecord Method 變形一下: 須注意 Unique Key 重複的問題喔.

procedure MyAppendRecord(CD: TDataSet; KeyValues: Variant);
var KeyArray : Array of TVarRec;
    i,aCount : Integer;
begin
  if VarIsArray(KeyValues) then
    aCount := VarArrayHighBound(KeyValues,1)   1
  else
    aCount := 1;
  SetLength(KeyArray, aCount);
  if VarIsArray(KeyValues) then begin
    for i := 0 to aCount - 1 do begin
      KeyArray[i].VType := vtVariant;
      GetMem(KeyArray[i].VVariant,Sizeof(Variant));
      FillChar(KeyArray[i].VVariant^,Sizeof(Variant),0);
      KeyArray[i].VVariant^ := Variant(KeyValues[i]);
    end;
  end
  else begin
    KeyArray[0].VType := vtVariant;
    GetMem(KeyArray[0].VVariant,Sizeof(Variant));
    FillChar(KeyArray[0].VVariant^,Sizeof(Variant),0);
    KeyArray[0].VVariant^ := Variant(KeyValues);
  end;
  CD.AppendRecord(KeyArray);
  if VarIsArray(KeyValues) then
    for i := 0 to aCount - 1 do
      FreeMem(KeyArray[i].VVariant,Sizeof(Variant))
  else
    FreeMem(KeyArray[0].VVariant,Sizeof(Variant));
end;    procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    Fields: string;
begin
  Fields := '';
  for i := 0 to Query1.FieldCount - 1 do Fields := Fields   Query1.Fields[i].FieldName ';';
  MyAppendRecord(Query1,Query1[Fields]);
end;
小蚊子
中階會員


發表:55
回覆:267
積分:94
註冊:2002-06-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-20 17:38:57 IP:210.244.xxx.xxx 未訂閱
感謝 網友的回覆 !! 謝謝大家!
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-01 10:22:33 IP:211.75.xxx.xxx 未訂閱
mickey 大大: 妳寫的複製 Record 程序,經我測試結果,如像當有 TDateTime 欄位且為空白時,執行到 CD.AppendRecord(KeyArray); 會有錯誤產生喔 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-01 22:13:24 IP:218.32.xxx.xxx 未訂閱
引言: mickey 大大: 妳寫的複製 Record 程序,經我測試結果,如像當有 TDateTime 欄位且為空白時,執行到 CD.AppendRecord(KeyArray); 會有錯誤產生喔
我用 Paradox ( 因為此時只有 Paradox ), 試了一下, 沒有問題耶, 能否說清楚一些, 有錯誤訊息嗎 ?
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-01 23:34:56 IP:61.70.xxx.xxx 未訂閱
我用 SQ-2000,我發現欄位少的話還好,但當欄位超過四十的時候,就會發生 'Invalid Value for field xxxx欄位名稱',而且不一定是那個欄位,會沒有規則,真是靈異 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福
------
Thomas Chiou
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-03 22:49:10 IP:211.20.xxx.xxx 未訂閱
  提供另一種解法:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  v : variant ;
  Flds :String ;
  Sl : TStrings ;
begin
  Sl := TStringList.create;
  Dataset.GetFieldNames(Sl);
  Flds := Sl.CommaText;
  Sl.Free;
  Flds := StringReplace(Flds,',',';',[rfReplaceAll]);
  // 以下與上面rovi大大的寫法是相同的
  v := DataSet[Flds];
  DataSet.Append;
  DataSet[Flds] := v;
  // 在這修正不同的欄位資料
  DataSet.post;
end;
_______________________________________ 深藍的魚,祝您好運..........連連
系統時間:2024-05-12 20:37:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!