procedure TForm1.DbgridToTxt(source: Tobject); var FileName: TextFile; DataSet: TDataSet; titlestr,valuestr,tempstr:string; counter:integer; begin if (source is TDBGrid) then DataSet := TDBGrid(source).DataSource.DataSet else DataSet := TDataSet(source); if ((DataSet.IsEmpty) or (not DataSet.Active)) then Exit else begin DataSet.DisableControls; DataSet.First; if SaveDialog1.Execute then begin AssignFile(FileName,SaveDialog1.FileName); Rewrite(FileName); titlestr := ''; for counter := 0 to DataSet.FieldCount - 1 do begin titlestr := titlestr + ' ' + FormatStr(DataSet.Fields[counter].DisplayLabel, DataSet.Fields[counter].DataSize); end; titlestr := Trim(titlestr); Writeln(filename,titlestr); while not DataSet.Eof do begin valuestr := ''; for counter := 0 to DataSet.FieldCount - 1 do begin tempstr := DataSet.Fields[counter].Text; tempstr := FormatStr(tempstr, DataSet.Fields[counter].DataSize); valuestr := valuestr + ' ' + tempstr; end; valuestr := Trim(valuestr); Writeln(filename,valuestr); DataSet.Next; end; CloseFile(FileName); end; DataSet.EnableControls; ShowMessage('保存成功'); end; end;
我用的是oracle数据库,请问存储过程怎样写啊?在程序中怎样执行存储过程?谢谢各位了!
create proc proc_name ( ....... )
你用ORACLE导出数据会吗? 如果用程序的话,下面让你参考: procedure TfrmDumpOut.btnOkClick(Sender: TObject); var Eid: String; MyStr: TStringList; sSQL: String; begin if Trim(cbEid.Text)='' then exit; Eid:=Copy(cbEid.Text,1,Pos(' ',cbEid.Text)-1); MyStr:=TStringList.Create; Screen.Cursor:=crHourGlass; try //预算单位 MyStr.Add('[ysdw]'); sSQL:='select eid,name,totalname,class,isleaf,code,did from enterprise where [year]='+IntToStr(gYear)+' and eid like '''+Eid+'%'''; FQuery.Close; FQuery.SQL.Text:=sSQL; FQuery.Open; FQuery.First; while not FQuery.Eof do begin MyStr.Add(FQuery.FieldByName('eid').AsString+'|'+FQuery.FieldByName('name').AsString+'|'+FQuery.FieldByName('totalname').AsString +'|'+FQuery.FieldByName('class').AsString+'|'+FQuery.FieldByName('isleaf').AsString+'|'+FQuery.FieldByName('code').AsString+'|'+FQuery.FieldByName('did').AsString+'|'); FQuery.Next; end; 。 。 。 。 sd.FileName:=Eid+' '+GetEnterprise(Eid); if sd.Execute then begin MyStr.SaveToFile(GetSysFileName); Encrypt(sd.FileName+'.f07'); DeleteFile(GetSysFileName); end; finally MyStr.Free; end; Screen.Cursor:=crDefault; Application.MessageBox('导出数据完成!','提示',MB_OK+MB_ICONINFORMATION); end;
最好使用[作业]来处理定时执行的问题有关作业你可以看相关帮助
create job
var
FileName: TextFile;
DataSet: TDataSet;
titlestr,valuestr,tempstr:string;
counter:integer;
begin
if (source is TDBGrid) then
DataSet := TDBGrid(source).DataSource.DataSet
else
DataSet := TDataSet(source);
if ((DataSet.IsEmpty) or (not DataSet.Active)) then
Exit
else
begin
DataSet.DisableControls;
DataSet.First;
if SaveDialog1.Execute then
begin
AssignFile(FileName,SaveDialog1.FileName);
Rewrite(FileName);
titlestr := '';
for counter := 0 to DataSet.FieldCount - 1 do
begin
titlestr := titlestr + ' ' + FormatStr(DataSet.Fields[counter].DisplayLabel, DataSet.Fields[counter].DataSize);
end;
titlestr := Trim(titlestr);
Writeln(filename,titlestr);
while not DataSet.Eof do
begin
valuestr := '';
for counter := 0 to DataSet.FieldCount - 1 do
begin
tempstr := DataSet.Fields[counter].Text;
tempstr := FormatStr(tempstr, DataSet.Fields[counter].DataSize);
valuestr := valuestr + ' ' + tempstr;
end;
valuestr := Trim(valuestr);
Writeln(filename,valuestr);
DataSet.Next;
end;
CloseFile(FileName);
end;
DataSet.EnableControls;
ShowMessage('保存成功');
end;
end;
(
.......
)
如果用程序的话,下面让你参考:
procedure TfrmDumpOut.btnOkClick(Sender: TObject);
var
Eid: String;
MyStr: TStringList;
sSQL: String;
begin
if Trim(cbEid.Text)='' then exit;
Eid:=Copy(cbEid.Text,1,Pos(' ',cbEid.Text)-1);
MyStr:=TStringList.Create;
Screen.Cursor:=crHourGlass;
try
//预算单位
MyStr.Add('[ysdw]'); sSQL:='select eid,name,totalname,class,isleaf,code,did from enterprise where [year]='+IntToStr(gYear)+' and eid like '''+Eid+'%''';
FQuery.Close;
FQuery.SQL.Text:=sSQL;
FQuery.Open;
FQuery.First;
while not FQuery.Eof do
begin
MyStr.Add(FQuery.FieldByName('eid').AsString+'|'+FQuery.FieldByName('name').AsString+'|'+FQuery.FieldByName('totalname').AsString
+'|'+FQuery.FieldByName('class').AsString+'|'+FQuery.FieldByName('isleaf').AsString+'|'+FQuery.FieldByName('code').AsString+'|'+FQuery.FieldByName('did').AsString+'|');
FQuery.Next;
end;
。
。
。
。
sd.FileName:=Eid+' '+GetEnterprise(Eid);
if sd.Execute then
begin
MyStr.SaveToFile(GetSysFileName);
Encrypt(sd.FileName+'.f07');
DeleteFile(GetSysFileName);
end;
finally
MyStr.Free;
end;
Screen.Cursor:=crDefault;
Application.MessageBox('导出数据完成!','提示',MB_OK+MB_ICONINFORMATION);
end;
你可以写好一个存储过程,然后再做一个作业,这个作业就是执行这个存储过程的,最后再调度这个作业的执行时间。你想要他什么时候执行都行,只要开机。