delphi 动态创建access 表,该如何解决
delphi 动态创建access 表
代码如下:
procedure Tdbbuckup.BitBtn5Click(Sender: TObject);
var
Source:string;
CreateDB:Variant;
path : string;
begin
SaveDialog1.Filter:='All files (*.mdb)|*.*';
SaveDialog1.FileName:='DataBack'+FormatDateTime('yyyyMMddhhmmss',now);
if SaveDialog1.Execute then
begin
path:=SaveDialog1.FileName;
//判断数据库是否已经存在
if FileSearch(path,ExtractFileDir(Application.ExeName))<>'' then
begin
Application.MessageBox('数据库已经存在!','提示',64);
exit;
end
else
begin
// 创建数据库
Source:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+path+'.mdb';
try
CreateDB:=CreateOleObject('ADOX.Catalog');
CreateDB.Create(Source);
Application.MessageBox('数据库创建成功','提示',64);
memo1.Lines.Add(' 导出数据');
memo1.Lines.Add(FormatDateTime('',now)+': '+'创建数据库成功');
memo1.Lines.Add(FormatDateTime('',now)+': '+'创建路径:'+path+'.mdb');
except
Application.MessageBox('数据库创建失败','提示',64);
end;
end;
end;
//创建数据库中的表
ADO.ConnectionString:=Source;
ADO.Connected:=true;
ADOQuery2.Connection:=ADO;
spfjdh;
end;
//
procedure Tdbbuckup.spfjdh;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
sql:= 'create table spfjdh '+
'(编号 COUNTER PRIMARY KEY,' +
' 进货单号 varchar,'+
' 进货商 varchar,'+
' 进货日期 datetime,'+
' 应付金额 CURRENCY,'+
' 实付金额 CURRENCY,'+
' 欠款金额 CURRENCY,'+
' 费用 CURRENCY,'+
' 付款人 varchar,'+
' 付款说明 memo,'+
' 操作员 varchar,'+
' 经办人 varchar,'+
' 结账 bit,'+
' 审核 varchar,'+
' 备注 varchar,'+
' 备注1 memo)' ;
ADOQuery2.SQL.Add(sql);
try
ADOQuery2.ExecSQL;
memo1.Lines.Add('创建表: spfjdh ;属性说明 商品进货总金额 ; 成功');
//查询表名
except
Application.MessageBox('数据表创建失败','提示',64);
memo1.Lines.Add('创建表: spfjdh ;属性说明 商品进货总金额 ; 失败');
end;
end;
原因:导出数据前动态创建一个与原数据库同样的表结构.
原数据库图片:
新数据库图片
问题:就是‘结账’这个布尔值,是哪里错了吗?
------解决方案--------------------
是不是你直接用数字型比较好啊,0,1表示结帐
状态
------解决方案--------------------
这个没有关系的,只是在表里面显示的形式不同而已(非0的都是表示为真)
即使你看到是勾上或者不勾,其实它内容就是0与-1
------解决方案--------------------
布尔型应该是YESNO吧
------解决方案--------------------
动态创建access,mark一下……
------解决方案--------------------
‘结账’这个逻辑定义用' 结账 bit,'跟' 结账 YesNo,'是等效的,你原文贴图的差异仅在于用Access打开时,这个字段的“查阅”显示控件不同,一个是指定了“复选框”,后一个是指定了“文本框”,这一点仅在Access中打开有差异,在delphi的sql操作记录的过程中,是没差异的。
代码如下:
procedure Tdbbuckup.BitBtn5Click(Sender: TObject);
var
Source:string;
CreateDB:Variant;
path : string;
begin
SaveDialog1.Filter:='All files (*.mdb)|*.*';
SaveDialog1.FileName:='DataBack'+FormatDateTime('yyyyMMddhhmmss',now);
if SaveDialog1.Execute then
begin
path:=SaveDialog1.FileName;
//判断数据库是否已经存在
if FileSearch(path,ExtractFileDir(Application.ExeName))<>'' then
begin
Application.MessageBox('数据库已经存在!','提示',64);
exit;
end
else
begin
// 创建数据库
Source:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+path+'.mdb';
try
CreateDB:=CreateOleObject('ADOX.Catalog');
CreateDB.Create(Source);
Application.MessageBox('数据库创建成功','提示',64);
memo1.Lines.Add(' 导出数据');
memo1.Lines.Add(FormatDateTime('',now)+': '+'创建数据库成功');
memo1.Lines.Add(FormatDateTime('',now)+': '+'创建路径:'+path+'.mdb');
except
Application.MessageBox('数据库创建失败','提示',64);
end;
end;
end;
//创建数据库中的表
ADO.ConnectionString:=Source;
ADO.Connected:=true;
ADOQuery2.Connection:=ADO;
spfjdh;
end;
//
procedure Tdbbuckup.spfjdh;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
sql:= 'create table spfjdh '+
'(编号 COUNTER PRIMARY KEY,' +
' 进货单号 varchar,'+
' 进货商 varchar,'+
' 进货日期 datetime,'+
' 应付金额 CURRENCY,'+
' 实付金额 CURRENCY,'+
' 欠款金额 CURRENCY,'+
' 费用 CURRENCY,'+
' 付款人 varchar,'+
' 付款说明 memo,'+
' 操作员 varchar,'+
' 经办人 varchar,'+
' 结账 bit,'+
' 审核 varchar,'+
' 备注 varchar,'+
' 备注1 memo)' ;
ADOQuery2.SQL.Add(sql);
try
ADOQuery2.ExecSQL;
memo1.Lines.Add('创建表: spfjdh ;属性说明 商品进货总金额 ; 成功');
//查询表名
except
Application.MessageBox('数据表创建失败','提示',64);
memo1.Lines.Add('创建表: spfjdh ;属性说明 商品进货总金额 ; 失败');
end;
end;
原因:导出数据前动态创建一个与原数据库同样的表结构.
原数据库图片:
新数据库图片
问题:就是‘结账’这个布尔值,是哪里错了吗?
------解决方案--------------------
是不是你直接用数字型比较好啊,0,1表示结帐
状态
------解决方案--------------------
这个没有关系的,只是在表里面显示的形式不同而已(非0的都是表示为真)
即使你看到是勾上或者不勾,其实它内容就是0与-1
------解决方案--------------------
布尔型应该是YESNO吧
------解决方案--------------------
动态创建access,mark一下……
------解决方案--------------------
‘结账’这个逻辑定义用' 结账 bit,'跟' 结账 YesNo,'是等效的,你原文贴图的差异仅在于用Access打开时,这个字段的“查阅”显示控件不同,一个是指定了“复选框”,后一个是指定了“文本框”,这一点仅在Access中打开有差异,在delphi的sql操作记录的过程中,是没差异的。