delphi 中怎么动态建立数据库?(100分)

  • 主题发起人 主题发起人 孙铭
  • 开始时间 开始时间

孙铭

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi 中怎么动态建立数据库?
 
你用什么后台数据库?如果用一般的.db可以先动态产生一个连接,再用sql的create table建立
table.
 
使用ddl语言,直接向数据库传递sql。
 
下列演示告诉你如何创建一个表,100%正确定,有些问题你最好先看一下Delphi的帮助
{ Don't overwrite an existing table }

if not Table1.Exists then begin
with Table1 do begin
{ The Table component must not be active }
Active := False;
{ First, describe the type of table and give }
{ it a name }
DatabaseName := 'DBDEMOS';
TableType := ttParadox;
TableName := 'CustInfo';
{ Next, describe the fields in the table }
with FieldDefs do begin
Clear;
with AddFieldDef do begin

Name := 'Field1';
DataType := ftInteger;
Required := True;
end;
with AddFieldDef do begin
Name := 'Field2';
DataType := ftString;
Size := 30;
end;
end;
{ Next, describe any indexes }
with IndexDefs do begin
Clear;
{ The 1st index has no name because it is
{ a Paradox primary key }
with AddIndexDef do begin

Name := '';
Fields := 'Field1';
Options := [ixPrimary];
end;
with AddIndexDef do begin
Name := 'Fld2Indx';
Fields := 'Field2';
Options := [ixCaseInsensitive];
end;
end;
{ Call the CreateTable method to create the table }
CreateTable;
end;
end;
 
下面是我的一些笔记,刚好把建库的语句露了:
获取BDE现有的别名(LIUKEEN):
AliasList:=TstringList.create;
session.GetAliasNames(AliasList);
for i:=0 to AliasList.count-1 do
if uppercase(trim(AliasList.Strings))=
'MASTER_MSSQL' then break;

这段程序查找是否已经有了MASTER_MSSQL别名.有的话则退出.
修改别名:
procedure ModifyAlias(Name: string; List: TStrings);
session.ModifyAlias('master_mssql',ParamList) //--修改别名
session.AddAlias('master_mssql','MSSQL',ParamList); //--增加别名
procedure SaveConfigFile;//--保存对bde的修改

*********************************************************************
改变联接事物数量
StoredProc1.databasename:='master';
StoredProc1.ParamByName('@configname').AsString:='User Connections';
StoredProc1.ParamByName('@configvalue').AsInteger:=StrToInt(ConnectionNumber);

*********************************************************************

//从资源中提取建库程序
ResStream:=TResourceStream.create(HInstance, 'CREATEDATABASE', 'MEMO');
query1.sql.LoadFromStream(ResStream);
ResStream.free;
try
query1.execsql; //建库语句丢失了,可惜
except
end;
*********************************************************************
//得到SQL SERVER中所有数据库名

query1.sql.clear;
query1.SQL.add('select * from sysdatabases');
query1.open;
*********************************************************************

 
顺便问一下,FOXPRO的DBF的带小数的数字字段的datatype是什么?
 
with TTable.Create(Application) do
begin
try
TableName := 'tsk';
DatabaseName := 'DatabaseName';
TableType := ttParadox;

with FieldDefs do
begin
Clear;
Add('姓名', ftString, 10, False);
Add('学历', ftString, 8, False);
end;

with IndexDefs do
begin
Clear;
end;

CreateTable;

finally
Free;
end;
end;
 
给你一段代码:

procedure TfrmProgramSet.CreateParamTable(Sender: TObject;tbName:String);
var
strAlias:TStringList;
iAnswer:Integer;
begin
if g_bCreateParamDirectory then
ParamPath:=ExtractFilePath(Application.ExeName)+'ParamData'
else
begin
ChDir(ExtractFilePath(Application.ExeName));
CreateDBDirectory(Sender);
ParamPath:=ExtractFilePath(Application.ExeName)+'ParamData';
end;
strAlias:=TStringList.Create;
Session.GetAliasNames(strAlias);
if (strAlias.IndexOf('HuaNan')=-1) then
begin
iAnswer:=Application.MessageBox('数据库不存在,现在创建吗?',
'信息窗口',MB_OKCANCEL);
if iAnswer = IDCANCEL then
begin
strAlias.Free;
Exit;
end;

Session.AddStandardAlias('HuaNan',ParamPath,'Paradox');
Session.SaveConfigFile;
end;

strAlias.Clear;
Session.GetTableNames('HuaNan','',False,False,strAlias);
if (strAlias.IndexOf(tbName)=-1 ) then
begin
iAnswer:=Application.MessageBox('参数表格不存在,现在创建一个?',
'信息窗口',MB_OKCANCEL);
if iAnswer = IDCANCEL then
begin
strAlias.Free;
Exit;
end;

tblParam.Active:=False;
tblParam.DatabaseName:='HuaNan';
tblParam.TableName:=tbName;
tblParam.TableType:=ttParadox;

tblParam.FieldDefs.Clear;
tblParam.FieldDefs.Add('通道',ftString,6,False); //通道号
tblParam.FieldDefs.Add('程序名称',ftString,10,False); //程序名称
tblParam.FieldDefs.Add('增益',ftInteger,0,False); //增益
tblParam.FieldDefs.Add('高通',ftString,10,False);
tblParam.FieldDefs.Add('低通',ftInteger,0,False);
tblParam.FieldDefs.Add('限幅',ftString,6,False);
tblParam.FieldDefs.Add('显示开关',ftString,4,False);
tblParam.FieldDefs.Add('颜色选取',ftString,4,False);

tblParam.IndexDefs.Clear;
tblParam.IndexDefs.Add('Index','通道',[ixPrimary,ixUnique]);

tblParam.CreateTable;
end;
end;
 
1.用sql语句 create table ...
2.用table.createtable;
 
用Tquery, 在sql属性中写入‘create table abc(.......)'
 
多人接受答案了。
 
后退
顶部