我在DLL文件里面写了几个函数,调用的时候发现有时候出现堆栈错误,于是打算追踪一下。首先打开该DLL的工程,在RUN|PARAMATER中设置好调用了该DLL的应用程序,然后执行。按说这样就可以吧,但是却发现我在函数中设置的断点都不可用,为什么呢?代码如下:这是把一个DBGrid中选中的记录添加到另一个DBGrid的过程。
{$R *.res}
procedure SelectRecord(Source,Target:TDBGridEh;ADOCon:TADOConnection;sqlstr,Key:string);
var
i,j:integer;
TempADO:TADOQuery;
TempDS:TDataSource;
begin
TempADO:=TADOQuery.Create(nil);
TempDS:=TDataSource.Create(nil);
TempDS.DataSet:=TempADO;
with TempADO do
begin
Connection:=ADOCon;
SQL.Clear;
SQL.Add(sqlstr);
Prepared;
Open;
end;
try
if Source.SelectedRows.Count>0 then
with Source.DataSource.DataSet do
for i:=0 to Source.SelectedRows.Count-1 do
begin
GotoBook(pointer(Source.SelectedRows.items[i]));
if not TempADO.Locate(Key,fieldbyname(Key).Value,[loCaseInsensitive]) then
begin
TempADO.Append;
for j:=0 to TempADO.FieldCount-1 do
TempADO.Fields[j].Value:=Fields[j].Value;;
TempADO.Post;
end else
messagedlg('选择的纪录已经存在。'+#13+'主键='+fieldbyname(key).AsString,mtinformation,[mbok],0);
end;
finally
TempADO.Free;
TempDS.free;
end;
end;
//导出过程
exports
SelectRecord index 1;
begin
end.
{$R *.res}
procedure SelectRecord(Source,Target:TDBGridEh;ADOCon:TADOConnection;sqlstr,Key:string);
var
i,j:integer;
TempADO:TADOQuery;
TempDS:TDataSource;
begin
TempADO:=TADOQuery.Create(nil);
TempDS:=TDataSource.Create(nil);
TempDS.DataSet:=TempADO;
with TempADO do
begin
Connection:=ADOCon;
SQL.Clear;
SQL.Add(sqlstr);
Prepared;
Open;
end;
try
if Source.SelectedRows.Count>0 then
with Source.DataSource.DataSet do
for i:=0 to Source.SelectedRows.Count-1 do
begin
GotoBook(pointer(Source.SelectedRows.items[i]));
if not TempADO.Locate(Key,fieldbyname(Key).Value,[loCaseInsensitive]) then
begin
TempADO.Append;
for j:=0 to TempADO.FieldCount-1 do
TempADO.Fields[j].Value:=Fields[j].Value;;
TempADO.Post;
end else
messagedlg('选择的纪录已经存在。'+#13+'主键='+fieldbyname(key).AsString,mtinformation,[mbok],0);
end;
finally
TempADO.Free;
TempDS.free;
end;
end;
//导出过程
exports
SelectRecord index 1;
begin
end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货