Z
zoulin
Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
我在使用paradox7.0版本的数据库时,发现一个怪问题,程序在执行以下功能时回报告如下错误(有时有,有时无):
access violation at 0x401d4a:write od address 0x42da9c 89 02 89 50 04 5b c3 8d 40 00 8b 15。
我的代码:
_createtable('borker.db');
tsfn.ini:
[borker.db]
field=num_ywy char(5),name_ywy char(10),rate_tc float,rate_bxzj float,begindate date,cdt char(19),cun char(10),mdt char(19),mun char(10),keyid char(8),primary key (num_ywy)
function _createtable(_tablename:string;_overlay:boolean=false): string;
const
CreateSQL ='Create Table "%s" (%s)'; //SQL建表框架
Createindex='Create index %s'; //SQL索引框架
var
tsfn :TIniFile; //表结构存放ini文件
myQuery :Tquery;
tablename :string; //表名称
tfield :string; //字段名和数据类型描述部分
tindex :string; //索引名称和数据类型描述部分
p_num :integer;
p_char char;
begin
_dbfilename:='tsfn.ini';
if not FileExists(_dbfilename) then //检测表结构的配置文件是否存在
begin
messagebeep(MB_ICONQUESTION);
messagedlg('数据表格配置文件不存在,无法生成数据表格...',mterror,[mbcancel],0);
exit;
end;
if FileExists(_tablename) then
begin
if _overlay then messagebeep(MB_ICONQUESTION);
if not _overlay or (MessageDlg(uppercase('你确认是否需要重新创建 '+
_tablename+' 吗?'),mtWarning,[mbYes,mbNo],0)=mryes) then
begin
getmem(p_char,length(_tablename));
StrPCopy(p_char,_tablename);
DeleteFile(p_char);
end
else exit;
end;
tableName:=ExtractFilename(_tablename);
tsfn :=TIniFile.Create(_dbfilename);
tfield :=tsfn.ReadString(tableName,'field','');
myQuery :=Tquery.Create(application); //建立TQuery对象
myQuery.DatabaseName:=ExtractFilepath(_tablename);
myQuery.sql.clear;
myQuery.UnPrepare;
myQuery.sql.add(format(CreateSQL,[_tablename,tfield])); //填充Tquery中的SQL语句;
myQuery.Prepare;
try
myQuery.ExecSQL; //执行SQL命令
finally
myQuery.Close;
end;
p_num:=1;
repeat
tindex:=tsfn.ReadString(tableName,'index'+inttostr(p_num),'');
if tindex<>'' then
begin
p_num:=p_num+1;
myQuery.sql.clear;
myQuery.UnPrepare;
myQuery.sql.add(format(Createindex,[tindex])); //填充Tquery中的SQL语句;
myQuery.Prepare;
try
myQuery.ExecSQL; //执行SQL命令
finally
myQuery.Close;
end;
end;
until tindex='';
myQuery.free;
tsfn.free;
end;
我在使用paradox7.0版本的数据库时,发现一个怪问题,程序在执行以下功能时回报告如下错误(有时有,有时无):
access violation at 0x401d4a:write od address 0x42da9c 89 02 89 50 04 5b c3 8d 40 00 8b 15。
我的代码:
_createtable('borker.db');
tsfn.ini:
[borker.db]
field=num_ywy char(5),name_ywy char(10),rate_tc float,rate_bxzj float,begindate date,cdt char(19),cun char(10),mdt char(19),mun char(10),keyid char(8),primary key (num_ywy)
function _createtable(_tablename:string;_overlay:boolean=false): string;
const
CreateSQL ='Create Table "%s" (%s)'; //SQL建表框架
Createindex='Create index %s'; //SQL索引框架
var
tsfn :TIniFile; //表结构存放ini文件
myQuery :Tquery;
tablename :string; //表名称
tfield :string; //字段名和数据类型描述部分
tindex :string; //索引名称和数据类型描述部分
p_num :integer;
p_char char;
begin
_dbfilename:='tsfn.ini';
if not FileExists(_dbfilename) then //检测表结构的配置文件是否存在
begin
messagebeep(MB_ICONQUESTION);
messagedlg('数据表格配置文件不存在,无法生成数据表格...',mterror,[mbcancel],0);
exit;
end;
if FileExists(_tablename) then
begin
if _overlay then messagebeep(MB_ICONQUESTION);
if not _overlay or (MessageDlg(uppercase('你确认是否需要重新创建 '+
_tablename+' 吗?'),mtWarning,[mbYes,mbNo],0)=mryes) then
begin
getmem(p_char,length(_tablename));
StrPCopy(p_char,_tablename);
DeleteFile(p_char);
end
else exit;
end;
tableName:=ExtractFilename(_tablename);
tsfn :=TIniFile.Create(_dbfilename);
tfield :=tsfn.ReadString(tableName,'field','');
myQuery :=Tquery.Create(application); //建立TQuery对象
myQuery.DatabaseName:=ExtractFilepath(_tablename);
myQuery.sql.clear;
myQuery.UnPrepare;
myQuery.sql.add(format(CreateSQL,[_tablename,tfield])); //填充Tquery中的SQL语句;
myQuery.Prepare;
try
myQuery.ExecSQL; //执行SQL命令
finally
myQuery.Close;
end;
p_num:=1;
repeat
tindex:=tsfn.ReadString(tableName,'index'+inttostr(p_num),'');
if tindex<>'' then
begin
p_num:=p_num+1;
myQuery.sql.clear;
myQuery.UnPrepare;
myQuery.sql.add(format(Createindex,[tindex])); //填充Tquery中的SQL语句;
myQuery.Prepare;
try
myQuery.ExecSQL; //执行SQL命令
finally
myQuery.Close;
end;
end;
until tindex='';
myQuery.free;
tsfn.free;
end;