如何对一张表插入多条记录?

呸呸呸呸呸呸呸呸呸 2004-11-20 07:58:30
要插入的几条记录只有一个字段不一样(比如同一个部门下的职工姓名)有什么方法?
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanhai 2004-11-20
  • 打赏
  • 举报
回复
{ Purpose: 用於新增數據的測試,測試環境:
開發工具:Delphi 7
操作系統:Win XP SP2
系統硬件:Intel 2.8G, 512MB
表名:Create table testdt(d1 smalldatetime) 沒有索引
新增數據:10000
新增方法:一、SQL語句,3.79s
二、AdoQuery Append Post: 8.95s
三、AdoCommand 8.70s
四、AdoQuery UpdateBatch 4.89s
History:
-----------------------------------------------------------------------------}
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB;

type
TForm1 = class(TForm)
EdtCount: TEdit;
Label1: TLabel;
BtnSqlInsert: TButton;
BtnPost: TButton;
Memo1: TMemo;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOCommand1: TADOCommand;
BtnAdoCommand: TButton;
BtnUpdateBatch: TButton;
procedure BtnSqlInsertClick(Sender: TObject);
procedure BtnPostClick(Sender: TObject);
procedure BtnAdoCommandClick(Sender: TObject);
procedure BtnUpdateBatchClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
dtStart, dtEnd: Double;

implementation

{$R *.dfm}

procedure TForm1.BtnSqlInsertClick(Sender: TObject);
const
InsertSQL = 'insert into testdt(d1) values(%s) ';
var
i0: Integer;
iRecord: Integer;
strSQL: string;
begin
iRecord := StrToIntDef(EdtCount.text, 0);
SetLength(strSQL, 2000);
strSQL := '';
dtStart := Now;
for i0 := 1 to iRecord do
begin
if i0 mod 50 = 0 then
begin
ADOQuery1.Close;
ADOQuery1.Sql.Text := strSQL;
ADOQuery1.ExecSQL;
strSQL := '';
end;
strSQL := strSQL + Format(InsertSQL, [QuotedStr('2004-10-1')]);
end;
dtEnd := Now;
Memo1.Lines.Add(Format('%f', [(dtEnd - dtStart) / (1 / (24 * 3600))]));
end;

procedure TForm1.BtnPostClick(Sender: TObject);
var
i0: Integer;
iRecord: Integer;
begin
iRecord := StrToIntDef(EdtCount.text, 0);
ADOQuery1.Open;
ADOQuery1.DisableControls;
dtStart := Now;
for i0 := 1 to iRecord do
begin
ADOQuery1.Append;
ADOQuery1.FieldByName('d1').AsDateTime := 2004-10-1;
ADOQuery1.Post;
end;
dtEnd := Now;
ADOQuery1.EnableControls;
Memo1.Lines.Add(Format('%f', [(dtEnd - dtStart) / (1 / (24 * 3600))]));

end;

procedure TForm1.BtnAdoCommandClick(Sender: TObject);
var
i0: Integer;
iRecord: Integer;
begin
iRecord := StrToIntDef(EdtCount.text, 0);
dtStart := Now;
for i0 := 1 to iRecord do
begin
ADOCommand1.Parameters.ParamByName('d1').Value := 2004-10-1;
ADOCommand1.Execute;
end;
dtEnd := Now;
ADOQuery1.EnableControls;
Memo1.Lines.Add(Format('%f', [(dtEnd - dtStart) / (1 / (24 * 3600))]));

end;

procedure TForm1.BtnUpdateBatchClick(Sender: TObject);
var
i0: Integer;
iRecord: Integer;
begin
iRecord := StrToIntDef(EdtCount.text, 0);

ADOQUERY1.LOCKTYPE := LTBATCHOPTIMISTIC;
ADOQuery1.Open;
ADOQuery1.DisableControls;
dtStart := Now;
for i0 := 1 to iRecord do
begin
ADOQuery1.Append;
ADOQuery1.FieldByName('d1').AsDateTime := 2004-10-1;
ADOQuery1.Post;
end;
ADOQUERY1.UpdateBatch();
dtEnd := Now;
ADOQuery1.EnableControls;
Memo1.Lines.Add(Format('%f', [(dtEnd - dtStart) / (1 / (24 * 3600))]));
ADOQuery1.Close;
ADOQUERY1.LOCKTYPE := LTOPTIMISTIC;
end;

end.
zdq801104 2004-11-20
  • 打赏
  • 举报
回复
insert into 表名(字段名1,字段名2...) values(值1,值2...)就可以了
zdq801104 2004-11-20
  • 打赏
  • 举报
回复
用SQL语句不就可以了吗?
  • 打赏
  • 举报
回复
帮忙啊~

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧