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

有關SQL的Insert與Update

答題得分者是:ccsam
Mars123
一般會員


發表:6
回覆:9
積分:3
註冊:2003-07-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-06 18:34:53 IP:61.230.xxx.xxx 未訂閱
請教各位大大 小弟今欲將access的資料表(table)無條件轉入SQL SRV 但是因每個access的資料表內欄位名稱不相同,但順序是相同的 若是用正規的SQL指令,小弟可能有十個access的table就得寫十種的SQL指令 問題來了,請教各位大大是否有可能寫一個SQL指令通用所有不同的access的table? 下例是小弟的想法: var i,j : integer; for i:=0 to table1.RecordCount-1 do ; //access的table的總筆數 begin for j:=0 to table1.FieldCount-1 do ; //access的table的總欄位數 begin strsql:='insert into datagive( )values( )'; end; end; QUERY1.ACTIVE := FALSE; QUERY1.SQL.CLEAR; QUERY1.SQL.ADD(STRSQL); QUERY1.ExecSQL; table1.Next; 此法是否行得通? 若是可行,在strsql指令中的()內,該如何撰寫? 因小弟剛學Delphi,所以相關的指令不是太熟,還請各位大大多指點 另外還請各位大大介紹有關Delphi的書,最好是多講些指令的書籍,謝謝!
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-06 20:07:10 IP:218.162.xxx.xxx 未訂閱
不知道您是要練習還是真正的情況.... 如果是要解決問題 ,小弟提供您一個偏方 在 SQL Server 裡面利用 Link Server 去掛上 Access 的 mdb 檔, 再利用 insert into table select * from linkdb 這樣你只要去預備 10 個 SQL 指令執行就可以了 !!
Mars123
一般會員


發表:6
回覆:9
積分:3
註冊:2003-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-07 10:34:40 IP:61.230.xxx.xxx 未訂閱
感謝James兄的方法,小弟會試試看的 但是我的原意是不打算去預備SQL 指令 因我這是實際會應用到的程式,我無法預料會用到多少SQL指令 所以才會突發奇想,想來個一勞永逸 不過James兄的方法倒是不錯,或可用在其他程式上 總之,謝謝囉
Mickey
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-07 13:22:58 IP:218.163.xxx.xxx 未訂閱
Sample 如下 :
var i: integer;
begin
  Table1.Close; // Source Table
  Table2.Close; // Destination Table
  Table1.TableName := 'SourceTableName';
  Table2.TableName := 'DestinationTableName';
  Table1.Open;
  Table2.Open;
  while not Table1.Eof do begin
    try
      Table2.Append;
      for i := 0 to Table1.FieldCount -1 do
        Table2.Fields[i].Value := Table1.Fields[i].Value;
      Table2.Post;
    except
      if Table2.State=dsInsert then Table2.Cancel;
    end;
    Table1.Next;
  end;
end;
係依照欄位順序給值. 若仍是要組合出 SQL , 則比較傷腦筋, 須 1. 將 TField.FieldName 串接成字串 (Field1,Field2...) 2. TField.DataType 判斷值是否需要加上單引號 ('string',number,'datetime'...)
ccsam
一般會員


發表:6
回覆:8
積分:7
註冊:2003-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-07 14:39:39 IP:211.21.xxx.xxx 未訂閱
var i,j,x : integer; fieldSQLStr,ValueParamStr : string; //先組合SQL.Text for i:=0 to table1.FieldCount-1 do begin fieldSQLStr := fieldSQLStr table1.fields[i].Name ','; ValueParamStr := ValueParamStr ':' inttostr(i) ','; end; fieldSQLStr := left(fieldSQLStr,strlen(fieldSQLStr)-1); ValueParamStr := left(ValueParamStr,strlen(ValueParamStr)-1); Query1.SQL.Text := 'Insert into datagive (' fieldSQLStr ') Values (' ValueParamStr ')'; //再根據欄位帶入Parameter值 for i:=0 to table1.RecordCount-1 do begin for j:=0 to table1.FieldCount-1 do begin Query1.ParamByName(':' inttostr(j)).Value := table1.fieldsvalue[inttostr(j)]; end; end; QUERY1.Prepared; QUERY1.ExecSQL; table1.Next;
Mars123
一般會員


發表:6
回覆:9
積分:3
註冊:2003-07-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-07 14:53:43 IP:61.230.xxx.xxx 未訂閱
感謝各位大大的指導,小弟已經試出來了, 基本上與ccsam兄的範例大同小異 感謝再感謝
系統時間:2024-05-18 23:39:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!