有关SQL结果的保存?急!急!急!(100分)

  • 主题发起人 主题发起人 JqDu
  • 开始时间 开始时间
J

JqDu

Unregistered / Unconfirmed
GUEST, unregistred user!
我在用SQL检索出结果后,希望能将结果保存下来,不知如何操作?
请问各位DELPHI友们谁可以帮我这个忙。
 
你要保存在什么地方,什么类型的文件,用的是什么工具?
 
文件型数据库只能用D4编个程序取数据,存数据,存什么格式要看你的程序怎么做
C/S型,可以用select * into tourdesttable from sourcetable
 
是要存到一个数据库中去吗?
还是存成文件?
用clientdataset可以保存为cds文件.
 
把查询结果保存到一个临时表中去:

INSERT INTO "临时表"
(字段1, 字段2)
SELECT 字段1, 字段2
FROM "源表1",.......
where ........
 
TQuery1里得到SQL的结果,
建一个空TTable1,注意定义文件类型(dbase,paradox,text),文件名,

TTable1.BatchMove(TQuery1,batCopy);

SQL的结果保存入TTable1,
 
假如有两个表table1和table2,table1的数据如下:
table1(检索数据)
no1 name
1 a
2 b
3 c
4 d

table2(保存数据)
no1 name


如果要在检索table1.no>=2和table1.no>=3的数据保存到tabl2,Sql语句:
with query1 do
begin
close;
sql.clear;
sql.add('insert into table2(no1,name) select no1,name from table1');
sql.add('where no1>=:n1 and no1<=:n2');
ParamByName('n1').AsFloat:=2;
ParamByName('n2').AsFloat:=3;
ExecSQL;
end;
数据库为Oracle
 
用SQL语句
Insert into xxx
select * from xxx where xxx
可将结果存入into 后面的表中
 
若保存到表中,您可以:
设结果存入TABLE1中,待保存数据在Edit1;
Table1.insert;
table1.FieldByName('字段名‘).value:=Edit1.text;
... ...
table1.UpdateRecord;
 
with tq do
begin
Close;
Sql.clear;
Sql.Add('select * from tablename')
Execsql;
Open;
While not eof do
begin
// 取SELECT语句后的字段名付值给一个结构
// 编写INSERTSQL过程写入表中
end;
end;
 
我建议你用:INSERT INTO "临时表"(字段1, 字段2) SELECT 字段1, 字段2
FROM "源表1",.......where ........(盗窃面条的)
但临时表要提前建立.
如果用Foxpro的数据库,可以:select ... into 临时表 ,且不用提前建表.
to 面条:
我又个好朋友外号叫面条,不过,你不是他???why?

 
刚改写完一段代码,可行
调用:
ExportDataSetEx(Query1, ADestTable, ttDefault,'',
False, '"', ',', 0);
非常好用,由于用BatchMove速度很快!!

procedure ExportDataSetEx(Source: TBDEDataSet; DestTable: TTable;
TableType: TTableType; const AsciiCharSet: string;
AsciiDelimited: Boolean; AsciiDelimiter, AsciiSeparator: Char;
MaxRecordCount: Longint);

function ExportAsciiField(Field: TField): Boolean;
begin
Result := Field.Visible and not (Field.Calculated
{$IFDEF WIN32} or Field.Lookup {$ENDIF}) and not (Field.DataType in
ftNonTextTypes + [ftUnknown]);
end;

const
TextExt = '.TXT';
SchemaExt = '.SCH';
var
I: Integer;
S, Path: string;
BatchMove: TBatchMove;
TablePath: array[0..dbiMaxPathLen] of Char;
begin
if Source = nil then DatabaseError(SDataSetEmpty);
if DestTable.Active then DestTable.Close;
if Source is TDBDataSet then
DestTable.SessionName := TDBDataSet(Source).SessionName;
if (TableType = ttDefault) then begin
if DestTable.TableType <> ttDefault then
TableType := DestTable.TableType
else if (CompareText(ExtractFileExt(DestTable.TableName), TextExt) = 0) then
TableType := ttASCII;
end;
BatchMove := TBatchMove.Create(nil);
try
StartWait;
try
BatchMove.Mode := batCopy;
BatchMove.Source := Source;
BatchMove.Destination := DestTable;
DestTable.TableType := TableType;
BatchMove.Mappings.Clear;
if (DestTable.TableType = ttASCII) then begin
if CompareText(ExtractFileExt(DestTable.TableName), SchemaExt) = 0 then
DestTable.TableName := ChangeFileExt(DestTable.TableName, TextExt);
with Source do
for I := 0 to FieldCount - 1 do begin
if ExportAsciiField(Fields) then
BatchMove.Mappings.Add(Format('%s=%0:s',
[Fields.FieldName]));
end;
BatchMove.RecordCount := 1;
end
else BatchMove.RecordCount := MaxRecordCount;
BatchMove.Execute;
if (DestTable.TableType = ttASCII) then begin
{ ASCII table always created in "fixed" format with "ascii"
character set }
with BatchMove do begin
Mode := batAppend;
RecordCount := MaxRecordCount;
end;
S := ChangeFileExt(ExtractFileName(DestTable.TableName), '');
Path := NormalDir(ExtractFilePath(DestTable.TableName));
if Path = '' then begin
DestTable.Open;
try
Check(DbiGetDirectory(DestTable.DBHandle, False, TablePath));
Path := NormalDir(OemToAnsiStr(StrPas(TablePath)));
finally
DestTable.Close;
end;
end;
with TIniFile.Create(ChangeFileExt(Path + S, SchemaExt)) do
try
if AsciiCharSet <> '' then
WriteString(S, 'CharSet', AsciiCharSet)
else WriteString(S, 'CharSet', 'ascii');
if AsciiDelimited then begin { change ASCII-file format to CSV }
WriteString(S, 'Filetype', 'VARYING');
WriteString(S, 'Delimiter', AsciiDelimiter);
WriteString(S, 'Separator', AsciiSeparator);
end;
finally
Free;
end;
{ clear previous output - overwrite existing file }
S := Path + ExtractFileName(DestTable.TableName);
if Length(ExtractFileExt(S)) < 2 then
S := ChangeFileExt(S, TextExt);
I := FileCreate(S);
if I < 0 then
raise EFCreateError.CreateFmt(SFCreateError, );
FileClose(I);
BatchMove.Execute;
end;
finally
StopWait;
end;
finally
BatchMove.Free;
end;
end;
 
要这么复杂么?
把结果保存到一个文本文件中不就可以了?EI等国际检索工具
的返回结果就是文本文件,当然显示格式要好好规划一下。
把SQL数据库的结果存到别的数据表中,不等于原地踏步么?
 
用f1book1 把结果保存到文件中可以写成EXCEL
文件,可以让拥护编辑格式化,多好呀?
我最近的程序就这样作的
 
我不明白保存了有什么用。不知JpDu到底是什么意思。
 
宫雨的方法不错!
 
SQL查询后生成的临时文件保存在SESSION的PrivateDir目录中,这些文件是
如何命名的????????
 
create table table1 select * from table2 where ....
oracle上成立.

or:
use tbatchmove
BatchMove.Mode := batCopy;
BatchMove.Source := Source;
BatchMove.Destination := DestTable;
BatchMove.execute;
 
多人接受答案了。
 
后退
顶部