我是新来的,问几个数据库方面的问题,大家多帮忙,谢谢!(100分)

  • 主题发起人 主题发起人 CuiHY
  • 开始时间 开始时间
使用SQL語句
Create table 臨時表名 as select * from 現有表名(根據現有表創建臨時表,
並將現有表數據追加到臨時表中,其庫結構與現有表相同,當然可在select 語句中
選擇字段及加上要追加數據的條件子句where)
Drop Tatble 臨時表名;刪除表
 
可以创建视图。
 
我可以解决内存表的问题,不过我要求有150分(开个玩笑)。
下面我帖代码:
unit MemTable;
//////////////////////////////////////////////////
//
// 创建一个内存表的实例
//
// 使用方法:Create(GivenTable: TTable; //要仿照创建的表,内存表将使用该表的定义
// NewName: String; //内存表的名称
// AOwner: TComponent) //所有者
//
////////////////////////////////////////////////////

interface

uses Classes,SysUtils,DBTables,DB,DBiTypes,DbiProcs;

type
TInMemoryTable=Class(TTable)
private
FieldDescs:PFLDDesc;
NumberOfFields:Integer;
InMemoryTableName:array[0..79] of char;
protected
Function CreateHandle:HDBICur;override;
public
Constructor CreateLike(GivenTable:TTable;NewName:String;AOwner:TComponent);
Destructor Destroy;override;
end;


implementation

{ TInMemoryTable }

function TInMemoryTable.CreateHandle: HDBICur;
begin
check(DbiCreateInMemTable(DBHandle,InMemorytableName,NumberOfFields,FieldDescs,Result));
end;

constructor TInMemoryTable.CreateLike(GivenTable: TTable; NewName: String;
AOwner: TComponent);
var
CursorProperties:CURProps;
begin
inherited Create(AOwner);
StrPCopy(InMemoryTableName,NewName);
check(DbiGetCursorProps(Giventable.Handle,CursorProperties));
NumberOfFields:=CursorProperties.iFields;
FieldDescs:=nil;
try
FieldDescs:=Allocmem(NumberOfFields*sizeof(FLDDesc));
except
raise Exception.Create('Not enough memory.');
end;
check(DbiGetFieldDescs(GivenTable.handle,FieldDescs));
end;

destructor TInMemoryTable.Destroy;
begin
if FieldDescs<>nil then
FreeMem(FieldDescs,NumberOfFields*Sizeof(FLDDesc));
inherited Destroy;
end;

end.
 
抱歉,调用方法写错了,应该是CreateLike((GivenTable: TTable; //要仿照创建的表,内存表将使用该表的定义
// NewName: String; //内存表的名称
// AOwner: TComponent) //所有者:

下面补上详细调用方法:
procedure TForm1.FormCreate(Sender: TObject);
var
ATable:TTable;
begin
atable:=TTable.Create(self);
Atable.DatabaseName:='sc';
ATable.TableName:='CTCS2E.C_COM';
ATable.Open;
InMemoryTable:=TInMemoryTable.CreateLike(ATable,'MyIniMem',self);
DataSource1.DataSet:=InmemoryTable;
InmemoryTable.Open;
ATable.Close;
ATable.Free;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
S
回复
0
查看
738
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部