我的一个朋友问我如何在运行时创建一个"映射"数据库表的类.他正在使用ADO连接到数据库.
我的回答是,他可以使用'table_name'选择第一行来填充ADOQuery,设置与数据库的连接,打开查询,然后在ADOQuery.Fields上使用循环,他可以得到所有的FieldName和FieldType表中的字段.通过这种方式,他可以将表中的所有字段及其类型作为类的成员.
他的问题有其他解决方案吗?
问题是:在提出异常之后,我可以阻止它从它自己的构造函数传播吗?考虑下面的代码:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TMyErrorClass = class(Exception)
constructor Create(aMsg:String);
end;
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//
raise TMyErrorClass.Create('test');
end;
{ TMyErrorClass}
constructor TMyErrorClass.Create(aMsg: String);
begin
{$IFDEF DEBUG}
Showmessage(aMsg);
{$ELSE}
//here I want to 'kill' the exception
{$ENDIF}
end;
end.
Run Code Online (Sandbox Code Playgroud)
在调用raise之后,如何在不添加try的情况下终止异常,而不是在我提出异常的地方?
LE:我有一个应用程序,它有近2000个这样的加注......而我正试图找到一个替代解决方案来为它编写错误处理....
我不明白为什么会出现这个错误...这是XE中的错误,还是IDE设置中的错误?

我知道FastStrings中的很多代码都包含在Delphi XE中.我需要处理数千个文件并进行一些文本处理.System.Pos例程是否有"更快"的替代方案?
我正在将图像添加到像这里的图像列表中 - 使用Delphi XE在运行时将png图像添加到图像列表.从此列表中获取位图并将其保存到硬盘驱动器时会出现此问题.
bmp:=tbitmap.create;
imagelist.getbitmap(0,bmp);
bmp.savetofile()
Run Code Online (Sandbox Code Playgroud)
这发生在很多白色bmp文件和几个带有"图像"的文件中.它应该非常容易,但我无法理解什么是错的.
LE:这个例子更像伪代码.下面是:
填写清单
FImageList := TImageList.Create(nil);
FImageList.Masked:=false;
FImageList.ColorDepth:=cd32bit;
FImageList.SetSize(32,32);//I am sure that all images are 32x32
while not dsTemp.eof do//dstemp is a Tdatasetdescendant
begin
ststream := dsTemp.CreateBlobStream(dsTemp.FieldByName('FLAG'), bmRead);
pngImage := TPngImage.Create;
pngImage.LoadFromStream(ststream);
btBitmap := TBitmap.Create;
btBitmap.PixelFormat := pf32bit;
btBitmap.Width := pngImage.Width ;
btBitmap.Height := pngImage.Height ;
pngImage.AssignTo(btBitmap);
btBitmap.AlphaFormat:=afIgnored;
res := FImageList.Add(btBitmap,nil);
// pngImage.savetofile('C:\a\'+inttostr(res)+'.png');-works. image is ok
// btBitmap.savetofile('C:\a\'+inttostr(res)+'.bmp');-works. image is ok
dsTemp.Next;
freeandnil(btBitmap);
freeandnil(pngImage);
end;
Run Code Online (Sandbox Code Playgroud)
加载位图的问题
for iPos := 0 to FImageList.Count-1 …Run Code Online (Sandbox Code Playgroud) 我今天正在测试一些东西,我注意到你可以访问一个对象的布尔类型属性,即使没有创建实例.这怎么可能?尝试修改布尔属性时会引发AV.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TTest = class(TObject)
public
bBool : Boolean;
end;
TForm4 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
var t : TTest;
begin
if t.bBool then
ShowMessage('what????');//this message is showed
t.bbool := false; //AV...
end;
end.
Run Code Online (Sandbox Code Playgroud) 这个问题只有教育目的.此时我正在制作一个小应用程序,我希望在其中包含一个身份验证机制.应用程序在安装时应该可以访问Internet,但是可以脱机工作.到目前为止,我一直在考虑以下解决方案:
1)经典:发送到身份验证Web服务的用户名和密码(加密) - Internet连接断开时出现问题.
2)根据主板/硬盘序列号生成密码否 - 这会在组件更改时产生问题.
另外,我想要包含一个"记住密码"复选框.这是最安全的方法吗?我应该在哪里存储这些信息?
我相信你们大多数人已经建立了一个或多或少复杂的认证机制,我在征求你的意见.此外,我知道一切都可以被黑客攻击,但我想尽可能地让它变得困难.
我正在努力处理一段简单的代码,即使很简单,我找不到解决方案.在某个方面,我有一个像这样的事件
OnReadMessageParameter(Self, aName, aTypeInfo, pointer(@aValue), [psIsTValue]);
Run Code Online (Sandbox Code Playgroud)
重要的是aValue参数,它是TValue类型.当这被称为aValue.IsObject时为true.为了处理来自它的数据,我已经为此事件分配了我的例程:
.DoOnReadMessageParameter(Sender: TROMessage; const aName: string;
aTypeInfo: PTypeInfo; const DataRef: pointer; Attributes: TParamAttributes);
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,我已经尝试过几种方法将DataRef转换回TValue项:
var val: tvalue;
tvalue.Make(@DataRef^,TypeInfo(TValue),val);
or another attempt
val := TValue(@DataRef^);
Run Code Online (Sandbox Code Playgroud)
但IsObject属性为false.它一定是非常简单的东西,我错过了.任何的想法?
我知道有很多这样的问题,但我找不到我想做的事情的任何答案。
考虑以下抽象类:
public abstract class TestBase
{
public static ITest Test => Container.Resolve<ITest>();
public static ITest1 Test1 => Container.Resolve<ITest1>();
public static ITest2 Test2 => Container.Resolve<ITest2>();
public static ITest3 Test3 => Container.Resolve<ITest3>();
}
Run Code Online (Sandbox Code Playgroud)
我试图获取从 IDummy 接口继承的所有属性,如下所示:
var members = typeof(TestBase).GetMembers(BindingFlags.Static | BindingFlags.Public)
.Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true);
Run Code Online (Sandbox Code Playgroud)
但列表是空的。如果不添加 where 子句“ .Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true)”,我会得到所有结果,包括属性的 getter。
可能是一些微不足道的事情,但由于我对反射不太熟悉,我无法弄清楚我做错了什么。
delphi ×9
delphi-xe ×4
.net ×1
ado ×1
c# ×1
delphi-2006 ×1
delphi-7 ×1
delphi-xe3 ×1
oop ×1
reflection ×1