大家来看看,为什么我不能动态创建表?(100分)

  • 主题发起人 主题发起人 blad_pitt
  • 开始时间 开始时间
B

blad_pitt

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个动态创建数据库,并动态创建表的程序,可是数据库是创建出来了,表却不行
出错提示说找不到刚创建的数据库,可BDE ADMINISTRATOR里却有啊,是不是还得刷新一下
啊,怎么刷新呢?源代码如下,请各位研究。

unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Tabnotbk, Grids, Calendar, StdCtrls, Db, DBTables, DBCtrls;

type
TForm2 = class(TForm)
TabbedNotebook1: TTabbedNotebook;
Calendar1: TCalendar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
Button2: TButton;
Label4: TLabel;
Label5: TLabel;
Table1: TTable;
Label6: TLabel;
DataSource1: TDataSource;
Button4: TButton;
Button5: TButton;
Table1Name: TStringField;
Table1Passwd: TStringField;
Session1: TSession;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Calendar1Change(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
n1,n2:string;
implementation

uses mima1;

{$R *.DFM}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Close;
end;

procedure TForm2.FormShow(Sender: TObject);
var
ap:tstringlist;
begin
label1.caption:=inttostr(calendar1.year)+'年';
label2.caption:=inttostr(calendar1.month)+'月';
label3.caption:=inttostr(calendar1.day)+'日';
label5.caption:=datetostr(now);
n1:=extractfiledir(application.exename);
n2:=n1+'/'+h1;
ap:=tstringlist.Create;
session1.SessionName:='session1';
session1.GetAliasNames(ap);
if(ap.indexof(mima1.h1)=-1)then
begin
createdirectory(pchar(n2),nil);

session1.AddStandardAlias(h1,n2,'paradox');
session1.SaveConfigFile;
ap.clear;
with table1 do
begin
active:=false;
databasename:=h1;
tablename:=h1+'score';
tabletype:=ttparadox;
with fielddefs do
begin
clear;
add('odate',ftdate,0,false);
add('omemo',ftmemo,1,false);
end;
createtable;
active:=true;
end;
ap.free;
end;



end;

procedure TForm2.Calendar1Change(Sender: TObject);
begin
label1.caption:=inttostr(calendar1.year)+'年';
label2.caption:=inttostr(calendar1.month)+'月';
label3.caption:=inttostr(calendar1.day)+'日';
end;

procedure TForm2.Button5Click(Sender: TObject);
begin
calendar1.month:=calendar1.Month-1;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
calendar1.month:=calendar1.Month+1;
end;

end.
 
各位高手你们帮帮小弟吧!
 
我不懂,帮忙提前了。
 
动态表我一般都是用Session建立BDE别名,
用SQL语句建立Paradox,好象还没有出现过问题。
------------天天看代码,又一段代码???我晕------------
 
把 tablename:=h1+'score'; 改成 tablename:=h1+'score.db';
没有后缀的话,delphi不认识,知道么!
 
加注释了,请大家各抒己见!
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Tabnotbk, Grids, Calendar, StdCtrls, Db, DBTables, DBCtrls;

type
TForm2 = class(TForm)
TabbedNotebook1: TTabbedNotebook;
Calendar1: TCalendar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
Button2: TButton;
Label4: TLabel;
Label5: TLabel;
Table1: TTable;
Label6: TLabel;
DataSource1: TDataSource;
Button4: TButton;
Button5: TButton;
Table1Name: TStringField;
Table1Passwd: TStringField;
Session1: TSession;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Calendar1Change(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
n1,n2:string;
implementation

uses mima1;

{$R *.DFM}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Close;
end;

procedure TForm2.FormShow(Sender: TObject);
var
ap:tstringlist;
begin
label1.caption:=inttostr(calendar1.year)+'年';
label2.caption:=inttostr(calendar1.month)+'月';
label3.caption:=inttostr(calendar1.day)+'日';
label5.caption:=datetostr(now);
n1:=extractfiledir(application.exename);{得到该程序的路径}
n2:=n1+'/'+h1;{一会要建立的库的路径}
ap:=tstringlist.Create;{取字符串列表}
session1.SessionName:='session1';
session1.GetAliasNames(ap);{检测库别名中是否已经有了这个名字}
if(ap.indexof(mima1.h1)=-1)then{如果没有}
begin
createdirectory(pchar(n2),nil);{创建文件夹}

session1.AddStandardAlias(h1,n2,'paradox');{动态添加别名为登陆名h1,路径为n2,类型为paradox的库别名}
session1.SaveConfigFile;{存盘}
ap.clear;
with table1 do {以下
begin 是
active:=false; 创建表
databasename:=h1; 的过程
tablename:=h1+'score'; ,请大家睁大眼睛
tabletype:=ttparadox; 看看错出在哪?}
with fielddefs do
begin
clear;
add('odate',ftdate,0,false);{加字段}
add('omemo',ftmemo,1,false);
end;
createtable;{创建}
active:=true;
end;
ap.free;
end;



end;

procedure TForm2.Calendar1Change(Sender: TObject);
begin
label1.caption:=inttostr(calendar1.year)+'年';
label2.caption:=inttostr(calendar1.month)+'月';
label3.caption:=inttostr(calendar1.day)+'日';
end;

procedure TForm2.Button5Click(Sender: TObject);
begin
calendar1.month:=calendar1.Month-1;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
calendar1.month:=calendar1.Month+1;
end;

end.
 
to linyi_cn :
你说的不对,出错提示是说找不到数据库别名为H1的库,可是手动查看发现,库已经建成了
可能是需要刷新,可我不知道该怎么刷新。
 
你查找到的创建的表的文件名是什么?
 
没找到那个数据库,当然也就没能创建表了。
 
你调试的时候到哪一句出错?
 
CREATTABLE那一句
 
兄弟:你这个程序大不大?发我邮箱我帮你搞定得了!(我用delphi5,你要是delphi6就先把
form存成txt格式的.

my email:linyi_cncn@yahoo.com.cn
 
兄弟:我帮你搞定了!


with table1 do
begin
active:=false;
SessionName:='session1'; //[red]这句是新加的[/red]
databasename:=h1;
tablename:=h1+'score';
tabletype:=ttparadox;
with fielddefs do
begin
clear;
add('odate',ftdate,0,false);{加字段}
add('omemo',ftmemo,1,false);
end;
createtable;{创建}
active:=true;
end;

另外,你这样的编法是不是太累了,难不成每增加一个新用户你都要建一个目录,建一个
别名,建一个PARADOX库?也太浪费资源了吧!为什么不用一个库呢,直接连个TABLE或
QUERY就行了,还用什么数据库别名和SESSION!
 
忘了说了,你创建表时好象有个索引忘加了!
 
我现在还不知道对错,一会试试,好使的话,这些分都是你的,不过我想顺便问一下,
为什么对TABLE也要加SESSIONNAME:=‘SESSION’这句呢
 
不如用如下语句建表,以过程形式,代码也好理解
Procedure CreateWr1table(PathToTable : String);
begin
with TTable.Create(Application) do
begin
Active := False;
DatabaseName := PathToTable;
TableName := 'wr1';
TableType := ttDefault;
FieldDefs.Add('1', ftAutoInc, 0, False);
CreateTable;
Free;
end;
end;
 
接受答案了.
 
后退
顶部