duvidas sobre gravar dentro do banco de dados mysql
estou utilizando uma rotina que gera um loop de 800 gravações... ela compara alguns dados e grava na tabela... a parte da gravação eu faço da seguinte forma...
tabela.open;
tabela.append;
´´digito os dados´´
tabela.post
end;
funciona bem... mas quando o número de gravações é grande, fica muito demorado a gravação...
Tem como fazer isso de uma outra forma...
utilizando uma Query...
Insert into tabela...
algo que de mais agilidade a gravação...???
agradeço as sujestões...
tabela.open;
tabela.append;
´´digito os dados´´
tabela.post
end;
funciona bem... mas quando o número de gravações é grande, fica muito demorado a gravação...
Tem como fazer isso de uma outra forma...
utilizando uma Query...
Insert into tabela...
algo que de mais agilidade a gravação...???
agradeço as sujestões...
Adelor Silva
Curtidas 0
Respostas
Fabiano Góes
25/09/2006
fala ai irmão beleza ?
quais os componentes de acesso que vc está usando ?
já tentou usar ClientDataSet: fazer todos os posts e apenas no final realizar o ApplyUpdates(0)
apenas uma opção !!!!
quais os componentes de acesso que vc está usando ?
já tentou usar ClientDataSet: fazer todos os posts e apenas no final realizar o ApplyUpdates(0)
ClientDataSet.open; ClientDataSet.append; //... //digita dados ClientDataSet.post; //... // após o ultimo post ClientDataSet.ApplyUpdates(0);
apenas uma opção !!!!
GOSTEI 0
Adelor Silva
25/09/2006
delphi 7.0 / MySQL / Zeos
este é o código do programa... a parte em vermelho é que eu gostaria de melhorar, para tornar a gravação mais rápida...
__________________________________________________________
unit UIncDados;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection,
StdCtrls, Mask, ComCtrls;
type
TFrmIncDados = class(TForm)
ZConnection1: TZConnection;
TbProcLote: TZQuery;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
DateTimePicker1: TDateTimePicker;
MaskEdit1: TMaskEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Button1: TButton;
TbProcLoteCodMaq: TIntegerField;
TbProcLoteData: TDateField;
TbProcLoteHora: TTimeField;
TbProcLoteOcioso: TTimeField;
Label7: TLabel;
GroupBox2: TGroupBox;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
MaskEdit4: TMaskEdit;
MaskEdit5: TMaskEdit;
MaskEdit6: TMaskEdit;
MaskEdit7: TMaskEdit;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmIncDados: TFrmIncDados;
implementation
{$R *.dfm}
procedure TFrmIncDados.FormActivate(Sender: TObject);
begin
Edit1.Text := ´1´;
Edit2.Text := ´1´;
MaskEdit1.Text := ´08:00:00´;
DateTimePicker1.Date := Now;
Label2.Caption := ´´;
Label7.Caption := ´´;
MaskEdit2.Text := ´09:00:00´;
MaskEdit3.Text := ´09:15:00´;
MaskEdit4.Text := ´12:00:00´;
MaskEdit5.Text := ´13:30:00´;
MaskEdit6.Text := ´15:15:00´;
MaskEdit7.Text := ´15:30:00´;
end;
procedure TFrmIncDados.Button1Click(Sender: TObject);
var
Qtd, Maq, i : Integer;
Hora01, MaisHora, Hora02, Dia : TDateTime;
InFolga01, OutFolga01, InFolga02, OutFolga02, InFolga03, OutFolga03 : TTime;
begin
Label2.Caption := ´´;
Label7.Caption := ´´;
//Define as Variáveis
begin
Qtd := StrToInt(Edit1.Text);
Maq := StrToInt(Edit2.Text);
Dia := FloatToDateTime(DateTimePicker1.Date);
Hora01 := StrToTime(MaskEdit1.Text);
Hora02 := StrToTime(MaskEdit5.Text);
//Define Variávies das Horas de Folga
InFolga01 := StrToTime(MaskEdit2.Text);
OutFolga01 := StrToTime(MaskEdit3.Text);
InFolga02 := StrToTime(MaskEdit4.Text);
OutFolga02 := StrToTime(MaskEdit5.Text);
InFolga03 := StrToTime(MaskEdit6.Text);
OutFolga03 := StrToTime(MaskEdit7.Text);
Qtd := 0;
end;
if Hora01 <= InFolga02 then
begin
while Qtd < StrToInt(Edit1.Text) do
begin
if Hora01 <= InFolga02 then
[color=red:4605ef1559] begin
TbProcLote.Open;
TbProcLote.Append;
TbProcLoteCodMaq.Value := Maq;
TbProcLoteData.Value := Dia;
TbProcLoteHora.Value := Hora01;
TbProcLote.Post;
Hora01 := Hora01 + MaisHora;
end[/color:4605ef1559] else
[color=red:4605ef1559] begin
TbProcLote.Open;
TbProcLote.Append;
TbProcLoteCodMaq.Value := Maq;
TbProcLoteData.Value := Dia;
TbProcLoteHora.Value := Hora02;
TbProcLote.Post;
Hora02 := Hora02 + MaisHora;
end;[/color:4605ef1559]
Qtd := Qtd + 1;
i := Random(10);
case i of
0: MaisHora := StrToTime(´00:00:25´);
1: MaisHora := StrToTime(´00:00:30´);
2: MaisHora := StrToTime(´00:00:35´);
3: MaisHora := StrToTime(´00:00:40´);
4: MaisHora := StrToTime(´00:00:45´);
5: MaisHora := StrToTime(´00:00:50´);
6: MaisHora := StrToTime(´00:00:55´);
7: MaisHora := StrToTime(´00:00:23´);
8: MaisHora := StrToTime(´00:00:28´);
9: MaisHora := StrToTime(´00:00:37´);
end;
Label2.Caption := FormatFloat(´0000´, Qtd);
Label2.Refresh;
end;
end;
Label7.Caption := ´Com Sucesso´;
end;
end.
este é o código do programa... a parte em vermelho é que eu gostaria de melhorar, para tornar a gravação mais rápida...
__________________________________________________________
unit UIncDados;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection,
StdCtrls, Mask, ComCtrls;
type
TFrmIncDados = class(TForm)
ZConnection1: TZConnection;
TbProcLote: TZQuery;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
DateTimePicker1: TDateTimePicker;
MaskEdit1: TMaskEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Button1: TButton;
TbProcLoteCodMaq: TIntegerField;
TbProcLoteData: TDateField;
TbProcLoteHora: TTimeField;
TbProcLoteOcioso: TTimeField;
Label7: TLabel;
GroupBox2: TGroupBox;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
MaskEdit4: TMaskEdit;
MaskEdit5: TMaskEdit;
MaskEdit6: TMaskEdit;
MaskEdit7: TMaskEdit;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmIncDados: TFrmIncDados;
implementation
{$R *.dfm}
procedure TFrmIncDados.FormActivate(Sender: TObject);
begin
Edit1.Text := ´1´;
Edit2.Text := ´1´;
MaskEdit1.Text := ´08:00:00´;
DateTimePicker1.Date := Now;
Label2.Caption := ´´;
Label7.Caption := ´´;
MaskEdit2.Text := ´09:00:00´;
MaskEdit3.Text := ´09:15:00´;
MaskEdit4.Text := ´12:00:00´;
MaskEdit5.Text := ´13:30:00´;
MaskEdit6.Text := ´15:15:00´;
MaskEdit7.Text := ´15:30:00´;
end;
procedure TFrmIncDados.Button1Click(Sender: TObject);
var
Qtd, Maq, i : Integer;
Hora01, MaisHora, Hora02, Dia : TDateTime;
InFolga01, OutFolga01, InFolga02, OutFolga02, InFolga03, OutFolga03 : TTime;
begin
Label2.Caption := ´´;
Label7.Caption := ´´;
//Define as Variáveis
begin
Qtd := StrToInt(Edit1.Text);
Maq := StrToInt(Edit2.Text);
Dia := FloatToDateTime(DateTimePicker1.Date);
Hora01 := StrToTime(MaskEdit1.Text);
Hora02 := StrToTime(MaskEdit5.Text);
//Define Variávies das Horas de Folga
InFolga01 := StrToTime(MaskEdit2.Text);
OutFolga01 := StrToTime(MaskEdit3.Text);
InFolga02 := StrToTime(MaskEdit4.Text);
OutFolga02 := StrToTime(MaskEdit5.Text);
InFolga03 := StrToTime(MaskEdit6.Text);
OutFolga03 := StrToTime(MaskEdit7.Text);
Qtd := 0;
end;
if Hora01 <= InFolga02 then
begin
while Qtd < StrToInt(Edit1.Text) do
begin
if Hora01 <= InFolga02 then
[color=red:4605ef1559] begin
TbProcLote.Open;
TbProcLote.Append;
TbProcLoteCodMaq.Value := Maq;
TbProcLoteData.Value := Dia;
TbProcLoteHora.Value := Hora01;
TbProcLote.Post;
Hora01 := Hora01 + MaisHora;
end[/color:4605ef1559] else
[color=red:4605ef1559] begin
TbProcLote.Open;
TbProcLote.Append;
TbProcLoteCodMaq.Value := Maq;
TbProcLoteData.Value := Dia;
TbProcLoteHora.Value := Hora02;
TbProcLote.Post;
Hora02 := Hora02 + MaisHora;
end;[/color:4605ef1559]
Qtd := Qtd + 1;
i := Random(10);
case i of
0: MaisHora := StrToTime(´00:00:25´);
1: MaisHora := StrToTime(´00:00:30´);
2: MaisHora := StrToTime(´00:00:35´);
3: MaisHora := StrToTime(´00:00:40´);
4: MaisHora := StrToTime(´00:00:45´);
5: MaisHora := StrToTime(´00:00:50´);
6: MaisHora := StrToTime(´00:00:55´);
7: MaisHora := StrToTime(´00:00:23´);
8: MaisHora := StrToTime(´00:00:28´);
9: MaisHora := StrToTime(´00:00:37´);
end;
Label2.Caption := FormatFloat(´0000´, Qtd);
Label2.Refresh;
end;
end;
Label7.Caption := ´Com Sucesso´;
end;
end.
GOSTEI 0
Adelor Silva
25/09/2006
sobe
GOSTEI 0
Glecio
25/09/2006
tenta assim . . .;
{...}
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Set AutoCommit=0´);
ZQuery1.ExecSql;
while Qtd < StrToInt(Edit1.Text) do begin
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Inser Into ProcLote (CodMad, Data, Hora)´);
ZQuery1.Sql.Add(´Values (:Maq, :Dia, :Hora)´);
ZQuery1.ParamByName(´Maq´).AsInteger := Maq;
ZQuery1.ParamByName(´Data´).AsDate := Dia;
if Hora01 <= InFolga02 then begin
ZQuery1.ParamByName(´Hora´).AsTime := Hora01;
Hora01 := Hora01 + MaisHora;
end else begin
ZQuery1.ParamByName(´Hora´).AsTime := Hora02;
Hora02 := Hora02 + MaisHora;
end;
ZQuery1.ExecSql;
Qtd := Qtd + 1;
i := Random(10);
case i of
0: MaisHora := StrToTime(´00:00:25´);
1: MaisHora := StrToTime(´00:00:30´);
2: MaisHora := StrToTime(´00:00:35´);
3: MaisHora := StrToTime(´00:00:40´);
4: MaisHora := StrToTime(´00:00:45´);
5: MaisHora := StrToTime(´00:00:50´);
6: MaisHora := StrToTime(´00:00:55´);
7: MaisHora := StrToTime(´00:00:23´);
8: MaisHora := StrToTime(´00:00:28´);
9: MaisHora := StrToTime(´00:00:37´);
end;
Label2.Caption := FormatFloat(´0000´, Qtd);
Label2.Refresh;
end;
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Commit´);
ZQuery1.ExecSql;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Set AutoCommit=1´);
ZQuery1.ExecSql;
{...}
Espero ter ajudado . . .
{...}
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Set AutoCommit=0´);
ZQuery1.ExecSql;
while Qtd < StrToInt(Edit1.Text) do begin
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Inser Into ProcLote (CodMad, Data, Hora)´);
ZQuery1.Sql.Add(´Values (:Maq, :Dia, :Hora)´);
ZQuery1.ParamByName(´Maq´).AsInteger := Maq;
ZQuery1.ParamByName(´Data´).AsDate := Dia;
if Hora01 <= InFolga02 then begin
ZQuery1.ParamByName(´Hora´).AsTime := Hora01;
Hora01 := Hora01 + MaisHora;
end else begin
ZQuery1.ParamByName(´Hora´).AsTime := Hora02;
Hora02 := Hora02 + MaisHora;
end;
ZQuery1.ExecSql;
Qtd := Qtd + 1;
i := Random(10);
case i of
0: MaisHora := StrToTime(´00:00:25´);
1: MaisHora := StrToTime(´00:00:30´);
2: MaisHora := StrToTime(´00:00:35´);
3: MaisHora := StrToTime(´00:00:40´);
4: MaisHora := StrToTime(´00:00:45´);
5: MaisHora := StrToTime(´00:00:50´);
6: MaisHora := StrToTime(´00:00:55´);
7: MaisHora := StrToTime(´00:00:23´);
8: MaisHora := StrToTime(´00:00:28´);
9: MaisHora := StrToTime(´00:00:37´);
end;
Label2.Caption := FormatFloat(´0000´, Qtd);
Label2.Refresh;
end;
ZQuery1.Close;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Commit´);
ZQuery1.ExecSql;
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(´Set AutoCommit=1´);
ZQuery1.ExecSql;
{...}
Espero ter ajudado . . .
GOSTEI 0
Adelor Silva
25/09/2006
Agradeço sua dica... mas tentei o código igual ao que vc postou... e algumas derivações... mas não obtive sucesso... mas mesmo assim obrigado... valew...
GOSTEI 0