12萬左右的數據,插入另外表老死,如何處理為好 |
缺席
|
diashad
一般會員 發表:20 回覆:10 積分:6 註冊:2006-08-10 發送簡訊給我 |
大家好.
有如下問題,兩臺一樣的oracle server A和B,分別有相同的表TABEL1,我要將A.TABLE1中有,B.TABLE1中沒有的數據插入到B.TABLE1中. 我用ADO QUERY 取A.TABLE1,再查詢B.TABLE1中有沒有,沒有就插入,循環至結束,但是每次12萬的數據一運行就死. 不知要如何處理,才有更好的效果.. LABEL6.Caption:=ADOQUERY1.FIELDBYNAME('MACHINE_ID').AsString; q_smt.CLOSE; q_smt.sql.Clear; q_smt.sql.Add('select * from VT_DB.PCB_INFO WHERE TEST_MACHINE_ID=:V1'); //7 and to_char(end_date,''yyyy-mm-dd hh24:mi:ss'')>:D1 AND to_char(end_date,''yyyy-mm-dd hh24:mi:ss'')<=:D2'); // q_smt.sql.Add('select * from VT_DB.PCB_INFO '); //if date1='' then q_smt.Params[0].AsString:=LABEL2.Caption else q_smt.Params[0].AsString:=date1; q_smt.Parameters.ParamValues['V1']:=STRTOINT(LABEL6.Caption); q_smt.open; if q_smt.recordcount<>0 then begin addmsg(LABEL6.CAPTION 'PCB_INFO:' inttostr(q_smt.recordcount) ' records'); addmsg('開始時間' datetimetostr(now)); listbox1.Items.Add('Traslating') ; ProgressBar1.Max:=q_smt.RecordCount; ProgressBar1.Min:=0; m:=1; M2:=1; while not q_smt.Eof do begin ProgressBar1.Position:=m; q_CA.close; q_CA.sql.Clear; q_CA.sql.Add('SELECT TEST_MACHINE_ID FROM vt_db.RESULT_IMAGE_INFO WHERE '); q_CA.sql.Add('TEST_MACHINE_ID=:V1 AND SAVED_MACHINE_ID=:V2 AND PROGRAM_NAME_ID=:V3 '); q_CA.sql.Add(' AND REVISION_NO=:V4 AND SERIAL_NO=:V5 AND LOAD_COUNT=:V6 AND PCB_NO=:v7 '); q_CA.Parameters.ParamValues['V1']:=q_smt.fieldbyname('TEST_MACHINE_ID').AsInteger; q_CA.Parameters.ParamValues['V2']:=q_smt.fieldbyname('SAVED_MACHINE_ID').AsInteger; q_CA.Parameters.ParamValues['V3']:=q_smt.fieldbyname('PROGRAM_NAME_ID').AsInteger; q_CA.Parameters.ParamValues['V4']:=q_smt.fieldbyname('REVISION_NO').AsInteger; q_CA.Parameters.ParamValues['V5']:=q_smt.fieldbyname('SERIAL_NO').AsInteger; q_CA.Parameters.ParamValues['V6']:=q_smt.fieldbyname('LOAD_COUNT').AsInteger; q_CA.Parameters.ParamValues['V7']:=q_smt.fieldbyname('PCB_NO').AsInteger; Q_CA.OPEN; IF Q_CA.RecordCount=0 THEN BEGIN q_CA.close; q_CA.sql.Clear; q_CA.sql.Add('insert into vt_db.PCB_INFO values(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8,:v9,:v10,:v11,:v12,:v13,:v14,:v15,:v16,:v17,:v18,:v19,:v20'); q_CA.SQL.Add(',:V21,:V22,:V23,:V24,:V25,:V26,:V27,:V28,:V29,:V30,:V31,:V32,:V33)') ; q_CA.Parameters.ParamValues['V1']:=q_smt.fieldbyname('TEST_MACHINE_ID').AsInteger; q_CA.Parameters.ParamValues['V2']:=q_smt.fieldbyname('SAVED_MACHINE_ID').AsInteger; q_CA.Parameters.ParamValues['V3']:=q_smt.fieldbyname('PROGRAM_NAME_ID').AsInteger; q_CA.Parameters.ParamValues['V4']:=q_smt.fieldbyname('REVISION_NO').AsInteger; q_CA.Parameters.ParamValues['V5']:=q_smt.fieldbyname('SERIAL_NO').AsInteger; q_CA.Parameters.ParamValues['V6']:=q_smt.fieldbyname('LOAD_COUNT').AsInteger; q_CA.Parameters.ParamValues['V7']:=q_smt.fieldbyname('PCB_NO').AsInteger; q_CA.Parameters.ParamValues['V8']:=q_smt.fieldbyname('PERSON_TESTER').AsString; q_CA.Parameters.ParamValues['V9']:=q_smt.fieldbyname('TEST_TIME').AsInteger; // showmessage(FormatDateTime('yyyy/mm/dd hh:mm:ss',q_smt.fieldbyname('END_DATE').AsDatetime)); q_CA.Parameters.ParamValues['V10']:=q_smt.fieldbyname('END_DATE').AsDatetime; q_CA.Parameters.ParamValues['V11']:=q_smt.fieldbyname('PERSON_REVISOR').AsInteger; q_CA.Parameters.ParamValues['V12']:=q_smt.fieldbyname('REVISE_TIME').AsInteger; q_CA.Parameters.ParamValues['V13']:=q_smt.fieldbyname('REVISE_END_DATE').AsDatetime; q_CA.Parameters.ParamValues['V14']:=q_smt.fieldbyname('INSERT_WAIT_TIME').AsInteger; q_CA.Parameters.ParamValues['V15']:=q_smt.fieldbyname('EJECT_WAIT_TIME').AsInteger; q_CA.Parameters.ParamValues['V16']:=q_smt.fieldbyname('STOP_TIME').AsInteger; q_CA.Parameters.ParamValues['V17']:=q_smt.fieldbyname('TEST_RESULT').AsString; q_CA.Parameters.ParamValues['V18']:=q_smt.fieldbyname('REVISE_RESULT').AsString; q_CA.Parameters.ParamValues['V19']:=q_smt.fieldbyname('OVERLOOK_FAULT').AsString; q_CA.Parameters.ParamValues['V20']:=q_smt.fieldbyname('ROT_COUNT').AsString; q_CA.Parameters.ParamValues['V21']:=q_smt.fieldbyname('BARCODE').AsString; q_CA.Parameters.ParamValues['V22']:=q_smt.fieldbyname('RACK_BARCODE').AsString; q_CA.Parameters.ParamValues['V23']:=q_smt.fieldbyname('RACK_SERIAL').AsString; q_CA.Parameters.ParamValues['V24']:=q_smt.fieldbyname('FAULT_RATE').AsInteger; q_CA.Parameters.ParamValues['V25']:=q_smt.fieldbyname('COMPONENT_TOTAL').AsInteger; q_CA.Parameters.ParamValues['V26']:=q_smt.fieldbyname('PIN_TOTAL').AsInteger; q_CA.Parameters.ParamValues['V27']:=q_smt.fieldbyname('LAND_TOTAL').AsInteger; q_CA.Parameters.ParamValues['V28']:=q_smt.fieldbyname('OUT_COMPONENT_TOTAL').AsInteger; q_CA.Parameters.ParamValues['V29']:=q_smt.fieldbyname('VISUAL_FAULT_FLAG').AsString; q_CA.Parameters.ParamValues['V30']:=q_smt.fieldbyname('LOT_CHANGED_COUNT').AsInteger; q_CA.Parameters.ParamValues['V31']:=q_smt.fieldbyname('NUMBERING_CONDITIONS').AsString; q_CA.Parameters.ParamValues['V32']:=q_smt.fieldbyname('REVISOR_MACHINE_ID').AsInteger; q_CA.Parameters.ParamValues['V33']:=q_smt.fieldbyname('MACHINE_DETERMINATION').AsString; // SHOWMESSAGE(SQL.TEXT) ; q_CA.execsql; M2:=M2 1; END; m:=m 1; q_smt.NEXT; end; addmsg('VT_db_PCB_INFO : OK'); addmsg('結束時間' datetimetostr(now)); addmsg(LABEL6.CAPTION ' ' 'VT_db_PCB_INFO 實際轉入 :' INTTOSTR(M2) '記錄OK'); end;
------
x 編輯記錄
taishyang 重新編輯於 2007-10-11 10:12:10, 註解 無‧
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
這表示你的程式邏輯能力需要加強修練,你缺乏「山不轉路轉」的能力
程式請你自己寫,應該不會很難,以下是邏輯:
以上法則,保證不死雞,不無反應 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |