something to shares

Tips: Insert Ribuan Record MySQL dengan Delphi 7

 

Jika anda memiliki ribuan record misalnya dari table lain untuk di insert ke dalam sebuah table MySQL maka biasanya cara dilakukan adalah dengan looping seperti ini :

 

while not rs1.eof do begin
  rs2.insert;
  rs2.FieldByName('field1').AsString := rs1.FieldByName('field1').AsString;
  rs2.FieldByName('field2').AsString := rs1.FieldByName('field2').AsString;
  rs2.Post;
  rs1.Next;
end

Tidak ada yang salah dengan kode di atas, tapi cobalah insert dengan lebih dari 10.000 record, maka proses akan terasa sangat lambat.

MySQL mendukung insert banyak record dengan 1 statement seperti ini :

INSERT INTO table VALUES('value1','value'), ('value1','value2'), ('value1','value2'), dst

Dengan menggunakan kelebihan tersebut berikut contoh coding untuk insert ribuan data ke dalam mysql :
Asumsi : koneksi dan query ke database menggunakan komponen ZEOLib
(http://sourceforge.net/projects/zeoslib/)

var
  sSQL: WideString;
  i: integer;
  rs1: TZQuery;
begin
  rs1 := TZQuery.Create(nil);
  rs1.SQL.Text := 'SELECT * FROM table1';
  rs1.Connection := dm.zConn;
  rs1.Open;

  i := 1;
  sSQL := 'INSERT INTO table2 VALUES';
  while not rs1.eof do begin
    sSQL := sSQL + Format('(''%s'', ''%s''),',
      [rs1.FieldByName('field1').AsString, rs1.FieldByName('field2').AsString]);
    rs1.Next;
    inc(i);
    if i = 10000 then begin
      sSQL := Copy(sSQL,1,Length(sSQL)-1) + ';'; //utk menghilangkan , di belakang
      try
        dm.zConn.ExecuteDirect(sSQL);
      except
      end;
      sSQL := 'INSERT INTO table2 VALUES'; // kembalikan sSQL ke awal
      i := 1;
    end;
  end;
end;

Pada kode diatas, setiap 10.000 record statement SQL akan dijalankan, pengalaman penulis jika statement lebih dari 10.000 dan statement dijalankan akan menimbulkan error.

Kode seperti ini saya gunakan di program POS dan DPT yang saya buat.

Semoga bermanfaat.

Leave a Reply

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

YM

Translate

Categories

Wakoopa

Software tracking